在SIFT解析(一)建立高斯金字塔中,我們得到了高斯差分金字塔;
檢測DOG尺度空間極值點
SIFT關鍵點是由DOG空間的局部極值點組成的.以中心點進行3X3X3的相鄰點比較,檢測其是否是圖像域和尺度域的相鄰點的極大值或極小值.
(1)為了確保不是噪聲我們先進型閾值二值化;
n和S一樣,你想提取多少個圖片的特征;(n)S表示每組提取多少層
(2)在差分金字塔中找極值點
特征點是由DOG空間的局部極值點組成的。為了尋找DoG函數的極值點,每一個像素點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。特征點是由DOG空間的局部極值點組成的。如上圖,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。
由於像素是離散的,且尺度空間也是離散的(前后尺度成k倍),有可能找到的極值點是真正極值點旁邊的點,如下圖:
因此需要極值點的精確定位; 利用已知的離散空間點插值得到的連續空間極值點的方法叫做子像素插值(Sub-pixel Interpolation)。
(3)極值點的精確定位
為了提高關鍵點的穩定性,需要對尺度空間DoG函數進行曲線擬合。利用DoG函數在尺度空間的Taylor展開式(擬合函數)為:
求導方法:就是利用相鄰像素差值代替求導
可參考:sift算法原理詳解(三)
檢測到的極值點對應極值點的方程為:
(4)舍去低對比度的極值點
其中,代表相對插值中心的偏移量,當它在任一維度上的偏移量大於0.5時(即x或y或
),意味着插值中心已經偏移到它的鄰近點上,所以必須改變當前關鍵點的位置。同時在新的位置上反復插值直到收斂;也有可能超出所設定的迭代次數或者超出圖像邊界的范圍,此時這樣的點應該刪除,在Lowe中進行了5次迭代。另外,
過小的點易受噪聲的干擾而變得不穩定,所以將
小於某個經驗值(Lowe論文中使用0.03,Rob Hess等人實現時使用0.04/S)的極值點刪除。同時,在此過程中獲取特征點的精確位置(原位置加上擬合的偏移量)以及尺度()。
對應公式:T取0.04,n和S一樣,你想提取多少個圖片的特征;(n)S表示每組提取多少層
(5)邊緣效應的去除(Hessian矩陣)
具體的海森矩陣數學公式可以參考:https://blog.csdn.net/qq_33854260/article/details/69808970 和 https://blog.csdn.net/qq_39521554/article/details/78895869
其與圖像的關系:https://blog.csdn.net/lwzkiller/article/details/55050275
H(x,y)就是高斯差分金字塔中對x,y的二階導數,及
然后我們需要知道矩陣的跡(Tr(H))是矩陣的特征根之和(α和β)和行列式的計算(Det(H));
首先我們知道在OpenCV——Harris、Shi Tomas、自定義、亞像素角點檢測
harris焦點檢測中的特征值的變化可以檢測出邊緣;
同理,既然我們能檢測出邊緣,就可以剔除邊緣點;及希望特征根α和β兩個值相差不多,及沒有邊緣效應;故希望r小於一定的閾值;
令為α最大特征值,β為最小的特征值,則公式的值在兩個特征值相等時最小,隨着的增大而增大。值越大,說明兩個特征值的比值越大,即在某一個方向的梯度值越大,而在另一個方向的梯度值越小,而邊緣恰恰就是這種情況。所以為了剔除邊緣響應點,需要讓該比值小於一定的閾值,因此,為了檢測主曲率是否在某域值r下,只需檢測
(4-7)
式(4-7)成立時將關鍵點保留,反之剔除。
原文鏈接:https://blog.csdn.net/qq_37374643/article/details/88606351
參考:SIFT算法原理詳解