SIFT特徵提取算法

SIFT特徵提取算法

標籤: SIFT算法SIFT
3130人閱讀 評論(1) 收藏 舉報
category_icon.jpg分類:




     到SIFT看到了參考了最下面的四篇文章,最後綜合起來,根據自己的理解,按着自己的想法,手敲了下面的內容,感覺好長,不過希望對大家有用。



          SIFT(Scale-invariant feature transform)是一種檢測局部特徵的算法,該算法通過求一幅圖中的特徵點(interest points,or corner points)及其有關scale 和 orientation 的描述子得到特徵並進行圖像特徵點匹配,獲得了良好效果。

基本的路線:

1. 尺度空間極值檢測:搜索所有尺度上的圖像位置。通過高斯微分函數來識別潛在的對於尺度和旋轉不變的興趣點。

2. 關鍵點定位:在每個候選的位置上,通過一個擬合精細的模型來確定位置和尺度。關鍵點的選擇依據於它們的穩定程度。

3. 方向確定:基於圖像局部的梯度方向,分配給每個關鍵點位置一個或多個方向。所有後面的對圖像數據的操作都相對於關鍵點的方向、尺度和位置進行變換,從而提供對於這些變換的不變性。

4. 關鍵點描述:在每個關鍵點周圍的鄰域內,在選定的尺度上測量圖像局部的梯度。這些梯度被變換成一種表示,這種表示允許比較大的局部形狀的變形和光照變化。

一、尺度空間

    尺度空間理論的基本思想是:在圖像信息處理模型中引入一個被視爲尺度的參數,通過連續變化尺度參數獲得多尺度下的尺度空間表示序列,對這些序列進行尺度空間主輪廓的提取,並以該主輪廓作爲一種特徵向量,實現邊緣、角點檢測和不同分辨率上的特徵提取等。

      尺度空間理論目的是模擬數據的多尺度特徵。

      爲什麼要先建立尺度空間呢?因爲計算機機器對不知道物體的尺度,所以我們要先教會機器認識,教機器那就是把不同尺度的物像輸入給及其,完成一個認知的過程。在構建尺度空間的過程中,相關的就是高斯卷積核,也是實現尺度變換的唯一線性核。通過不同的來構造尺度空間

    對於一個二維圖像的尺度空間定義爲

                                                           

    其中G(x,y,)是尺度可變的高斯函數

    是尺度空間因子,是高斯正態分佈的方差,反映了圖像被平滑的程度,值越小表徵圖形被平滑程度越小,相應尺度也越小

   進一步爲了高效地在尺度空間內檢測出穩定的特徵點,在SIFT算法中使用尺度空間中的差分高斯(Ddifferenc of Gaussina,DOG)z作爲極值作爲判別依據。DOG子定義如下


下圖是不同下圖像尺度空間

                     


二、圖像金字塔,高斯金字塔,高斯差分金字塔

     

                這三個金字塔是爲了找極值點(關鍵點的鋪墊)

                圖像金字塔:首先是低通濾波器平滑圖像,然後對預處理的圖像進行降採樣(水平豎直的1/2),從而得到一系列尺寸縮小的圖像。、

                對於傳統的金字塔,每一層是由上一層分辨率的長寬各一半,也就是1/4的像素組成。

                高斯金字塔是在多分辨率金字塔簡單的降採樣基礎上高斯濾波得到的,也就是對金字塔每層圖像用不同的做高斯模糊。金字塔的每層的多張圖像合稱爲一組octave,每組都會有不同的層。需要注意的是,在降採樣的時候,金字塔上邊一組圖像的第一張圖像(最底層的一張)是由前一組(金字塔下面一組)圖像的倒數第三章圖像隔點採樣得到的。

                而SIFT算法通過對兩個相鄰高斯尺度空間上的圖像相減來得到DOG圖像,就是D(x,y,)

                下面結合圖像來理解一下,左邊的是高斯金字塔,右邊的是高斯差分金字塔,這裏的層數組數先不用管後面用到會再說,先看個金字塔過程這裏

                 

 三、DOG關鍵點(尺度空間的極值點)


              爲了尋找尺度空間的極值點,每一個採樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。

             如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認爲該點是圖像在該尺度下的一個特徵點,如圖所示。

                   

    知道了極值點的找法,但是有個問題就是如果是每組的首層和末層都缺少一個臨近層的時候,又怎麼找呢?當然還是按上面的原則,缺少的話我們就再添加補上,這裏爲什麼要在頂層加上高斯模糊生成的3幅圖像呢?這裏增加圖像是爲了首尾層有臨近層,這個數字3層是爲了保證尺度變換的連續性,下面的這個圖就會解釋加3層,爲什麼能保證尺度變換的連續性。

                               

