特徵提取介紹:HOG、SIFT、SURF、ORB、LBP、HAAR

https://blog.csdn.net/yuanlulu/article/details/82148429

一. 概述
這裏主要記錄自己的一些感悟,不是很系統。想要詳細系統的理論,請參考文末的《圖像處理之特徵提取》。

個人不是專業cv工程師,很多細節沒有深究,描述可能不嚴謹。 
在總結物體檢測算法之前先把基礎的特徵點理論整理一下。

二. HOG
求取前先灰度化然後Gamma校正,降低圖像局部的陰影和光照變化所造成的影響,同時可以抑制噪音的干擾。

HOG主要捕獲輪廓信息。統計每個cell的梯度直方圖,然後若干個cell直方圖組成一個block的descriptor。所有block組成整幅圖片的descriptor。

這裏注意,同一個block之間的cell之間像素不重疊,但是不同的block之間回有像素重疊。其實每個block更像是一個滑窗,滑窗的步長一般小於block邊長。 
滑窗和block關係參考下圖(圖中的cell是8X8,每4個cell組成一個block,水平和垂直上的滑窗步長都是8): 


那麼一個圖像的HOG特徵維數是多少呢?
這段計算來自參考資料中的《目標檢測的圖像特徵提取之(一)HOG特徵》

把樣本圖像分割爲若干個像素的單元(cell),把梯度方向平均劃分爲9個區間(bin),在每個單元裏面對所有像素的梯度方向在各個方向區間進行直方圖統計,得到一個9維的特徵向量,每相鄰的4個單元構成一個塊(block),把一個塊內的特徵向量聯起來得到36維的特徵向量,用塊對樣本圖像進行掃描,掃描步長爲一個單元。最後將所有塊的特徵串聯起來,就得到了人體的特徵。例如,對於64X128的圖像而言,每16X16的像素組成一個cell,每2X2個cell組成一個塊,因爲每個cell有9個特徵,所以每個塊內有4X9=36個特徵,以8個像素爲步長,那麼,水平方向將有7個掃描窗口,垂直方向將有15個掃描窗口。也就是說,64X128的圖片,總共有36X7X15=3780個特徵。

注意
上面舉例說的是64X128圖像對應的HOG特徵。但是64X128可能是一個更大圖片的滑動窗口,這個滑動窗口用於物體檢測,比如:

由於大滑動窗口之間是由很多重合的,所以opnecv裏實現HOG的時候使用了很高明的緩存技術加速計算過程。

特點
對圖像幾何的和光學的形變都能保持很好的不變性,適合檢測行人這種居於有一定剛性的物體,可以容許行人有一些細微的肢體動作。

缺點也有,計算量大,無法處理遮擋。

一個檢測行人的效果圖:

三. SIFT
SIFT特徵提取的實質
在不同的尺度空間上查找關鍵點(特徵點),並計算出關鍵點的方向。SIFT所查找到的關鍵點是一些十分突出、不會因光照、仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區的亮點及亮區的暗點等。

構造過程
通過構建高斯金字塔,保證圖像在任何尺度都能有對應的特徵點,即保證尺度不變性。爲了實現旋轉不變性,需要根據檢測到的關鍵點的局部圖像結構爲特徵點賦值。具體做法是用梯度方向直方圖。

關鍵點描述子不但包括關鍵點,還包括關鍵點周圍對其有貢獻的像素點。爲了保證旋轉不變性,要以特徵點爲中心,在附近領域內旋轉θ角(即旋轉爲特徵點的方向),然後計算採樣區域的梯度直方圖,形成n維SIFT特徵矢量(如128-SIFT)。特徵向量形成後,爲了去除光照變化的影響,需要對它們進行歸一化處理。

下圖演示的是旋轉到特徵點的主方向:

下圖演示的是求取128維梯度向量:

最終每個關鍵點的值分爲幾部分:位置(x\y座標)、尺度(高斯參數)、主方向、和方向梯度描述子(128維) 


SIFT特徵提取的優點
下面3段主要來自《圖像處理之特徵提取》

SIFT特徵是圖像的局部特徵,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性;
獨特性(Distinctiveness)好,信息量豐富,適用於在海量特徵數據庫中進行快速、準確的匹配;
多量性,即使少數的幾個物體也可以產生大量的SIFT特徵向量;
高速性,經優化的SIFT匹配算法甚至可以達到實時的要求;
可擴展性,可以很方便的與其他形式的特徵向量進行聯合;
需要較少的經驗主義知識,易於開發。
SIFT特徵提取的缺點
實時性不高,因爲要不斷地要進行下采樣和插值等操作;
有時特徵點較少(比如模糊圖像);
對邊緣光滑的目標無法準確提取特徵(比如邊緣平滑的圖像,檢測出的特徵點過少,對圓更是無能爲力)。
SIFT特徵提取可以解決的問題:
目標的自身狀態、場景所處的環境和成像器材的成像特性等因素影響圖像配準/目標識別跟蹤的性能。而SIFT算法在一定程度上可解決: 
- 目標的旋轉、縮放、平移(RST) 
- 圖像仿射/投影變換(視點viewpoint) 
- 光照影響(illumination) 
- 目標遮擋(occlusion) 
- 雜物場景(clutter) 
- 噪聲

改進
近來不斷有人改進,其中最著名的有 SURF(計算量小,運算速度快,提取的特徵點幾乎與SIFT相同)和 CSIFT(彩色尺度特徵不變變換,顧名思義,可以解決基於彩色圖像的SIFT問題)。

應用
SIFT可用於3維地圖重建、圖片矯正、全景拼接等

SIFT / HOG 比較
共同點
都是基於圖像中梯度方向直方圖的特徵提取方法

不同點
SIFT提取的關鍵點是角點(個人理解:應該是角點+梯度直方圖),HOG提取的是邊緣特徵。

SIFT 特徵通常與使用SIFT檢測器得到的興趣點一起使用。這些興趣點與一個特定的方向和尺度相關聯。通常是在對一個圖像中的方形區域通過相應的方向和尺度變換後,再計算該區域的SIFT特徵。

結合SIFT和HOG方法,可以發現SIFT對於複雜環境下物體的特徵提取具有良好的特性;而HOG對於剛性物體的特徵提取具有良好的特性。

四.其它傳統特徵提取的方法
4.1 SURF
前面提到SITF的缺點是如果不借助硬件加速或專門的圖像處理器很難達到實現,所以人們就要想辦法對SITF算子進行改進,SURF算子便是對SIFT的改進,不過改進之後在算法的運行時間上還是沒有質的飛躍。後面要介紹的ORB特徵描述算子在運行時間上纔是一種質的飛躍。

SURF最終生成的特徵點的特徵向量維度爲64維。

4.2 ORB
ORB特徵描述算法的運行時間遠優於SIFT與SURF,可用於實時性特徵檢測。ORB特徵基於FAST角點的特徵點檢測與描述技術,具有尺度與旋轉不變性,同時對噪聲及透視仿射也具有不變性 
ORB特徵檢測主要分爲以下兩個步驟:

方向FAST特徵點檢測: FAST角點檢測是一種基於機器學習的快速角點特徵檢測算法;
BRIEF特徵描述: BRIEF描述子主要是通過隨機選取興趣點周圍區域的若干點來組成小興趣區域,將這些小興趣區域的灰度二值化並解析成二進制碼串,將串特徵作爲該特徵點的描述子,BRIEF描述子選取關鍵點附近的區域並對每一位比較其強度大小,然後根據圖像塊中兩個二進制點來判斷當前關鍵點編碼是0還是1.因爲BRIEF描述子的所有編碼都是二進制數的,這樣就節省了計算機存儲空間。
4.3 LBP
LBP(Local Binary Pattern),局部二值模式是一種描述圖像局部紋理的特徵算子,該算子是由T.Ojala等人於1994年首次提出的,後經過發展改進可應用於圖像特徵分析,該算子具有旋轉不變性與灰度不變性(不怕光照變化)等顯著優點。

LBP特徵描述的是一種灰度範圍內的圖像處理操作技術。LBP特徵是高效的圖像特徵分析方法,經過改進與發展已經應用於多個領域之中,特別是人臉識別、表情識別、行人檢測領域已經取得了成功。

LBP牲徵將窗口中心點與鄰域點的關係進行比較,重新編碼形成新特徵以消除對外界場景對圖像的影響,因此一定程度上解決了複雜場景下(光照變換)特徵描述問題。

LBP算法根據窗口領域的不同分爲經曲LBP和圓形LBP兩種。下面分別介紹:

經典LBP
經典LBP的算子窗口爲3×3的正方形窗口,以窗口中心像素爲閾值,將其相鄰8領域像素灰度與中心像素值比較,若中心像素值小於周圍像素值,則該中心像素位置被標記爲1,否則爲0(顯然這種規則下,對於中心點大於或等於這兩種情況,算法無法區分,後續經過改進引入LBP+與LBP-因子用來區分這兩種情況)。圖像經過這種遍歷操作後,圖像就被二值化了,每一個窗口中心的8鄰域點都可以由8位二進制數來表示,即可產生256種LBP碼,這個LBP碼值可以用來反映窗口的區域紋理信息。LBP具體在生成的過程中,先將願意圖像劃分爲若干個子區域,子區域窗口可根據原圖像的尺寸進行調整,而不一定非得爲3×3的正方形窗口。一般對於512×640的圖像,子區域窗口區域選取大小爲16×16.

 


圓形LBP
經典LBP用正方形8-領域來描述圖像的紋理特徵,其缺點是難以滿足不同尺寸和頻率的需求。Ojala等人對經典LBP進行了改進,提出了將3×3的正方形窗口領域擴展到任意圓形領域。由於圓形LBP採樣點在圓形邊界上,那麼必然會導致部分計算出來的採樣點座標不是整數,因此這裏就需要對得到的座標像素點值進行處理,常用的處理方法是最近鄰插值或雙線性插值。

放一張SIFT/HOG/LBP優缺點、適用範圍對比圖:

4.4 HAAR
人臉檢測最爲經典的算法Haar-like特徵+Adaboost。這是最爲常用的物體檢測的方法(最初用於人臉檢測),也是用的最多的方法。

訓練過程: 輸入圖像->圖像預處理->提取特徵->訓練分類器(二分類)->得到訓練好的模型;

測試過程:輸入圖像->圖像預處理->提取特徵->導入模型->二分類(是不是所要檢測的物體)。

Haar-like特徵是很簡單的,無非就是那麼幾種,如兩矩形特徵、三矩形特徵、對角特徵。後來,還加入了邊緣特徵、線特徵、中心環繞特徵等。使用積分圖可以加速計算特徵。最後,使用集成的方法Adaboost進行訓練。

上圖中兩個矩形特徵,表示出人臉的某些特徵。比如中間一幅表示眼睛區域的顏色比臉頰區域的顏色深,右邊一幅表示鼻樑兩側比鼻樑的顏色要深。

特徵模板可以在子窗口內以“任意”尺寸“任意”放置,每一種形態稱爲一個特徵。

個人理解: 
- HAAR特徵只是使用特徵模板,計算圖像顏色的深淺模式,模板以不同的大小和位置在子圖像中滑動,計算出特徵值來,交給boost分類器。其實HAAR與LBP還是有點像的,都是灰度差。 
- HAAR計算的模式也決定它對旋轉沒有很好的適應性

總結
我覺得以上特徵中主要分爲兩類:點和麪


SIFT、SURF、ORB提取的是關鍵點的信息,可以用於表示某些圖像的細節(或者指紋)。這幾個特徵可用於圖像匹配和3維建模等算法。


HOG、LBP、HAAR提取的是面的信息,可以表示一塊區域是什麼樣的,所以這幾個特徵可以用於人臉、人體等物體識別。 
其中HAAR特徵不是很好可視化,另外兩種都可以比較容易的可視化出來。

參考資料
一個比較好的概述,本文的主要來源:圖像處理之特徵提取
HOG計算介紹:目標檢測的圖像特徵提取之(一)HOG特徵
HOG參數簡介及Hog特徵維數的計算
這裏基本把HOG的計算過程說明白了:opencv源碼解析之(6):hog源碼分析
SIFT主要圖片來源:sift特徵提取算法
圖像特徵檢測描述(一):SIFT、SURF、ORB、HOG、LBP特徵的原理概述及OpenCV代碼實現
淺析人臉檢測之Haar分類器方法
Haar特徵與積分圖
利用積分圖像法快速計算Haar特徵
https://blog.csdn.net/yuanlulu/article/details/82148429

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章