1. 程式人生 > >影象與機器學習-3-特徵

影象與機器學習-3-特徵

學習了影象處理中的5種特徵提取方法,這些特徵提取方法各有特點,適用場景也不同。

1. 直方圖&&haar-like特徵提取:

直方圖:單個畫素灰度分佈的一階統計量。紋理是灰度在空間以一定的形式變換產生的圖案,直方圖是描述影象中畫素灰度級分佈的工具,可以用直方圖或其統計特徵作為影象的紋理特徵。

其中最常用的是灰度直方圖,英文灰度具有一定的穩定性,對大小、方向都不敏感, 能表現出相當強的魯棒性。

示例:

Haar-like:

Haar-like的優勢在於能更好地描述明暗變化,如:眼睛比臉頰的顏色要深,鼻樑兩側比鼻樑顏色要深等,因此用於檢測正面的人臉。

特徵值:特徵模板內有白色和黑色兩種矩形,並定義該模板的特徵值為白色矩形畫素和減去黑色矩形畫素和,反映了影象的灰度變化,但是矩形特徵只對簡單的圖形結構,如邊緣、線段較敏感,因此只能描述特定方向(水平、垂直、對角)的結構。

邊緣特徵,線性特徵,中心特徵,對角特徵等等


A、B、C、D稱為特徵原型,在影象子視窗中擴充套件(平移伸縮)得到的特徵稱為矩形特徵,其值稱為特徵值。

預處理:

積分圖:是一個數據結構,可以用於快速計運算元區域的畫素和。定義為:

表示為在(x,y)位置上,對應的積分圖中的畫素為其左上角所有畫素之和。

適用積分圖快速計算某區域的畫素和:



個人總結:積分圖對影象的預處理極大程度的加快了運算中的計算量,通過一次計算,免去了後面無數次重複的計算量,計算小區域的畫素和只需要做一個簡單的加減運算即可得到結果,這個預處理的實現對於影象處理中的減少運算量有極大的啟發。

 

2. PCA&LBP

PCA(Principal Component Analysis)主成因分析:

是一種常用的資料分析方法。PCA通過線性變換將原始資料變換為一組各維度線性無關的表示,可用於提取資料的主要特徵分量,常用於高維資料的降維。PCA是人臉識別的主流方法之一。

其核心思想是:重整高維資料,提取其中的重要部分,忽略其中無關緊要的部分。

例項:3維降為2維:


PCA不僅僅是對高維資料進行降維,更重要的是經過降維去除了噪聲,發現了資料中的模式。PCA把原先的n個特徵用數目更少的m個特徵取代,新特徵是舊特徵的線性組合,這些線性組合最大化樣本方差,儘量使新的m個特徵互不相關。從舊特徵到新特徵的對映捕獲資料中的固有變異性。

LBP (Local Binary Pattern)區域性二值模式:

LBP是一種用來描述影象區域性特徵的運算元,LBP特徵具有灰度不變性和旋轉不變性等顯著優點。LBP特徵比較出名的應用是用在人臉識別和目標檢測中。

原始LBP特徵描述及計算方法:

原始的LBP運算元定義在畫素3*3的鄰域內,以鄰域中心畫素為閾值,相鄰的8個畫素的灰度值與鄰域中心的畫素值進行比較,若周圍畫素大於中心畫素值,則該畫素點的位置被標記為1,否則為0。這樣,3*3鄰域內的8個點經過比較可產生8位二進位制數,將這8位二進位制數依次排列形成一個二進位制數字,這個二進位制數字就是中心畫素的LBP值,LBP值共有28種可能,因此LBP值有256種。中心畫素的LBP值反映了該畫素周圍區域的紋理資訊。

LBP特徵的改進版本:

在原始的LBP特徵提出以後,研究人員對LBP特徵進行了很多的改進,因此產生了許多LBP的改進版本:

圓形LBP: 3×3 鄰域擴充套件到任意鄰域,並用圓形鄰域代替了正方形鄰域,改進後的 LBP 運算元允許在半徑為 R 的圓形鄰域內有任意多個畫素點。從而得到了諸如半徑為 R 的圓形區域內含有 P 個取樣點的 LBP 運算元:


旋轉不變LBP特徵:上面的LBP特徵具有灰度不變性,但還不具備旋轉不變性,因此研究人員又在上面的基礎上進行了擴充套件,提出了具有旋轉不變性的LBP特徵。

首先不斷的旋轉圓形鄰域內的LBP特徵,根據選擇得到一系列的LBP特徵值,從這些LBP特徵值選擇LBP特徵值最小的作為中心畫素點的LBP特徵。具體做法如下圖所示:


如圖,通過對得到的LBP特徵進行旋轉,得到一系列的LBP特徵值,最終將特徵值最小的一個特徵模式作為中心畫素點的LBP特徵。

3. HOG(方向梯度直方圖):

與其他的特徵描述方法相比,HOG有很多優點。首先,由於HOG是在影象的區域性方格單元上操作,所以它對影象幾何的和光學的形變都能保持很好的不變性,這兩種形變只會出現在更大的空間領域上。其次,在粗的空域抽樣、精細的方向抽樣以及較強的區域性光學歸一化等條件下,只要行人大體上能夠保持直立的姿勢,可以容許行人有一些細微的肢體動作,這些細微的動作可以被忽略而不影響檢測效果。因此HOG特徵是特別適合於做影象中的人體檢測的。

大概過程:

1)灰度化

2)採用Gamma校正法對輸入影象進行顏色空間的標準化(歸一化);目的是調節影象的對比度,降低影象區域性的陰影和光照變化所造成的影響,同時可以抑制噪音的干擾;

3)計算影象每個畫素的梯度(包括大小和方向);主要是為了捕獲輪廓資訊,同時進一步弱化光照的干擾。

