伊莉討論區

標題: 關於 影像辨識 相關系列文 [打印本頁]

作者: goodbye_mylove    時間: 2011-12-26 01:07 PM     標題: 關於 影像辨識 相關系列文

管理致歉

近來會員熱心分析一系列之影像辨識相關系列文,
版主於第一時間未進行附件之下載與驗證,
直接依版規進行獎勵,確實不妥,便將相關系列文鎖碼、去積分。

經慎思後認為,於附上附件之壓縮密碼,
或更改附件成無壓縮密碼,方再補上應有之積分。

【相關議題】

關於此議題似乎部份網友有所興趣,版主雖無任何相關實際實作經驗,
為避免系列文效應擴大,此處予以有興趣之版友一些背景知識之補充。
自認不夠專業,也期有經驗、有想法之版友予以補充或指正。

最簡單之方式

一種較為即時、不花時間之方式,是直接以 RGB 或 YMean為特徵方式選取,
在人臉辨識中,由於人之膚色在自然色系中較為少見,故一些辨識圈選原則,
便是很單純的用膚色 RGB 作為圈選方式,同時會再設 RGB +- offset 做為
偏移量,設出來將會是一個 range 判斷該顏色是否為膚色,這是較為簡單的
作法,稍為複雜一點點的會將 +- offset 之概念換為模糊理論,但版主本身
對於模糊理論之 Application 效果感覺不出有明顯加值作用,此處避戰文,
不予深入探討。

判斷完膚色之後,會得到 0/1 之 Matrix,此時必須使用到一些找最大凸包之
圖論演算法,找到該凸包後,判斷若近似於人臉之形狀 (所以會有幾個人臉之
pattern),則就判斷該區域為人臉。

這種作法當然有不少暇疪之處,但已說了這是「最簡易」之方式,暇疪一為這
種作法實際跑完後,一些實作會發現它不會對黑人的臉作到辨識,因在膚色那
裡出了 trouble。

一般影像辨識流程

(1) 取得影像來源資料

一般影像來源不外乎是靜態之影像檔 ( bmp 、 jpg ),也可能是 image sensor (webcam) ,但不論來源為何,都必須先取出一張圖出來,即使是 webcam ,也必須先取出一張影像出來。

一般最常拿來分析的是 bmp 圖檔,因 bmp 圖檔是最原始、沒壓縮過的資料,可直接讀其 format ,得到原始之 rgb raw data 出來做分析,這部份可以自己寫相關函式。雖 bmp Format 本身並不難,但其實也有點複雜,要寫完整、通用會花不少時間,故一般人寫給自己用時都會有些基本假設,且初學者寫 bmp Format 時通常也都假設該 bmp 不使用調色盤。這部份較建議直接拿現有之 API 下來用,去學 API 怎麼用便可。

至於另一常見之 jpg 格式為壓縮失真過,且編碼方式較不直覺,故若手邊是 jpg 格式有二種作法: (a) 解 jpg format,對應 rgb raw data ,這部份可能有 library 在做這東西 (b) 直接找 library,將 jpg 顯示出來,以 GetPixel 方式取得該 jpg rgb raw data,但速度顯得較慢。


Webcam 取得影像之方式會視情況取得之方式不同,若是完全靜態影像時,「有時」會連續取 5 張,做平均,若為非完全靜態影像時 (只要有一點點動就不是完全靜態),則只會取一張影像出來做處理。

而大多之影像處理,都以灰階圖方式做處理,故再多一個  YMean Matrix 會好些。

(2) 去雜訊

去雜訊方法大多是在 time-domain 與 freq-domain 做切換處理,會用到一些 FFT (Fast Fourier),於是這部份要自己搞的話可能會安裝一些額外之 library,如 fftw 做 FFT。但這部份處理不好的話會把一些重要的細節影像也一起處理掉。這裡還會有一些小波、大波的東西可以摸一大段時間。

