以上兩篇文章中檢測在DOG空間中穩定的特征點,lowe已經提到這些特征點是比Harris角點等特征還要穩定的特征。下一步驟我們要考慮的就是如何去很好地描述這些DOG特征點。
下面好好說說如何來描述這些特征點。許多資料中都提到SIFT是一種局部特征,這是因為在SIFT描述子生成過程中,考慮的是該特征點鄰域特征點的分布情況(而沒有利用全局信息)。本步驟中主要計算過程包括:確定特征點的方向和生成特征描述符。
確定特征點方向
在特征點的確定過程中,特征點的坐標以及尺度被確定下來(坐標很重要,尺度更重要,到后來,你會發現尺度這個參量在整個描述子生成過程中越來越重要,因為正是運用尺度參量實現的Scale-Invariant,尺度不變!),根據特征點的尺度選擇高斯金字塔中的圖像,然后在這幅圖像上確定該特征點的方向。這里體現的正是尺度不變的思想。
特征點方向的確定基於統計信息,以該特征點為中心,考察與該特征距離為**像素的梯度方向和梯度的幅值,梯度的方向和幅值的計算公式分別為:
構造該點鄰域梯度方向直方圖,將一圓周360°划分成36個槽,從0°開始每槽遞增10°。根據鄰域點的方向、梯度的幅值以及距離特征點的遠近構建上述梯度方向直方圖,如下圖所示:
根據梯度直方圖,直方圖峰值所對應的的角度就是當前特征點A的方向,同時如果某角度的梯度幅值和>=峰值的80%,那么就產生一個新的特征點B,這個點的坐標、尺度等參數同A,但是角度不同。
至此,特征點的方向確定完畢。
生成圖像局部描述符
到了本步驟,圖像中每個特征點的坐標、尺度以及方向都確定了,下面開始根據這些信息獲得描述子。
與上文中提到的確定特征點方向類似,生成描述子也是根據以特征點為中心的圖像局部信息,首先根據特征點的尺度選擇高斯金字塔中的圖像,然后計算特征點鄰域范圍內各點的梯度方向和梯度的幅值,並根據上文得到的特征點梯度方向更新這些梯度的方向,以此達到描述子的方向不變性。
方向不變性完成后,開始計算特征描述符了。描述符計算過程同樣基於梯度方向直方圖,只是這次直方圖的槽是以45°划分的(因此每個直方圖只有8個槽),而不是10°。具體過程如下圖所示:
統計每個4×4塊的方向梯度直方圖,為了去除光照對描述子的影響,對梯度直方圖進行歸一化處理。然后將每個直方圖槽數據串聯即可得到SIFT描述子,lowe提出當梯度方向直方圖是4×4維的時候,SIFT描述子具有最好的區分度,因此這就誕生了老生長談的128維SIFT特征向量,如下圖所示:
至此,SIFT特征計算過程結束。