1.給特征點賦值一個128維的方向參數
在計算好的特征點中,為每個特征點計算一個方向,依照這個方向作進一步的計算,利用關鍵點鄰域像素的梯度方向分布特性為每個關鍵點指定方向參數,是算子具備旋轉不變性。
為(x,y)處模值和方向的公式。L所用的尺度為關鍵點所在的尺度。至此,圖像的關鍵點檢測完畢,每個關鍵點有三個信息:位置、所處尺度、方向,由此可以確定一個SIFT特征區域。
梯度直方圖的范圍是0~360度,其中每10度一個柱,總共36個柱。隨着距中心點越遠的領域其對直方圖的貢獻也相應減小。Lowe論文中還提到要使用高斯函數對直方圖進行平滑,減少突變的影響。
在實際計算時,我們以關鍵點為中心的鄰域窗口采樣,並用直方圖統計鄰域像素的梯度方向。梯度直方圖的范圍是0~360度,其中每45度一個柱,總共8個柱,或者每10度一個柱,總共36個柱。Lowe論文中還提到 要使用高斯函數對直方圖進行平滑,減少突變的影響。直方圖的峰值則代表了該關鍵點處鄰域梯度的主方向,即作為該關鍵點的方向。
通過對關鍵點周圍圖像區域分塊,計算快內梯度直方圖,生成具有獨特性的向量,這個向量是該區域圖像信息的一種抽象,具有唯一性。
2.關鍵點描述子的生成
首先將坐標軸旋轉為關鍵點的方向,以確保旋轉不變性,以關鍵點為中心取16*16的窗口。
圖左部分的中央為當前關鍵點的位置,每個小格代表關鍵點鄰域所在尺度空間的一個像素,利用公式求得每個像素梯度幅值與梯度方向。在每4*4的小塊上計算8個方向的梯度方向直方圖,繪制每個梯度方向的累加值,即可形成一個種子點。此圖中一個關鍵點由4*4共16個種子點組成,每個種子點有8個方向向量信息。這種鄰域方向性信息聯合的思想增強了算法抗噪聲的能力,同時對於含有定位誤差的特征匹配也提供了較好的容錯性。計算Keypoint周圍16*16的window中每一個像素的梯度,而且使用高斯下降函數降低遠離中心的權重。
一個關鍵點可以產生128個數據,即最終形成128維的SIFT特征向量,此時SIFT特征向量已經去除了尺度變化、旋轉等幾何變形因素的影響,再繼續將特征向量的長度歸一化,則可以進一步去除光照變化的影響。