機(jī)器視覺特征提取:HOG、SIFT、SURF、ORB、LBP、HAAR
來源:機(jī)器學(xué)習(xí)AI算法工程
目錄
一、SIFT(尺度不變特征變換)
二、HOG(方向梯度直方圖)
三、SIFT和HOG的比較
四、SIFT/HOG與神經(jīng)網(wǎng)絡(luò)特征提取的比較
五、其他傳統(tǒng)特征提取的方法(SURF、ORB、LBP、HAAR)
先對幾個概念和問題做一個解釋:
圖像為什么要灰度化?
1. 識別物體,最關(guān)鍵的因素是梯度(SIFT/HOG),梯度意味著邊緣,這是最本質(zhì)的部分,而計算梯度,自然就用到灰度圖像了,可以把灰度理解為圖像的強(qiáng)度。
2. 顏色,易受光照影響,難以提供關(guān)鍵信息,故將圖像進(jìn)行灰度化,同時也可以加快特征提取的速度。
仿射不變性
平面上任意兩條線,經(jīng)過仿射變換后,仍保持原來的狀態(tài)(比如平行的線還是平行,相交的線夾角不變等)。
什么是局部特征?局部特征應(yīng)該具有的特點?
局部特征從總體上說是圖像或在視覺領(lǐng)域中一些有別于其周圍的地方;局部特征通常是描述一塊區(qū)域,使其能具有高可區(qū)分度;局部特征的好壞直接會決定著后面分類、識別是否會得到一個好的結(jié)果。
局部特征應(yīng)該具有的特點: 可重復(fù)性、可區(qū)分性、準(zhǔn)確性、有效性(特征的數(shù)量、特征提取的效率)、魯棒性(穩(wěn)定性、不變性)。
一、SIFT(尺度不變特征變換)
1.1 SIFT特征提取的實質(zhì)
在不同的尺度空間上查找關(guān)鍵點(特征點),并計算出關(guān)鍵點的方向。SIFT所查找到的關(guān)鍵點是一些十分突出、不會因光照、仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區(qū)的亮點及亮區(qū)的暗點等。
1.2 SIFT特征提取的方法
a. 構(gòu)建DOG尺度空間:
模擬圖像數(shù)據(jù)的多尺度特征,大尺度抓住概貌特征,小尺度注重細(xì)節(jié)特征。通過構(gòu)建高斯金字塔(每一層用不同的參數(shù)σ做高斯模糊(加權(quán))),保證圖像在任何尺度都能有對應(yīng)的特征點,即保證尺度不變性。
b. 關(guān)鍵點搜索和定位:
確定是否為關(guān)鍵點,需要將該點與同尺度空間不同σ值的圖像中的相鄰點比較,如果該點為max或min,則為一個特征點。找到所有特征點后,要去除低對比度和不穩(wěn)定的邊緣效應(yīng)的點,留下具有代表性的關(guān)鍵點(比如,正方形旋轉(zhuǎn)后變?yōu)榱庑?,如果用邊緣做識別,4條邊就完全不一樣,就會錯誤;如果用角點識別,則穩(wěn)定一些)。去除這些點的好處是增強(qiáng)匹配的抗噪能力和穩(wěn)定性。最后,對離散的點做曲線擬合,得到精確的關(guān)鍵點的位置和尺度信息。
c. 方向賦值:
為了實現(xiàn)旋轉(zhuǎn)不變性,需要根據(jù)檢測到的關(guān)鍵點的局部圖像結(jié)構(gòu)為特征點賦值。具體做法是用梯度方向直方圖。在計算直方圖時,每個加入直方圖的采樣點都使用圓形高斯函數(shù)進(jìn)行加權(quán)處理,也就是進(jìn)行高斯平滑。這主要是因為SIFT算法只考慮了尺度和旋轉(zhuǎn)不變形,沒有考慮仿射不變性。通過高斯平滑,可以使關(guān)鍵點附近的梯度幅值有較大權(quán)重,從而部分彌補沒考慮仿射不變形產(chǎn)生的特征點不穩(wěn)定。注意,一個關(guān)鍵點可能具有多個關(guān)鍵方向,這有利于增強(qiáng)圖像匹配的魯棒性。
d. 關(guān)鍵點描述子的生成:
關(guān)鍵點描述子不但包括關(guān)鍵點,還包括關(guān)鍵點周圍對其有貢獻(xiàn)的像素點。這樣可使關(guān)鍵點有更多的不變特性,提高目標(biāo)匹配效率。在描述子采樣區(qū)域時,需要考慮旋轉(zhuǎn)后進(jìn)行雙線性插值,防止因旋轉(zhuǎn)圖像出現(xiàn)白點。同時,為了保證旋轉(zhuǎn)不變性,要以特征點為中心,在附近領(lǐng)域內(nèi)旋轉(zhuǎn)θ角,然后計算采樣區(qū)域的梯度直方圖,形成n維SIFT特征矢量(如128-SIFT)。最后,為了去除光照變化的影響,需要對特征矢量進(jìn)行歸一化處理。
1.3 SIFT特征提取的優(yōu)點
a. SIFT特征是圖像的局部特征,其對旋轉(zhuǎn)、尺度縮放、亮度變化保持不變性,對b. 視角變化、仿射變換、噪聲也保持一定程度的穩(wěn)定性;
c. 獨特性(Distinctiveness)好,信息量豐富,適用于在海量特征數(shù)據(jù)庫中進(jìn)行快速、準(zhǔn)確的匹配;
d. 多量性,即使少數(shù)的幾個物體也可以產(chǎn)生大量的SIFT特征向量;
e. 高速性,經(jīng)優(yōu)化的SIFT匹配算法甚至可以達(dá)到實時的要求;
f. 可擴(kuò)展性,可以很方便的與其他形式的特征向量進(jìn)行聯(lián)合;
g. 需要較少的經(jīng)驗主義知識,易于開發(fā)。
1.4 SIFT特征提取的缺點
a. 實時性不高,因為要不斷地要進(jìn)行下采樣和插值等操作;
b. 有時特征點較少(比如模糊圖像);
c. 對邊緣光滑的目標(biāo)無法準(zhǔn)確提取特征(比如邊緣平滑的圖像,檢測出的特征點過少,對圓更是無能為力)。
1.5 SIFT特征提取可以解決的問題
目標(biāo)的自身狀態(tài)、場景所處的環(huán)境和成像器材的成像特性等因素影響圖像配準(zhǔn)/目標(biāo)識別跟蹤的性能。而SIFT算法在一定程度上可解決:
a. 目標(biāo)的旋轉(zhuǎn)、縮放、平移(RST)
b. 圖像仿射/投影變換(視點viewpoint)
c. 光照影響(illumination)
d. 目標(biāo)遮擋(occlusion)
e. 雜物場景(clutter)
f. 噪聲
近來不斷有人改進(jìn),其中最著名的有 SURF(計算量小,運算速度快,提取的特征點幾乎與SIFT相同)和 CSIFT(彩色尺度特征不變變換,顧名思義,可以解決基于彩色圖像的SIFT問題)。
二、HOG(方向梯度直方圖)
2.1 HOG特征提取的實質(zhì)
通過計算和統(tǒng)計圖像局部區(qū)域的梯度方向直方圖來構(gòu)成特征。Hog特征結(jié)合SVM分類器已經(jīng)被廣泛應(yīng)用于圖像識別中,尤其在行人檢測中獲得了極大的成功。
2.2 HOG特征提取的方法
a. 灰度化;
b. 采用Gamma校正法對輸入圖像進(jìn)行顏色空間的標(biāo)準(zhǔn)化(歸一化),目的是調(diào)節(jié)圖像的對比度,降低圖像局部的陰影和光照變化所造成的影響,同時可以抑制噪音的干擾;
c. 計算圖像每個像素的梯度(包括大小和方向),主要是為了捕獲輪廓信息,同時進(jìn)一步弱化光照的干擾;
d. 將圖像劃分成小cells(例如6*6像素/cell);
e. 統(tǒng)計每個cell的梯度直方圖(不同梯度的個數(shù)),即可形成每個cell的descriptor;
f. 將每幾個cell組成一個block(例如3*3個cell/block),一個block內(nèi)所有cell的特征descriptor串聯(lián)起來便得到該block的HOG特征descriptor。
g. 將圖像image內(nèi)的所有block的HOG特征descriptor串聯(lián)起來就可以得到該image(你要檢測的目標(biāo))的HOG特征descriptor了。這個就是最終的可供分類使用的特征向量了。
如果對上述純文字理解困難,可以參考文章:
《目標(biāo)檢測的圖像特征提取之(一)HOG特征》
2.3 HOG特征提取特點
a. 由于HOG是在圖像的局部方格單元上操作,所以它對圖像幾何的和光學(xué)的形變都能保持很好的不變性,這兩種形變只會出現(xiàn)在更大的空間領(lǐng)域上。
b. 在粗的空域抽樣、精細(xì)的方向抽樣以及較強(qiáng)的局部光學(xué)歸一化等條件下,只要行人大體上能夠保持直立的姿勢,可以容許行人有一些細(xì)微的肢體動作,這些細(xì)微的動作可以被忽略而不影響檢測效果。因此HOG特征是特別適合于做圖像中的人體檢測的。
三、SIFT和HOG的比較
共同點:都是基于圖像中梯度方向直方圖的特征提取方法
不同點:SIFT 特征通常與使用SIFT檢測器得到的興趣點一起使用。這些興趣點與一個特定的方向和尺度相關(guān)聯(lián)。通常是在對一個圖像中的方形區(qū)域通過相應(yīng)的方向和尺度變換后,再計算該區(qū)域的SIFT特征。
HOG特征的單元大小較小,故可以保留一定的空間分辨率,同時歸一化操作使該特征對局部對比度變化不敏感。
結(jié)合SIFT和HOG方法,可以發(fā)現(xiàn)SIFT對于復(fù)雜環(huán)境下物體的特征提取具有良好的特性;而HOG對于剛性物體的特征提取具有良好的特性。
筆者曾做過一個自然場景分類的實驗,發(fā)現(xiàn)SIFT的準(zhǔn)確率比HOG高,而如果檢測像人這種剛性的object,HOG的表現(xiàn)要比SIFT好。
四、SIFT/HOG與神經(jīng)網(wǎng)絡(luò)特征提取的比較
眾所周知,隨著深度學(xué)習(xí)的發(fā)展,通過神經(jīng)網(wǎng)絡(luò)提取特征得到了廣泛的應(yīng)用,那么,神經(jīng)網(wǎng)絡(luò)提取的特征與傳統(tǒng)的SIFT/HOG等特征提取方法有什么不同呢?
4.1 神經(jīng)網(wǎng)絡(luò)提取到的特征
我們知道,對于一副圖像,像素級的特征沒有任何價值,而如果特征是一個具有結(jié)構(gòu)性(或者說有含義)的時候,比如摩托車是否具有車把手,是否具有車輪,就很容易把摩托車和非摩托車區(qū)分,學(xué)習(xí)算法才能發(fā)揮作用。
早期,兩個科學(xué)家Bruno Olshausen和 David Field通過實驗研究了這個問題,發(fā)現(xiàn)一個復(fù)雜圖像往往由一些基本結(jié)構(gòu)組成。比如下圖:一個圖可通過用64種正交的edges(可以理解成正交的基本結(jié)構(gòu))來線性表示。比如樣例的x可以用1-64個edges中的三個按照0.8,0.3,0.5的權(quán)重調(diào)和而成。而其他基本edges沒有貢獻(xiàn),均為0 。
這就是神經(jīng)網(wǎng)絡(luò)每層提取到的特征。由于是通過神經(jīng)網(wǎng)絡(luò)自動學(xué)習(xí)到了,因此也是無監(jiān)督的特征學(xué)習(xí)過程(Unsupervised Feature Learning) 。直觀上說,就是找到make sense的小patch再將其進(jìn)行combine,就得到了上一層的feature,遞歸地向上learning feature。在不同object上做training是,所得的edge basis 是非常相似的,但object parts和models 就會completely different了。
4.2 傳統(tǒng)特征提取方法與神經(jīng)網(wǎng)絡(luò)特征提取的比較
觀點1:傳統(tǒng)特征提取方法的研究過程和思路是非常有用的,因為這些方法具有較強(qiáng)的可解釋性,它們對設(shè)計機(jī)器學(xué)習(xí)方法解決此類問題提供啟發(fā)和類比。有部分人認(rèn)為(也有部分人反對)現(xiàn)有的卷積神經(jīng)網(wǎng)絡(luò)與這些特征提取方法有一定類似性,因為每個濾波權(quán)重實際上是一個線性的識別模式,與這些特征提取過程的邊界與梯度檢測類似。同時,池化(Pooling)的作用是統(tǒng)籌一個區(qū)域的信息,這與這些特征提取后進(jìn)行的特征整合(如直方圖等)類似。通過實驗發(fā)現(xiàn)卷積網(wǎng)絡(luò)開始幾層實際上確實是在做邊緣和梯度檢測。不過事實上卷積網(wǎng)絡(luò)發(fā)明的時候,還沒有這些特征提取方法。
觀點2: 深度學(xué)習(xí)的數(shù)據(jù)需求量大對于視覺來說是個偽命題。許多研究成果已經(jīng)表明深度學(xué)習(xí)訓(xùn)練得到的模型具有很強(qiáng)的遷移能力,因此在大數(shù)據(jù)集上訓(xùn)練完成的模型只要拿過來在小數(shù)據(jù)集上用就可以,不需要完全重新訓(xùn)練。這種方式在小數(shù)據(jù)集上的結(jié)果往往也比傳統(tǒng)方法好。
觀點3:還是需要重新訓(xùn)練的,只能說大數(shù)據(jù)集訓(xùn)練好的模型提供了一個比較好的參數(shù)初始化。而且卷積前幾層提取特征僅僅是對分類問題是對的,但是對于一些dense prediction還是不一樣,畢竟提取特征不一定有用,還是task dependent。
觀點4:深度學(xué)習(xí)是一種自學(xué)習(xí)的特征表達(dá)方法,比SIFT/HOG這些依靠先驗知識設(shè)計的feature的表達(dá)效果高。早在13年大家都發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)的最后一層的local特征和SIFT性質(zhì)差不多,但是表達(dá)能力強(qiáng)太多。SIFT能做的事情CNN都能做,表達(dá)效果也強(qiáng),那深度學(xué)習(xí)取代SIFT是遲早的事情(或者說已經(jīng)發(fā)生的事情)。深度神經(jīng)網(wǎng)絡(luò)識別率的提高不需要建立在需求大量訓(xùn)練樣本的基礎(chǔ)上,拿pre-train好的模型直接用就可以了。在一些沒有訓(xùn)練樣本的應(yīng)用(圖像分割(image stithing)/ 立體匹配(stereo mathing)) ,可以把卷積層的activation提取出來做stitching的local feature(感覺是一個可以探索的方向)。未來還有SIFT/SURF這種固定特征提取算法的生存空間嗎?除非是嵌入式這種計算資源極端受限的情況,但是現(xiàn)在大家都在試著implement CNN FPGA甚至ASIC了。
觀點5:2016年ECCV上舉辦的一個local feature的工作會,發(fā)現(xiàn)在核心匹配問題上,CNN并沒有什么突破性的進(jìn)展。在Oxford大學(xué)的VGG組提供的Hpatch數(shù)據(jù)集上,發(fā)現(xiàn)rootsiftpca效果最好,如圖:
那么提出兩個問題:(1)現(xiàn)在流行的特征學(xué)習(xí)方法siamese或triplet等結(jié)構(gòu)是否缺失了什么?(2)雖然CNN可以挖掘patch里面包含的信息并建立對于復(fù)雜幾何和光照變化的不變性,但是這種學(xué)習(xí)到的不變性是否過度依賴于數(shù)據(jù)而無法有效泛化到真實匹配場景中所遇到的影像之間的復(fù)雜變化呢?
可以參考以下知乎話題,查看更多觀點:
https://www.zhihu.com/question/48315686
五、其他傳統(tǒng)特征提取的方法(SURF、ORB、LBP、HAAR)
SURF、ORB、LBP可以參考文章:
《圖像特征檢測描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代碼實現(xiàn)》
https://link.jianshu.com/?t=http://lib.csdn.net/article/opencv/41913
5.1 SURF
前面提到SITF的缺點是如果不借助硬件加速或?qū)iT的圖像處理器很難達(dá)到實現(xiàn),所以人們就要想辦法對SITF算子進(jìn)行改進(jìn),SURF算子便是對SIFT的改進(jìn),不過改進(jìn)之后在算法的運行時間上還是沒有質(zhì)的飛躍。后面要介紹的ORB特征描述算子在運行時間上才是一種質(zhì)的飛躍。
SURF主要是把SIFT中的某些運算作了簡化。SURF把SIFT中的高斯二階微分的模板進(jìn)行了簡化,使得卷積平滑操作僅需要轉(zhuǎn)換成加減運算,這樣使得SURF算法的魯棒性好且時間復(fù)雜度低。SURF最終生成的特征點的特征向量維度為64維。
5.2 ORB
ORB特征描述算法的運行時間遠(yuǎn)優(yōu)于SIFT與SURF,可用于實時性特征檢測。ORB特征基于FAST角點的特征點檢測與描述技術(shù),具有尺度與旋轉(zhuǎn)不變性,同時對噪聲及****仿射也具有不變性,良好的性能使得用ORB在進(jìn)行特征描述時的應(yīng)用場景十分廣泛。
ORB特征檢測主要分為以下兩個步驟:
①方向FAST特征點檢測:FAST角點檢測是一種基于機(jī)器學(xué)習(xí)的快速角點特征檢測算法,具有方向的FAST特征點檢測是對興趣點所在圓周上的16個像素點進(jìn)行判斷,若判斷后的當(dāng)前中心像素點為暗或亮,將候定其是否為角點。FAST角點檢測計算的時間復(fù)雜度小,檢測效果突出。FAST角點檢測為加速算法實現(xiàn),通常先對回周上的點集進(jìn)行排序,排序使得其計算過程大大得到了優(yōu)化。FAST對多尺度特性的描述是還是通過建立圖像金字塔實現(xiàn)的,而對于旋轉(zhuǎn)不變性即方向的特征則引入灰度質(zhì)心法用于描述特征點的方向。
②BRIEF特征描述:BRIEF描述子主要是通過隨機(jī)選取興趣點周圍區(qū)域的若干點來組成小興趣區(qū)域,將這些小興趣區(qū)域的灰度二值化并解析成二進(jìn)制碼串,將串特征作為該特征點的描述子,BRIEF描述子選取關(guān)鍵點附近的區(qū)域并對每一位比較其強(qiáng)度大小,然后根據(jù)圖像塊中兩個二進(jìn)制點來判斷當(dāng)前關(guān)鍵點編碼是0還是1.因為BRIEF描述子的所有編碼都是二進(jìn)制數(shù)的,這樣就節(jié)省了計算機(jī)存儲空間。
5.3 LBP
LBP(Local Binary Pattern),局部二值模式是一種描述圖像局部紋理的特征算子,具有旋轉(zhuǎn)不變性與灰度不變性等顯著優(yōu)點。LBP特征描述的是一種灰度范圍內(nèi)的圖像處理操作技術(shù),針對的是輸入源為8位或16位的灰度圖像。LBP特征是高效的圖像特征分析方法,經(jīng)過改進(jìn)與發(fā)展已經(jīng)應(yīng)用于多個領(lǐng)域之中,特別是人臉識別、表情識別、行人檢測領(lǐng)域已經(jīng)取得了成功。LBP特征將窗口中心點與鄰域點的關(guān)系進(jìn)行比較,重新編碼形成新特征以消除對外界場景對圖像的影響,因此一定程度上解決了復(fù)雜場景下(光照變換)特征描述問題。
LBP算法根據(jù)窗口領(lǐng)域的不同分為經(jīng)曲LBP和圓形LBP兩種。下面分別介紹:
①經(jīng)典LBP: 經(jīng)典LBP算子窗口為3×3的正方形窗口,以窗口中心像素為閾值,將其相鄰8領(lǐng)域像素灰度與中心像素值比較,若中心像素值小于周圍像素值,則該中心像素位置被標(biāo)記為1,否則為0(顯然這種規(guī)則下,對于中心點大于或等于這兩種情況,算法無法區(qū)分,后續(xù)經(jīng)過改進(jìn)引入LBP+與LBP-因子用來區(qū)分這兩種情況)。圖像經(jīng)過這種遍歷操作后,圖像就被二值化了,每一個窗口中心的8鄰域點都可以由8位二進(jìn)制數(shù)來表示,即可產(chǎn)生256種LBP碼,這個LBP碼值可以用來反映窗口的區(qū)域紋理信息。LBP具體在生成的過程中,先將圖像劃分為若干個子區(qū)域,子區(qū)域窗口可根據(jù)原圖像的尺寸進(jìn)行調(diào)整,而不一定非得為3×3的正方形窗口。一般對于512×640的圖像,子區(qū)域窗口區(qū)域選取大小為16×16。
②圓形LBP: 經(jīng)典LBP用正方形來描述圖像的紋理特征,其缺點是難以滿足不同尺寸和頻率的需求。Ojala等人對經(jīng)典LBP進(jìn)行了改進(jìn),提出了將3×3的正方形窗口領(lǐng)域擴(kuò)展到任意圓形領(lǐng)域。由于圓形LBP采樣點在圓形邊界上,那么必然會導(dǎo)致部分計算出來的采樣點坐標(biāo)不是整數(shù),因此這里就需要對得到的坐標(biāo)像素點值進(jìn)行處理,常用的處理方法是最近鄰插值或雙線性插值。
放一張SIFT/HOG/LBP優(yōu)缺點、適用范圍對比圖:
5.4 HAAR
人臉檢測最為經(jīng)典的算法Haar-like特征+Adaboost。這是最為常用的物體檢測的方法(最初用于人臉檢測),也是用的最多的方法。
訓(xùn)練過程: 輸入圖像->圖像預(yù)處理->提取特征->訓(xùn)練分類器(二分類)->得到訓(xùn)練好的模型;
測試過程:輸入圖像->圖像預(yù)處理->提取特征->導(dǎo)入模型->二分類(是不是所要檢測的物體)。
Haar-like特征是很簡單的,無非就是那么幾種,如兩矩形特征、三矩形特征、對角特征。后來,還加入了邊緣特征、線特征、中心環(huán)繞特征等。使用積分圖可以加速計算特征。最后,使用集成的方法Adaboost進(jìn)行訓(xùn)練。
具體細(xì)節(jié)可以參考文章:
特征提取之Haar特征
https://link.jianshu.com/?t=http://blog.csdn.net/xizero00/article/details/46929261
再附一個Haar和HOG比較的問題:
為什么在行人檢測中,HOG特征比Haar特征更精確?
https://link.jianshu.com/?t=http://blog.csdn.net/DuinoDu/article/details/51981327
1. SIFT / HOG 不同點:SIFT提取的關(guān)鍵點是角點,HOG提取的是邊緣特征。
2. 傳統(tǒng)特征提取 / CNN特征提取不同點:傳統(tǒng)特征提取方法的檢測算子一般是人為設(shè)計好的,是經(jīng)過大量的先驗知識總結(jié)得到的;CNN特征提取相當(dāng)于在訓(xùn)練一個個filter(過濾器、卷積核),這些filter相當(dāng)于傳統(tǒng)特征提取方法中的檢測算子。因此,CNN特征提取是利用神經(jīng)網(wǎng)絡(luò)的自主學(xué)習(xí)得到的。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。