4)將影象劃分成小cells;

5)統計每個cell的梯度直方圖(不同梯度的個數),即可形成每個cell的描述子;

6)將每幾個cell組成一個block,一個block內所有cell的特徵描述子串聯起來便得到該block的HOG特徵描述子。

7)將影象image內的所有block的HOG特徵描述子串聯起來就可以得到該image(你要檢測的目標)的HOG特徵描述子了。這個就是最終的可供分類使用的特徵向量了。

一個影象的HOG特徵維數:

舉例說明:對於64*128的影象而言,每8*8的畫素組成一個cell,每2*2cell組成一個塊,因為每個cell9個特徵,所以每個塊內有4*9=36個特徵,以8個畫素為步長,那麼,水平方向將有7個掃描視窗,垂直方向將有15個掃描視窗。也就是說,64*128的圖片,總共有36*7*15=3780個特徵。

4. SIFT:

SIFT 特徵是基於物體上的一些區域性外觀的興趣點而與影像的大小和旋轉無關。對於光線、噪聲、些微視角改變的容忍度也相當高。基於這些特性,它們是高度顯著而且相對容易擷取,在母數龐大的特徵資料庫中,很容易辨識物體而且鮮有誤認。使用 SIFT特徵描述對於部分物體遮蔽的偵測率也相當高,甚至只需要3個以上的SIFT物體特徵就足以計算出位置與方位。在現今的電腦硬體速度下和小型的特徵資料庫條件下,辨識速度可接近即時運算。SIFT特徵的資訊量大,適合在海量資料庫中快速準確匹配。

主體步驟:

1. 尺度空間極值檢測:搜尋所有尺度上的影象位置。通過高斯微分函式來識別潛在的對於尺度和旋轉不變的興趣點。

2. 關鍵點定位:在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關鍵點的選擇依據於它們的穩定程度。

3. 方向確定:基於影象區域性的梯度方向,分配給每個關鍵點位置一個或多個方向。所有後面的對影象資料的操作都相對於關鍵點的方向、尺度和位置進行變換,從而提供對於這些變換的不變性。

4. 關鍵點描述:在每個關鍵點周圍的鄰域內,在選定的尺度上測量影象區域性的梯度。這些梯度被變換成一種表示,這種表示允許比較大的區域性形狀的變形和光照變化。


其中主要的核心思想是:

1.用高斯核函式實現尺度變換;

2.用高斯差分金字塔(DOG)近似代替了拉普拉斯運算元進行極值檢測。

3.關鍵點方向分配中,使用了類似HOG直方圖類似的方法。

4.通過對描述子進行統一操作:旋轉ox軸到主方向,解決旋轉不變性;對特徵向量進行歸一化,消除光照影響和整體漂移。

當然SIFT也有缺點:

實時性不高,對於邊緣光滑,模糊,平滑的影象特徵點少。


5. SURF:

主要步驟:

1. 構建Hessian(黑塞矩陣),生成所有的興趣點,用於特徵的提取;

2. 構建尺度空間

3. 特徵點定位

4. 特徵點主方向分配

5. 生成特徵點描述子

6. 特徵點匹配

SURF大體思想與SIFT是類似的,但是在很多地方有所不同。

首先不同的是關鍵點的檢測方法不一樣,SIFT使用的是高斯差分金字塔中在點進行上下週圍26點檢測,而SURF則是使用Hession矩陣探測器(hession矩陣與盒子濾波器)找出斑點;

與SIFT的尺度構造方法不同的是,並沒有使用高斯金字塔,高斯金字塔從下到上,圖片大小會變小。而surf的金字塔圖片大小不會變,而取而代之,是通過改變卷積模板的尺寸來實現的。

另一個不同點是在特徵點的方向分配方式上,SIFT中使用了8個方向的方向直方圖,這樣一個關鍵點特徵描述向量有4x4x8=128維,而SURF水樣的特徵點方向分配是使用特徵點半徑內的點在x,y方向上的響應,這樣每個點的方向資訊從8維壓縮到了4維,一個關鍵點特徵描述向量也變為4x4x4=64維。


通過這些改變,包括Hession矩陣找關鍵點,以及關鍵點特徵描述向量的降維,大大減少了計算量,這就使得SURF和SIFT比起來在運算速度上快很多,但是另一方面,SURF的精度就要稍微差一點。

 

6. 各種距離度量方法:

例子:計算向量(0,0)、(1,0)、(0,2)兩兩間的曼哈頓距離

X = [0 0 ; 1 0 ; 0 2]

 

1:歐式距離:


Matlab用法:

D = pdist(X,'euclidean')

2. 曼哈頓距離:


D = pdist(X, 'cityblock')

3. 切比雪夫距離:


D = pdist(X,'chebychev')

4. 閔可夫斯基距離:

其中p是一個變引數。

當p=1時,就是曼哈頓距離

當p=2時,就是歐氏距離

當p→∞時,就是切比雪夫距離      

根據變引數的不同,閔氏距離可以表示一類的距離。

D =pdist(X,'minkowski',2)

5. 標準化歐氏距離:


D = pdist(X, 'seuclidean',[0.5,1])

6. 馬氏距離:


Y =pdist(X,'mahalanobis')

7. 巴氏距離:

在同一定義域 X中,對於離散概率分佈 p和q,它被定義為:


8. 漢明距離:

兩個等長字串s1與s2之間的漢明距離定義為將其中一個變為另外一個所需要作的最小替換次數,即兩個字串對應位置的不同字元的個數。

如:

1011101與 1001001 之間的漢明距離是2   

2143896與 2233796 之間的漢明距離是3   

 irie與 rise之間的漢明距離是 3

9. 夾角餘弦:


D = 1- pdist(X,'cosine')