這裏有的童鞋不理解什麼叫“爲了滿足尺度變化的連續性”,現在做仔細闡述:
假設s=3,也就是每個塔裏有3層,則k=21/s=21/3,那麼按照上圖可得Gauss Space和DoG space 分別有3個(s個)和2個(s-1個)分量,在DoG space中,1st-octave兩項分別是σ,kσ; 2nd-octave兩項分別是2σ,2kσ;由於無法比較極值,我們必須在高斯空間繼續添加高斯模糊項,使得形成σ,kσ,k2σ,k3σ,k4σ這樣就可以選擇DoG space中的中間三項kσ,k2σ,k3σ(只有左右都有纔能有極值),那麼下一octave中(由上一層降採樣獲得)所得三項即爲2kσ,2k2σ,2k3σ,其首項2kσ=24/3。剛好與上一octave末項k3σ=23/3尺度變化連續起來,所以每次要在Gaussian space添加3項,每組(塔)共S+3層圖像,相應的DoG金字塔有S+2層圖像。
                                

四、找到特徵點後要去不好的點

       (1)第一種去的點,我稱爲假極值點,爲什麼會有假的極值點呢? 因爲我們的圖像層數是離散的,並不是連續的,所以得到的並一定是真的極值點,正如下面的圖

                                              

對於這樣的點,是通過擬和三維二次函數以精確確定關鍵點的位置和尺度(達到亞像素精度),同時去除低對比度的關鍵點和不穩定的邊緣響應點(因爲DoG算子會產生較強的邊緣響應),以增強匹配穩定性、提高抗噪聲能力

①空間尺度函數泰勒展開式如下:


對上面的公式求導,導數爲0,得到極值點爲


②在已經檢測到的特徵點中,要去掉低對比度的特徵點和不穩定的邊緣響應點。去除低對比度的點:把公式(2)代入公式(1),即在DoG Space的極值點處D(x)取值,只取前兩項可得:


如果,該特徵點就會保留下來,否則就會被丟棄,刪除


(2)邊緣響應的去除,因爲除了上面的響應低的點,也有響應較強的特徵點,而我們知道在邊緣梯度方向上的主曲率值較大,而沿着邊緣方向曲率較小,因此需要提出邊緣效應的影響。邊緣上得到的極值點和非邊緣區域相比,主曲率比值較大,所以可以將主曲率比值大於一定閾值的點看作是邊緣上的點進行剔除。

DOG的主曲率與2x2的Hessian矩陣H的特徵值成正比。H矩陣

令α爲較大特徵值,β爲較小的特徵值,則

                                                                           

                                                                       

分別表示求矩陣的跡,求矩陣的行列式

令α=γβ,則得到

                                                                     

 (r + 1)2/r的值在兩個特徵值相等的時候最小,隨着r的增大而增大,因此,爲了檢測主曲率是否在某域值r下,只需檢測

                                                                               

if (α+β)/ αβ> (r+1)2/r, throw it out.   在Lowe的文章中,取r=10。r是主曲率比值閾值

                       

五、關鍵點的三個信息(x,y,,)即位置,尺度,方向



     上一步中確定了每幅圖中的特徵點,爲每個特徵點計算一個方向,依照這個方向做進一步的計算, 利用關鍵點鄰域像素的梯度方向分佈特性爲每個關鍵點指定方向參數,使算子具備旋轉不變性。圖像的關鍵點已經檢測完畢,每個關鍵點有三個信息:位置,所處尺度、方向,由此可以確定一個SIFT特徵區域。

                        模值 :

                      方向:



六、特徵描述



                           


(1)主梯度方向


       梯度直方圖的範圍是0~360度,其中每10度一個柱,總共36個柱。隨着距
       中心點越遠的領域其對直方圖的貢獻也響應減小.Lowe論文中還提到要使用高斯函數對直方圖進行平滑,減少突變的影響。

       在實際計算時,我們在以關鍵點爲中心的鄰域窗口內採樣,並用直方圖統計鄰域像素的梯度方向。梯度直方圖的範圍是0~360度,其中每45度一個柱,總共8個柱, 或者每10度一個柱,總共36個柱。Lowe論文中還提到要使用高斯函數對直方圖進行平滑,減少突變的影響。直方圖的峯值則代表了該關鍵點處鄰域梯度的主方向,即作爲該關鍵點的方向

                          

