SIFT算法:確定特征點方向


SIFT算法:DoG尺度空間生產 
SIFT算法:KeyPoint找尋、定位與優化
SIFT算法:確定特征點方向 
SIFT算法:特征描述子

 


目錄:

1、計算鄰域梯度方向和幅值

2、計算梯度方向直方圖

3、確定特征點方向


1 計算鄰域梯度方向和幅值

  為了實現圖像旋轉的不變性,需要根據檢測到的特征點的局部圖像結構求得一個方向基准。我們使用圖像梯度的方法求取該局部結構的穩定方向。對於己經檢測到特征點,我們知道該特征點的尺度值σ,因此根據這一尺度值,在GSS中得到最接近這一尺度值的高斯圖像。然后使用有限差分,計算以特征點為中心,以3X1.5σ為半徑的區域內圖像梯度的幅角和幅值,如下圖所示。幅角和幅值計算公式加下:

2 計算梯度方向直方圖

  在完成特征點鄰域的高斯圖像的梯度計算后,使用直方圖統計鄰域內像素的梯度方向和幅值。梯度方向直方圖的橫軸是梯度方向角,縱軸是梯度方向角對應的(帶高斯權重)梯度幅值累加值。梯度方向直方圖將。0°~360°的范圍,分為36個柱,每10°為一個柱。直方圖的峰值代表了該特征點處鄰域內圖像梯度的主方向,也即該特征點的主方向,如下圖所示。

  綠色格點代表鄰域范圍,藍色圓圈代表格點的高斯權重(稍后介紹),黑色箭頭指向代表梯度方向,箭頭長度代表梯度幅值。右邊為梯度方向直方圖(36柱,每柱代表10°,上圖只顯示了8柱)。獲得梯度方向直方圖的步驟如下:

  • 生成領域各像元的高斯權重。其中高斯函數方差為該特征點的特征尺度σ的1.5倍。形式如下,其中(i,j)為該點距離特征點的相對位置,如上圖,左上角點像元距離特征點(0,0)(即中心點)的相對位置坐標為(-4,-4),同理,右下角像元為(4,4)。

  • 遍歷鄰域(綠色)中每個點,判斷其梯度方向,將其加入相應的梯度方向直方圖中,加入量為其梯度幅值 * wi,j ,例如左上角(-4,-4)的點,其梯度為方向為25°,梯度幅值為mag,我們將其加入到hist[2]中(假設hist[0]為0°~10°的直方柱,hist[1]為10°~20°的直方柱,以此類推至hist[35]為350°~360°)。加入的量為mag* w(-4,-4),即hist[2] = hist[2] + mag* w(-4,-4)。直至遍歷整個鄰域,統計出該特征點出的梯度方向直方圖。
  • 平滑直方圖。對上一步得出的直方圖進行平滑,得到最終的梯度方向直方圖。OpenCV中使用的 (1/16) * [1,4,6,4,1] 的高斯卷積和對直方圖進行平滑處理,而vlfeat中使用了6次,鄰域大小為3的平均處理,即hist[i] = (hist[i-1]+hist[i]+hist[i+1])/3。

問題1: 為什么每個點梯度幅值要使用高斯權重?

答:由於SIFT算法只考慮了尺度和旋轉的不變性,並沒有考慮仿射不變性。通過對各點梯度幅值進行高斯加權,使特征點附近的梯度幅值有較大的權重,這樣可以部分彌補因沒有仿射不變性而產生的特征點不穩定的問題。

3 確定特征點方向

  有了梯度方向直方圖之后,找到直方圖中最大的值,則認為該方向為該特征點的主方向,如存在另一個方向大於最大值的80%,則認為該方向為該特征點的輔方向。一個特征點可能會有多個方向(一個主方向,一個以上的輔方向),這可以增強匹配的魯棒性。具體而言,就是將該特征點復制成多份特征點(除了方向θ不同外,x,y,σ都相同)。

【Note】在OpenCV中,若輔方向除了滿足大於最大值80%外,還必須是局部最大值,即 hist[i] > hist[i-1] && hist[i] > hist[i+1]。

  通常離散的梯度方向直方圖,可以通過插值擬合處理,這樣可以得到更精確的方向角度值。

  經過上述過程,我們特征點的所有量(x,y,σ,θ)都已經已經求得,其中位置(x,y)、尺度σ都是在上一節中求得,而特征點方向θ是通過特征點鄰域直方圖求得。下一節,將介紹SIFT描述子的形成方式。


 

參考資料:

  1. David G. Lowe Distinctive Image Features from Scale-Invariant Keypoints 
  2. 王永明 王貴錦 《圖像局部不變性特征與描述》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM