1. 程式人生 > >SIFT特徵點檢測,特徵點描述,特徵點匹配理解

SIFT特徵點檢測,特徵點描述,特徵點匹配理解

前面提到了Harris角點檢測,此方法一個很明顯的缺點是不能解決尺度變化不變性,因為Harris中檢測一個點是不是角點是看這個點所在patch和周圍各個方向patch是否有明顯變化,可是尺度變化後這個方法不適用,SIFT利用差分高斯金字塔解決了這個問題。

SIFT特徵點檢測步驟:

(1)首先將圖片構成高斯多尺度金字塔。每層都是上層通過下采樣得到的。每層高斯金字塔中都有不同尺度因子(高斯中的標準差)的高斯模糊。然後為了計算影象的高斯拉普拉斯(LoG),利用差分高斯(DoG)實現,數學上可以證明DoG是近似LoG的,證明如下:


整個金字塔是如下形式:


圖中左邊是不同尺度的高斯金字塔,而右邊是在左邊高斯的情況下對不同尺度高斯之間進行差分,下一層的基礎圖是上層第三個尺度的高斯圖。

(2)在得到差分高斯金字塔後,需要找到拉普拉斯高斯的極值點,也就是差分高斯的極值點,而且這個極值點不僅是此尺度下的極值點,也是相鄰尺度高斯圖中的極值點,所以每個點要和周圍26個點進行比較差分高斯值,如下:


至此選擇了特徵點的候選點。

(3)最後通過考慮消除邊緣響應和消除對比度低的點來去掉一些點,然後用曲線擬合計算亞畫素級別的極值點精確定位,最後得到特徵點精確座標。

SIFT特徵點描述步驟:

要想進行特徵點匹配需要知道特徵點的描述向量。之前檢測中能解決尺度變化問題,接下來想通過描述來解決旋轉問題。旋轉的解決方法是尋找一個主方向,這樣其他方向可以根據離這個主方向的角度來確定。

(1)尋找主方向。在特徵點附近的一個鄰域(圓形區域)內計算每個點的梯度幅值和角度,根據角度作為橫座標計算直方圖,直方圖縱座標為幅值的疊加,選取縱座標最大的方向作為特徵點的主方向。


(2)選取主方向後需要得到描述子,為了消除旋轉影響,首先將特徵點附近需要考慮的鄰域根據主方向進行旋轉:


然後將這個鄰域分為四個子區域(也可以是16個),每個子區域包含4*4區域,每個畫素都有梯度方向,利用直方圖統計每個子區域在8個方向的梯度值大小的統計值:


這樣每個子區域就有8維的向量,連起來就是32維向量,如果是16個子區域就是128維向量,也就是SIFT描述子。

SIFT特徵點匹配:

NNDR (NearestNeighbor Distance Ratio),也就是最近鄰次近鄰匹配。如果 某個特徵點與最相近(描述子最相像)的一個特徵點和次相近的特徵點差不多,就不太好;如果差很多,也就是和最相近的特徵點很相近,和次相近的特徵點不太相近的話就說明和最相近的特徵點匹配很好。