該步將建立所有scale中特徵點的描述子(128維)


                                  


通過對關鍵點周圍圖像區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域圖像信息的一種抽象,具有唯一性。(8柱)

(2)關鍵點秒速子的生成


將座標軸旋轉爲關鍵點的方向,以確保旋轉不變性

                             

以關鍵點爲中心取8×8的窗口。


圖左部分的中央爲當前關鍵點的位置,每個小格代表關鍵點鄰域所在尺度空間的一個像素,利用公式求得每個像素的梯度幅值與梯度方向,箭頭方向代表該像素的梯度方向,箭頭長度代表梯度模值,然後用高斯窗口對其進行加權運算。


圖中藍色的圈代表高斯加權的範圍(越靠近關鍵點的像素梯度方向信息貢獻越大)。然後在每4×4的小塊上計算8個方向的梯度方向直方圖,繪製每個梯度方向的累加值,即可形成一個種子點,如圖右部分示。此圖中一個關鍵點由2×2共4個種子點組成,每個種子點有8個方向向量信息。這種鄰域方向性信息聯合的思想增強了算法抗噪聲的能力,同時對於含有定位誤差的特徵匹配也提供了較好的容錯性。


計算keypoint周圍的16*16的window中每一個像素的梯度,而且使用高斯下降函數降低遠離中心的權重。

這樣就可以對每個feature形成一個4*4*8=128維的描述子,每一維都可以表示4*4個格子中一個的scale/orientation. 將這個向量歸一化之後,就進一步去除了光照的影響。

歸一化


七. 根據SIFT進行Match


生成了A、B兩幅圖的描述子,(分別是k1*128維和k2*128維),就將兩圖中各個scale(所有scale)的描述子進行匹配,匹配上128維即可表示兩個特徵點match上了。


實際計算過程中,爲了增強匹配的穩健性,Lowe建議對每個關鍵點使用4×4共16個種子點來描述,這樣對於一個關鍵點就可以產生128個數據,即最終形成128維的SIFT特徵向量。此時SIFT特徵向量已經去除了尺度變化、旋轉等幾何變形因素的影響,再繼續將特徵向量的長度歸一化,則可以進一步去除光照變化的影響。 當兩幅圖像的SIFT特徵向量生成後,下一步我們採用關鍵點特徵向量的歐式距離來作爲兩幅圖像中關鍵點的相似性判定度量。取圖像1中的某個關鍵點,並找出其與圖像2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少於某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT匹配點數目會減少,但更加穩定。爲了排除因爲圖像遮擋和背景混亂而產生的無匹配關係的關鍵點,Lowe提出了比較最近鄰距離與次近鄰距離的方法,距離比率ratio小於某個閾值的認爲是正確匹配。因爲對於錯誤匹配,由於特徵空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。Lowe推薦ratio的閾值爲0.8。但作者對大量任意存在尺度、旋轉和亮度變化的兩幅圖片進行匹配,結果表明ratio取值在0. 4~0. 6之間最佳,小於0. 4的很少有匹配點,大於0. 6的則存在大量錯誤匹配點。(如果這個地方你要改進,最好給出一個匹配率和ration之間的關係圖,這樣纔有說服力)作者建議ratio的取值原則如下:

ratio=0. 4 對於準確度要求高的匹配;
ratio=0. 6 對於匹配點數目要求比較多的匹配; 
ratio=0. 5 一般情況下。
也可按如下原則:當最近鄰距離<200時ratio=0. 6,反之ratio=0. 4。ratio的取值策略能排分錯誤匹配點。


當兩幅圖像的SIFT特徵向量生成後,下一步我們採用關鍵點特徵向量的歐式距離來作爲兩幅圖像中關鍵點的相似性判定度量。取圖像1中的某個關鍵點,並找出其與圖像2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離少於某個比例閾值,則接受這一對匹配點。降低這個比例閾值,SIFT匹配點數目會減少,但更加穩定。


參考文章

http://blog.csdn.net/abcjennifer/article/details/7639681

http://www.cnblogs.com/cfantaisie/archive/2011/06/14/2080917.html

http://blog.csdn.net/pi9nc/article/details/23302075

http://blog.csdn.net/baimafujinji?viewmode=contents

 



7
0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章