也由於這部份要自己處理並不容易,於是在研究影像辨識階段通常這部份是直接跳過的,也就是說會先挑好的 demo image 出來,這部份就不用自己搞。也或者會由一些現有之軟體去代為服務,如 Neat Image 、Grain Surgery 、PhotoShop。

(3) 對影像做縮放、裁剪

由於影像取得的來源大小可能不一,在做辨識時較常是先固定一 Size 做辨識,若 Size 不同時,會先以線性方式做為縮放。
若要自動判定應縮放倍率、裁剪大小,這又是另一門學問,主要軸心放在邊界偵測,常見有凸包法、Sobel 邊緣偵測、Canny 邊緣偵測、Prewitt 邊緣偵測,但效果好不好又是另一回事,於是這部份在辨識研究上大多也是採用事先處理 (選 demo image)。

另影像之縮放可能會帶來失真,故有一系列之演算法期望將失真程度降至較低,常見的包含 Nearest Neighbor 、Bilinear Interpolation、Bicubic Interpolation。

(4) 濾鏡 (Filter)

由於縮放後即使會使失真程度降至較低,但還是會有不和諧的情況發生,如直線變鋸齒、顏色改變之交叉點出現異常等。這部份相關演算法包含了 Sharp/High Pass Filter、Smooth/Low Pass Filter,同時 Filter 之 Matrix Value 也可由 user / coder 自行設定。一些研究便是圍繞在自適應之濾鏡參數調整,唯這部份版主也沒閱過相關文章或文獻,不再野人獻曝。


上面四個步驟,是在做影像辨識前的前置步驟,若每個步驟效果是維持原影像品質之 95%(這算是給很高的數值),四個步驟下來將變成原影像品質之 (95%)^4 = 81%。故在一般做研究時,真的會先挑過一些 demo image,讓出來的數據會好看些。


(5) 辨識技巧

一般影像辨識技巧常用之演算法非常多,也有結合人工智慧或啟發式之相關演算法,此處也不細說,只列舉個演算法名稱,有興趣可再深入搜尋。

(a) 類神經網路 (ann)

ann 有許多模型,但大多用在影像辨識之 ann ,會用監督式學習之模型,故在程式 release 前,會先取得一堆有效之 demo image,再進行訓練,取得 ann 模型之相關參數值;最後程式 release 出去時再將該參數值寫死。

(b) Clustering / Classification

這二名詞所代表意義有點相似,在 Data Mining 相關書籍或課程會有較詳細之介紹。若現 10 張圖片,每張圖只可能是 1 元、5元、10 元,
若程式要將每張圖準確將各其分類,且知道每個類別所代表之意義,用 Classification (屬監督式);若程式沒必要知道每個類別所代表之意義 (此時之類別在學術上大多稱  叢聚,Clustering),只是將 "圖片長得差不多的分在同一類",用 Clustering (屬非監督式)。關於監督式與非監督式此處並未給予適當之解釋與定義,有興趣請再額外查詢。

(c) 幾何演算法

先註明,"可能" 有些說圖論的書,包含了幾何演算法。
這裡說的幾何演算法主要有幾個部份

基本幾何

ˇ點、線、多邊形表示法
ˇ直線相交
ˇ簡單封閉路徑
ˇ檢查點是否在多邊形內

凸面體

ˇ求凸面體規則
ˇ Graham 掃描法
ˇ多餘內部點刪除

區域搜尋

ˇ方格法
ˇ二維度
ˇ高維之區域搜尋相關算法

最近點問題

ˇ找出最近二個點
ˇVoronoi 圖

幾何演算法版主認為是影像處理之基礎之一,當然大多數人可能在不會幾何演算法前就直接去做影像處理之動作,這也沒什麼不好,可能到了有需求的時候,才發現原來其需求就在幾何演算法裡。

小結

本文雖沒任何程式碼之示例,雖能給有興趣進入影像辨識之版友們一點開頭,或許有興趣時該買本 Digial Image Process (講理論的影像處理書籍),及買本以程式語言示例的影像處理 (重實影像處理書籍),兩本對照跑,相信可有不少收益。

若有任何意見,請不吝討論。




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!