看了一週的SIFT,感受到了該算法的強大,下面就將介紹下該算法的實現過程(主要參考lowe的論文)html
SIFT(Scale-invariant feature transform)是一種檢測局部特徵的算法,該算法經過求得一幅圖中的特徵點(interest points,or corner points)及其有關scale 和 orientation 的描述子獲得特徵並進行圖像特徵點匹配,首先由lowe於99年提出,於04年對其進行了完善。算法
主要應用:物體辨識、機器人地圖感知與導航、影像縫合、3D模型創建、手勢辨識、影像追蹤和動做比對。數據庫
SIFT算法的特色有:函數
1. SIFT特徵是圖像的局部特徵,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持必定程度的穩定性;優化
2. 獨特性(Distinctiveness)好,信息量豐富,適用於在海量特徵數據庫中進行快速、準確的匹配;spa
3. 多量性,即便少數的幾個物體也能夠產生大量的SIFT特徵向量;.net
4. 高速性,經優化的SIFT匹配算法甚至能夠達到實時的要求;rest
5. 可擴展性,能夠很方便的與其餘形式的特徵向量進行聯合。code
算法創建主要有四個步驟:orm
1. 尺度空間極值檢測(Scale-space extrema detection):搜索全部尺度上的圖像位置。經過高斯微分函數來識別潛在的對於尺度和旋轉不變的興趣點。
2. 關鍵點定位(Keypoint localization):在每一個候選的位置上,經過一個擬合精細的模型來肯定位置和尺度。關鍵點的選擇依據於它們的穩定程度。
3. 方向肯定(Orientation assignment):基於圖像局部的梯度方向,分配給每一個關鍵點位置一個或多個方向。全部後面的對圖像數據的操做都相對於關鍵點的方向、尺度和位置進行變換,從而提供對於這些變換的不變性。
4. 關鍵點描述(Keypoint descriptor):在每一個關鍵點周圍的鄰域內,在選定的尺度上測量圖像局部的梯度。這些梯度被變換成一種表示,這種表示容許比較大的局部形狀的變形和光照變化。
一、尺度空間極值檢測(Scale-space extrema detection)
關鍵詞:尺度空間,高斯差分尺度空間,高斯金子塔,高斯差分金字塔(DOG)
尺度空間:由一原始圖像通過不一樣尺度的高斯模糊所得的一組圖像空間
定義:
其中 G(x,y,σ) 是尺度可變高斯函數,I(x,y)是原始圖像,σ大小決定圖像的平滑程度,大尺度對應圖像的概貌特徵,小尺度對應圖像的細節特徵。大的σ值對應粗糙尺度(低分辨率),反之,對應精細尺度(高分辨率)。
高斯差分尺度空間:極值點由高斯差分尺度空間肯定。
選擇高斯差分尺度空間計算極值點的緣由有兩點:
一、容易計算,不一樣尺度空間相減便可
二、也是最根本的一點:差分尺度空間和高斯拉普拉斯函數
近似相等
推導以下:
(1)
(2)
(1)和(2)可得
高斯金字塔及高斯差分金字塔:創建以下圖
左邊是高斯金字塔,右邊是高斯金字塔每組的相鄰兩層相減所得的高斯差分金字塔;
極值點的檢測:
在高斯差分金字塔中,每一個像素與本層的相鄰的8個及上下兩層相鄰的9個像素一共26個像素對比,若是是最小或最大則爲極值點,見下圖:
高斯金字塔的塔數及每組包含的層數肯定:
高斯金字塔的塔數能夠由公式肯定:
(M,N 爲原始圖像的長和寬,t爲金字塔頂層圖像的小的維數的對數值)
層數的肯定: 假設最終所檢測極值點的層數intvls 爲s ,因爲極值點是在三層中所檢測的,那麼GOD中的層數應該爲s+2,又因爲GOD是由高斯金字塔上下兩層相減所得,因此高斯金字塔中的層數應該爲s+3
2. 關鍵點定位(Keypoint localization)
因爲咱們實在離散空間中進行的關鍵點定位,因此關鍵點的位置頗有可能不精確,以下圖:
咱們對尺度空間DoG函數進行曲線擬合。利用DoG函數在尺度空間的Taylor展開式(擬合函數)Harris Corner檢測器爲
(3)
其中,。求導並讓方程等於零,能夠獲得極值點的偏移量爲:
(4)
帶入方程得:
(5)
其中,表明相對插值中心的偏移量,當它在任一維度上的偏移量大於0.5時(即x或y或
),意味着插值中心已經偏移到它的鄰近點上,因此必須改變當前關鍵點的位置。同時在新的位置上反覆插值直到收斂;也有可能超出所設定的迭代次數或者超出圖像邊界的範圍,此時這樣的點應該刪除,在Lowe中進行了5次迭代。另外,
太小的點易受噪聲的干擾而變得不穩定,因此將
小於某個經驗值(Lowe論文中使用0.03,Rob Hess等人實現時使用0.04/S)的極值點刪除。同時,在此過程當中獲取特徵點的精確位置(原位置加上擬合的偏移量)以及尺度(
)。
去除對比度小的關鍵點及邊緣點
對比度小的點:經過DOG所得的極值點中存在對比度小的點,若 ,該特徵點就保留下來,不然丟棄。
邊緣點:因爲DoG算子會產生較強的邊緣響應,因此極值點中存在邊緣點:由於一個定義很差的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。咱們能夠經過hessian矩陣解決這個問題;
其中Dxx、Dxy等能夠經過有限差分求導獲得
D的主曲率和H的特徵值成正比,令α爲較大特徵值,β爲較小的特徵值,咱們不直接求特徵值,求Tr 和 行列式Det則
令α=γβ,則
(r + 1)2/r的值在兩個特徵值相等的時候最小,隨着r的增大而增大,所以,爲了檢測主曲率是否在某域值r下,只需檢測
當比值爲負值時直接丟棄,當 (α+β)/ αβ> (r+1)2/r, throw it out. 在Lowe的文章中,取r=10。
3. 方向肯定(Orientation assignment)
關鍵點的位置肯定了,接下來咱們肯定關鍵點的尺度和方向,算出每一個關鍵點的幅度和方向
經過尺度不變性求極值點,可使其具備縮放不變的性質,利用關鍵點鄰域像素的梯度方向分佈特性,咱們能夠爲每一個關鍵點指定方向參數方向,從而使描述子對圖像旋轉具備不變性,咱們經過求每一個極值點的梯度來爲極值點賦予方向
Lowe實驗結果代表:描述子採用4×4×8=128維向量表徵,綜合效果最優(不變性與獨特性)。
關鍵點描述子生成步驟
一、肯定計算描述子所需的圖像區域,圖像區域的半徑經過下式計算:
二、將座標移相當鍵點主方向
旋轉後領域內採樣點的新座標爲:
三、在圖像半徑區域內對每一個像素點求其梯度幅值和方向,而後對每一個梯度幅值乘以高斯權重參數,生成方向直方圖
四、在窗口寬度爲2X2的區域內計算8個方向的梯度方向直方圖,繪製每一個梯度方向的累加值,便可造成一個種子點。而後再在下一個2X2的區域內進行直方圖統計,造成下一個種子點,共生成16個種子點
五、描述子向量元素門限化及門限化後的描述子向量規範化
六、根據特徵點的尺度對特徵描述向量進行排序,SIFT特徵向量生成
實驗結果
一、特徵點的提取:
二、特徵點匹配
三、利用ransac算法後的圖像匹配
RR Refrence:
1 j 一、lowe文章David G.Lowe Distinctive Image Features from Scale-Invariant Keypoints. January 5, 2004.
二、David G.Lowe Object Recognition from Local Scale-Invariant Features. 1999
三、http://blog.csdn.net/zddmail/article/details/7521424
四、http://blog.csdn.net/abcjennifer/article/details/7639681
五、http://www.cnblogs.com/cfantaisie/archive/2011/06/14/2080917.html
附錄:上傳一份rob hess 的源碼,rob hess主頁源碼已經修改,這份是適用於win的,可是有部分地方須要修改
http://download.csdn.net/detail/u011469591/5832149
1