SIFT特徵演算法是如何保證平移、旋轉不變的?

學習數字圖像處理,目前了解到圖像特徵提取這一塊,看了比較複雜的SIFT特徵,沒有看原論文(基礎不夠,沒不大明白),所有大多參考CSDN上的博客,但博客裡面沒看到講SIFT特徵是如何保證不變的,比如平移、旋轉。希望對這方面比較熟悉的能講解一下,謝謝。


1. 平移不變:SIFT是局部特徵,只提取關鍵點點附近矩形區域的sample,所以該物體移動到任何地方提取的feature都是類似的。同時因為是劃grid去提取,即便關鍵點稍微偏移一下feature也基本沒有變化,有點類似於HOG或者CNN的pooling。

2. 旋轉不變:在計算grid裡面的梯度bin前需要旋轉到主方向,因此有了一定的旋轉不變性。

3. 光照不變:計算feature vector的時候進行了歸一化、卡閾值之後又一次歸一化,抵消了部分光照的影響。

4. 尺度不變:通過前一步算LoG得到的尺度來確定計算feature的範圍,所以不同尺度能得到類似的feature。

建議還是看原論文來理解,可以看一些開源的實現來幫助理解。


SIFT全稱是 尺度不變特徵變換,也就是說他的精髓應該是尺度不變性才對(題主應該問尺度呀)。

我們按照演算法順序來一步步看SIFT是怎麼實現這些特性的:

SIFT第一步是構建高斯尺度金字塔。在同一組中所應用的高斯濾波尺度(也就是sigma)越來越大,相應的濾波模板也應該越來越大哦(否則體現不了尺度不變性)!之後再計算差分高斯(DoG)金字塔用於近似拉普拉斯高斯(LoG)金字塔,並在其中尋找極值點作為關鍵點。這一步中所得到的關鍵點是自帶尺度屬性的,這話有點繞,按我的理解來說就是檢測到的每一個關鍵點都只能在這個尺度中被檢測出來(理解起來就是在該點,隨著尺度越大圖像就越模糊越平滑,那麼其拉普拉斯響應值傾向于越來越小,但並不是單調遞減,而是帶有一定波動性的,偶爾會出現波峰波谷,波峰波谷所對應的尺度也就是關鍵點被檢測出的尺度),因此這個關鍵點是自帶尺度參數的。

第二步是生成描述子。在這一步中實現了尺度,旋轉,光照不變性。根據所檢測到的關鍵點,利用其鄰域(鄰域半徑與該關鍵點的尺度成正比,這樣才能實現尺度不變性)各個像素的梯度信息(包括梯度方向和強度),統計出梯度直方圖,即可找到主方向(也就是梯度直方圖中最大值所對應的方向)。將方形鄰域框旋轉主方向的角度(我的理解是這一步將主方向「清零」,是實現旋轉不變形的關鍵。注意鄰域半徑與該關鍵點的尺度成正比),在該鄰域內利用梯度信息生成其中各個小塊的梯度直方圖,連接起來即為描述子(即實現了旋轉不變性)。最後將描述子做歸一化實現光照不變性。

另外SIFT還有一定的仿射不變性哦,真是有夠強大有夠魯棒哈哈哈~

其實最難理解最難實現的是SIFT的尺度不變性,希望能幫助你理解~


平移不變很容易理解,因為在匹配角點的時候是窮舉匹配,也就是說,只要是匹配的點,不管在各自圖的什麼位置,都會匹配到,這也是為什麼回有一對多,或者多對一的匹配情況。旋轉不變性是依靠在建立描述子的時候先求局部的主方向,然後按照主方向來建立描述子,也就是說,dx dy並不是表示的絕對X軸或者Y軸所求得的數據,而是隨局部主方向旋轉的。比較粗略的解釋,希望不會誤導你。


推薦閱讀:

如何看清監控錄像中的車牌?
美圖公司的實驗室 MeituLabs 如何,有哪些大牛?
搞機器視覺,演算法不是非常精通,但是熟悉嵌入式平台的代碼優化與演算法移植,找工作應如何定位自己的目標方向?
本質矩陣和基礎矩陣的區別是什麼?
為什麼高斯函數的適用性這麼強?

TAG:演算法 | 圖像處理 | 計算機視覺 | 特徵提取 | 圖像信號處理器ISPImageSignalProcessor |