CS131-专题7:图像特征(SIFT算法)
速記要點:
- SIFT是什么:全稱Scale Invariant Feature Transform尺度不變特征轉換,2004年的論文??梢詸z測出圖像中的局部特征點。
- SIFT算法特點:
- 穩定性:SIFT是圖像局部特征,對旋轉、尺度、亮度、仿射、噪音都保持一定程度的穩定性。
- 區分性:圖像中檢測到的這些局部特征各自區分性好,信息量豐富,適用于在海量特征數據庫中進行快速、準確的匹配。
- 多量性:即使少數的幾個物體也可以產生大量的SIFT特征向量。
- 高速性:經優化的SIFT匹配算法甚至可以達到實時的要求。
- 可擴展性:里面很多技術方法可以很方便的在其他特征中進行應用。
- SIFT特征檢測4個基本步驟:
- (1)尺度空間極值檢測:通過高斯差分金字塔來探測圖像中對尺度和旋轉不變的特征點。
- 直接在DoG空間找局部極值點可以檢測‘圓形’特征,而如果在DoG空間像找Harris角點一樣,計算Hessian矩陣,就能找到兼容仿射變換的橢圓特征。流程如下:
- 先確定一個圓
- 將圓內的所有像素拿出來計算H矩陣
- 比較計算出來的λ1,λ2
- 將較小的λ的方向進行縮小
- 再將上一步縮小后的區域(橢圓)內的像素拿出來計算H矩陣
- 重復上述步驟,逐步迭代。直至λ1,λ2近似相等,說明區域邊緣的梯度變化近似一致
- 當然最后需要刪除兩類極值點,一類是低對比極值點,另一類是不穩定的邊緣響應點。
- 直接在DoG空間找局部極值點可以檢測‘圓形’特征,而如果在DoG空間像找Harris角點一樣,計算Hessian矩陣,就能找到兼容仿射變換的橢圓特征。流程如下:
- (2)特征點主方向確定:
- ?經過上面的步驟已經找到了在不同尺度下都存在的特征點,為了實現圖像旋轉不變性,需要給特征點的方向進行賦值。
- 方法:找到特征圓后,求圓內覆蓋的每個像素點的圖像梯度幅值和方向,劃歸到0~2π八等份直方圖中,投票最多的方向就是這個特征點的主方向。
- (3)特征點描述:
- 經過以上兩步后,已經得到SIFT特征點位置(包括尺度)和方向信息。下面我們可以繼續用一個128維度向量來作為SIFT特征的特征描述符,相當于這個特征的身份證,擁有絕對標識,幾乎不可能重復,能夠和其他特征區分開來,或者用于圖像匹配。
- 方法:首先將坐標軸旋轉為特征點的方向,將這個特征尺度所覆蓋的圖劃分成16格,每個格單獨統計格內每個像素點梯度方向和大小,形成一個128維度向量。
目錄
速記要點:
1 尺度空間極值檢測
1.1 DoG算子
1.2 高斯差分金字塔
1.3 實現兼容仿射變換(視角)的方法
2 特征點主方向確定
3 SIFT描述符
4 SIFT進行圖像匹配的一個例子
5 好的參考資料
原理和過程詳情版:(語言和章節沒有過多整理)
SIFT(Scale Invariant Feature Transform尺度不變特征轉換,2004年論文)是2012深度學習火爆前,最重要的一個視覺算法,應用很廣,引用量達6萬次。
上一專題介紹了Blob檢測,其中Harris角點+Laplacian卷積能夠應對圖像光強、旋轉、尺度變化,但還無法應當放射變化,而且速度還是慢。
本專題我們研究SIFT尺度不變特征轉換算法。SIFT算法可以解決方向,視角,明暗,位置等常見圖像變化的問題。
SIFT特征檢測的4個步驟:
- 尺度空間的極值檢測
- 特征點主方向確定
- 特征點描述
1 尺度空間極值檢測
1.1 DoG算子
如上,拉普拉斯函數(LoG)和兩個不同尺度的高斯函數的差分(DoG)形近,所以它們的功能效果也會類似。
但是,根據高斯核計算性質,一個大高斯核作用于圖像,等價于用兩個小高斯核依次作用于圖像。舉個例子:一個σ=5的高斯核和圖像卷積,等價于一個σ=3的高斯核先和圖像卷積,然后結果再和σ=4的卷積核做卷積,而根據卷積計算的結合律,可以先用一個高斯核與另一個高斯核進行卷積,然后結果再和圖像做卷積。因為作用于圖像的卷積核寬度變小了(σ決定高斯核寬度),所以跟圖像做卷積計算時計算量會少很多。
1.2 高斯差分金字塔
在介紹Blob檢測中我們知道,LoG可以在不同的尺度下檢測圖像的關鍵點信息,從而確定圖像的特征點。但LoG的計算量大,效率低。所以我們通過兩個相鄰高斯尺度空間的圖像的相減,得到DoG(高斯差分)來近似LoG。如下圖所示:
上圖左邊是不同尺度的高斯核作用于圖像的結果,右邊是DoG結果,其中σ值相當于是對應LoG多大的σ。
高斯差分金字塔的第1組第1層是由高斯金字塔的第1組第2層減第1組第1層得到的。以此類推,逐組逐層生成每一個差分圖像,所有差分圖像構成差分金字塔。
關鍵點1:DoG為什么能減少計算量?
簡述:當計算完σ尺度的高斯核對圖像的卷積后,要計算kσ尺度(其中k>1)的高斯核對圖像的卷積時,根據高斯卷積核性質,我們只要用如下尺度的高斯核對σ尺度的結果做進一步卷積即可得到:
原因如下:
所以,上層的計算可以基于下層結果用一個相對小的核進一步計算得到,計算效率大大提升。
關鍵點2:octave概念(用一套σ,通過圖像放縮而非σ增倍)
簡述:為了得到每個像素點位置盡量多尺度的輸出,一般需要非常多、不同尺度σ的歸一化高斯核去和圖像進行卷積。在SIFT中對此做了改進,提出高斯金字塔概念,每個octave(組)用一套σ。當我們要計算更大尺度的σ卷積結果時,不去用越來越大的σ高斯核與圖像卷積,而是把圖像縮小一倍,如此用同樣一個σ和縮小一倍的圖像進行卷積,檢測到的特征(blob)其r半徑翻倍就行,這里每次圖像尺度縮小一倍進行的高斯卷積結果就是一個octave(組)。此方法優勢之一:在小圖上做,速度會快很多!
關鍵點3:k如何取值能夠讓每個octave組的不同尺度下的極值點檢測尺度結果能夠連續?
簡述:假設S變量是你想要在1σ~2σ之間有多少個輸出尺度輸出(每個octave組是同樣一套σ,只是作用的圖像其尺度不斷縮小一倍)。S定義了那么上圖每組的DoG輸出個數也就會確定,S=2那DoG就需要有S+2=4個輸出(因為要做上下層的極大值判定)。DoG輸出確定了,那么每個octave組需要的層也就確定了(4+1=5)。
只要另k=2^1/s,那么你會發現,每個octave組,其DoG輸出尺度,剛好能等比例的銜接起來。
注意:第二個octave組第第一層可以由第一個octave組的倒數第3層直接下采樣一倍得到。(例如,當2σ作用于原圖像的結果,對結果下采樣1倍得到的新結果,等價于原圖先下采樣一倍,然后在和σ尺度的高斯核卷積)(第二個octave組的其他層則基于第一層繼續做高斯核卷積)
上面看懂了,下面這張圖可以加深理解:
1.3 實現兼容仿射變換(視角)的方法
在介紹harris角點中,我們介紹了M矩陣,如下:
我們可以計算每個像素點所形成的圓,看兩個特征值,如果兩個特征值不一致,我們可以壓扁小特征值的那個方向,壓扁后的橢圓再去算M矩陣,繼續看兩個特征值是否一致,如果不一致,繼續壓扁圓,一致這樣操作直到兩個特征值結果一致。
帶仿射變換的Blob檢測和不帶的Blob檢測效果對比:
解決仿射變換問題后,我們能確保橢圓內內容是一致的,但角度可能不一致,如下:
2 特征點主方向確定
檢測到特征后,里面的內容要和其他圖進行匹配,還需要把它們統一方向然后才能對比。如何去判定一個特征要不要去旋轉呢?用梯度方向直方圖,方法如下:
計算該特征圓所覆蓋的每個像素點位置的梯度大小和方向,然后把這些結果根據方向放到8個方向區間內做統計(0~2π),數量最多的那個區間作為此特征的方向,然后把這個特征選擇到水平方向,這樣就可以和其它特征做匹配了。
3 SIFT描述符
在SIFT算法中,某個SIFT特征,用128維度向量表示,如下圖所示:
一個局部特征,用4x4的網格劃分,每個小網格內像素點單獨統計梯度直方圖,16個網格,每個網格8個值,所以就有128維度。
如上圖所示,最左邊的兩張圖像雖然拍攝視角、拍攝位置、拍攝光照不一樣,但是SIFT都能探測到如圖白色圈所示的符合SIFT特征定義的特征,當它們方向統一后,各自得到的128維度特征向量,兩種非常相似。這就能很好的讓程序把它們匹配上,并區分其他特征。
雖然SIFT描述符是SIFT論文中提出的,但其可以直接應用在其他特征檢測算法中,如:Harris+拉普拉斯+SIFT描述符。
為什么不直接統計SIFT特征的全局描述符而拆分成16個網格單獨統計?
答:這樣細分能提高匹配的準確度,當然為什么是16個網格只是個經驗值。
SIFT真實應用的改進:通過比對第一高閾值和第2高閾值,來提升精度。
4 SIFT進行圖像匹配的一個例子
5 好的參考資料
- 區域檢測——Blob檢測 - Moonx5 - 博客園
- SIFT特征匹配詳細原理_南洲.的博客-CSDN博客_sift特征
- SIFT特征詳解 - Brook_icv - 博客園
- 區域檢測——Blob檢測 - Moonx5 - 博客園(某人的CS131筆記,有SIFT)
- Sift中尺度空間、高斯金字塔、差分金字塔(DOG金字塔)、圖像金字塔_牧野的博客-CSDN博客_高斯差分金字塔
- SIFT論文翻譯_叫什么就是什么的博客-CSDN博客
總結
以上是生活随笔為你收集整理的CS131-专题7:图像特征(SIFT算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原创:古人为何规定16两为1斤,筷子长度
- 下一篇: CS131专题-8:图像纹理