http://www.cnblogs.com/blue-lg/archive/2012/07/17/2594868.html
SIFT算法由D.G.Lowe 1999年提出,2004年完善總結,論文發表在2004年的IJCV上,主要用於提取具有圖像旋轉不變性和伸縮不變性的特征點。
這項技術可以推廣到圖像識別、圖像拼接以及圖像恢復等。
David G. Lowe, "Distinctive image features from scale-invariant keypoints," International Journal of Computer Vision, 60, 2 (2004), pp. 91-110
論文詳細地址:lowe sift算法
算法主要分為4個步驟:
$1. 尺度空間上的極值檢測
在介紹這一部分的時候,先引入幾個概念:
最後關於金字塔具體處理的說明:
1)在SIFT裡高斯金字塔的第一組第一層通常是由一個原圖像長寬擴大一倍開始的,這樣做是為了可以得到更多的特征點 ;
2)大家可以發現如果用每組5層的高斯金字塔構造一個DoG金字塔的的話,DoG的每組的層數是4 ;
3)對於DoG金字塔,特征點的搜索從每組的二層到倒數第二層的(後面說明為什麼),所以如果DoG金字塔有效層數目為n的話,那麼DoG金字塔應該有n+2層,那麼對 應的高斯金字塔應該有n+3層 ;
4)高斯金字塔從第二組開始的每組第一層是由上一組的倒數第二層降采樣得到的,如下所示。
講了這麼多概念,現在正式開始講解如何在尺度空間裡尋找特征點啦。
由於圖像進行伸縮等變換後尺度空間發生變化,所以為了方便找出匹配點,需要將圖像在不同的尺度空間裡進行平滑,並相減得到更多的邊緣等高頻信息(特征點的集中 域)。高斯平滑並計算dog金字塔利用下面的3個計算公式:
至於為什麼用DOG算子來提取額特征點,而不是hessian或者其他角點方法比如Harris,是因為Mikolajczyk (2002)發現通過
計算出來的局部區域極大值和極小值與上述幾種角點相比能產生更加穩定的特征點。
但是上面的公式和DOG又有素描關系呢?看下面的公式就知道了:
兩者之間只是相差了(k-1)δ2 倍而已,不影響特征點的尋找。
還有一點需要說明的是,這裡不同的δ就是代表不同的尺度,0(本身),δ,kδ,等等... δ的值越大,意味著尺度空間越大。具體該怎麼理解尺度這個概念呢,就是需要描述的像素灰度分布越廣,尺度越廣,也就是說越模糊的圖像尺度也越大。舉個例子,有兩個灰度值分別為0和1,模糊後變為0.4和0.6,要表示這兩個灰度值需要更多的參數,尺度變大。更簡單的說尺度就是頻率,高斯模糊越明顯,尺度越大,因為這時圖像是低頻的。
剩下的只需要在DOG金字塔裡尋找3X3X3鄰域的極值即為我們所要尋找的feature points.如下圖所示,
$2. 關鍵點的精確定位
通過擬和三維二次函數以精確確定關鍵點的位置和尺度(達到亞像素精度),同時去除低對比度的關鍵點和不穩定的邊緣響應點(因為DoG算子會產生較強的邊緣響應),以增強
匹配穩定性、提高抗噪聲能力。
①空間尺度函數泰勒展開式如(4 )所示:
對(4)求導,並令其為0,得到精確的位置(5)。
②在已經檢測到的特征點中,要去掉低對比度的特征點和不穩定的邊緣響應點。去除低對比度的點:把公式(5)代入公式(4),可得(6)。
若(6)的值大於0.03 ,該特征點就保留下來,否則丟棄。
③邊緣響應的去除
一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。主曲率通過一個2×2 的Hessian矩陣H求出:
導數由采樣點相鄰差估計得到。D的主曲率和H的特征值成正比,令α為最大特征值,β為最小的特征值,則
令α=rβ 則:
(r + 1)2/r的值在兩個特征值相等的時候最小,隨著r的增大而增大,因此,為了檢測主曲率是否在某域值r下,只需檢測。
在Lowe的文章中,取r=10。
$3. 關鍵點方向分配
利用關鍵點鄰域像素的梯度方向分布特性為每個關鍵點指定方向參數,使算子具備旋轉不變性。
梯度大小和方向計算公式如下:
orientation histogram的生成,將0~360度分到36個區間中,每個區間的高度計算如下:Σm(xi,yi)*g(x0,y0,1.5δ) 其中δ為當前的尺度,(x0,y0)為當前特征點的坐標而g(x0,y0,1.5δ)則是高斯濾波系數,計算公式➹(2)。
主方向定義為擁有最高峰hm的那個區間,而其他區間高度為0.8*hm之上的區間方向可以認為是該特征點的輔方向,這樣就增強了匹配的魯棒性。
這樣,每個關鍵點key points就有三個信息:位置(x0,y0)、所處尺度δ、方向。
若表示出來,效果如下:
圖1
$4. 提取特征描述子
圖2
最後,一共有4X4X8=128維向量來表征這個特征點。
此時SIFT特征向量已經去除了尺度變化、旋轉等幾何變形因素的影響,再繼續將特征向量的長度歸一化,則可以進一步去除光照變化的影響。
$5. 後續匹配工作
當兩幅圖像的SIFT特征向量生成後,下一步我們采用關鍵點特征向量的歐式距離來作為兩幅圖像中關鍵點的相似性判定度量。取圖像1中的某個關鍵點,並找
出其與圖像2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少於某個比例閾值,則接受這一對匹配點。降低這個比例閾值,
SIFT匹配點數目會減少,但更加穩定。為了排除因為圖像遮擋和背景混亂而產生的無匹配關系的關鍵點。Lowe提出了比較最近鄰距離與次近鄰距離的方法,距離比率
ratio小於某個閾值的認為是正確匹配。因為對於錯誤匹配,由於特征空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。Lowe推薦ratio的
閾值為0.8。但作者對大量任意存在尺度、旋轉和亮度變化的兩幅圖片進行匹配,結果表明ratio取值在0. 4~0. 6之間最佳,小於0. 4的很少有匹配點,大於0. 6的則
存在大量錯誤匹配點。作者建議ratio的取值原則如下:
ratio=0. 4 對於准確度要求高的匹配;
ratio=0. 6 對於匹配點數目要求比較多的匹配;
ratio=0. 5 一般情況下。
也可按如下原則:當最近鄰距離<200時ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分錯誤匹配點。
至此,整個sift算法完畢。