學習筆記———《SIFT算法》

本人在看論文的過程中涉及到了SIFT算法,通過閱讀Lowe的文章,也對應看了別人整理的筆記,個人覺得有些地方說的不是很清楚,特整理此筆記供大家參考!想下載pdf版本的朋友請到我資源裏去下載,下載地址:http://download.csdn.net/detail/lcj369387335/6846387

SIFT(Scale-InvariantFeature Transform)

SIFT(Scale-Invariant Feature Transform)尺度不變特徵轉換,是一種檢測局部特徵的算法,它在空間尺度中尋找極值點,並提取出其位置、尺度、旋轉不變量,此算法由 David Lowe在1999年《Object Recognition from Local Scale-InvariantFeatures》中發表,2004年在《DistinctiveImage Features from Scale-Invariant Keypoints》完善總結。其應用範圍包含物體辨識、機器人地圖感知與導航、影像縫合、3D模型建立、手勢辨識、影像追蹤和動作比對。此算法有其專利,專利擁有者爲英屬哥倫比亞大學。局部影像特徵的描述與偵測可以幫助辨識物體,SIFT特徵是基於物體上的一些局部外觀的興趣點而與影像的大小和旋轉無關。對於光線、噪聲、一些微視角改變的容忍度也相當高。基於這些特性,它們是高度顯著而且相對容易擷取,在母數龐大的特徵數據庫中,很容易辨識物體而且鮮有誤認。使用SIFT特徵描述對於部分物體遮蔽的偵測率也相當高,甚至只需要3個以上的SIFT物體特徵就足以計算出位置與方位。在現今的電腦硬件速度下和小型的特徵數據庫條件下,辨識速度可接近即時運算。SIFT特徵的信息量大,適合在海量數據庫中快速準確匹配。

SIFT算法的特點有:

1.SIFT特徵是圖像的局部特徵,其對旋轉、尺度縮放、亮度變化保持不變性,對視角變化、仿射變換、噪聲也保持一定程度的穩定性;

2.獨特性(Distinctiveness)好,信息量豐富,適用於在海量特徵數據庫中進行快速、準確的匹配;

3.多量性,即使少數的幾個物體也可以產生大量的SIFT特徵向量;

4.高速性,經優化的SIFT匹配算法甚至可以達到實時的要求;

5.可擴展性,可以很方便的與其他形式的特徵向量進行聯合。

SIFT算法可以解決的問題:目標的自身狀態、場景所處的環境和成像器材的成像特性等因素影響圖像配準/目標識別跟蹤的性能。而SIFT算法在一定程度上可解決:

1.目標的旋轉、縮放、平移(RST)

2.圖像仿射/投影變換(視點viewpoint)

3.光照影響(illumination)

4.目標遮擋(occlusion)

5.雜物場景(clutter)

6.噪聲

SIFT算法的實質是在不同的尺度空間上查找特徵點,並計算出特徵點的方向。SIFT所查找到的特徵點是一些十分突出,不會因光照、仿射變換和噪音等因素而變化的點,如角點、邊緣點、暗區的亮點及亮區的暗點等。

SIFT的缺點,SIFT在圖像的不變特徵提取方面擁有無與倫比的優勢,但並不完美,仍然存在:

1.實時性不高。

2.有時特徵點較少。

3.對邊緣光滑的目標無法準確提取特徵點等缺點,近來不斷有人改進,其中最著名的有SURF和PCA-SIFT。

Lowe將SIFT算法分解爲如下五步:

1.構建尺度空間:這是一個初始化操作,尺度空間理論目的是模擬圖像數據的多尺度特徵。

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

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

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

5. 特徵點特徵矢量生成:在每個特徵點周圍的鄰域內,在選定的尺度上測量圖像局部的梯度。這些梯度被變換成一種表示,這種表示允許有較大的局部形狀的變形和光照變化。

本文沿着Lowe的步驟,參考Rob Hess源碼,詳解SIFT算法的實現過程。

1.構建尺度空間

這是一個初始化操作,SIFT算法是在不同的尺度空間上查找關鍵點,尺度空間理論目的是模擬圖像數據的多尺度特徵,而尺度空間的獲取需要使用高斯模糊來實現,Tony Lindeberg等人已在《Scale-space theory: A basictool for analysing structures at different scales》中證明高斯卷積核是實現尺度變換的唯一變換核,並且是唯一的線性核。於是一個二維圖像的尺度空間定義爲一個變尺度的高斯函數與圖像卷積產生的。即:

其中表示在x和y兩個方向上進行的卷積操作,而爲:


其中(x,y)代表圖像像素的空間座標,是尺度空間座標。的大小決定圖像的平滑程度,大尺度對應圖像的概貌特徵,小尺度對應圖像的細節特徵。大的值對應粗超尺度(低分辨率),反之,小的值對應精細尺度(高分辨率)。

1.1高斯金字塔的構建


圖1-1 高斯金字塔模型

尺度空間在實現時使用高斯金字塔表示,如圖1-1所示,高斯金字塔的構建分爲兩部分:(1)對圖像做不同尺度的高斯模糊;(2)對圖像做降採樣(隔點採樣);

1.2構建尺度空間需確定的參數

爲了讓尺度體現其連續性,在簡單下采樣的基礎上加上了高斯濾波。一幅圖像可以產生幾組(octave)圖像,每組圖像包括幾層(interval)圖像。高斯圖像金字塔共O組,每組S層,高斯金字塔組數計算公式:


其中M,N分別表示圖像的行數和列數。特徵點的尺度座標按特徵點所在的組和組內的層計算得到:


其中表示尺度空間座標,o爲組的索引,s表示組內層的索引,表示基準層尺度,S表示每組層數(一般爲3~5)。當圖像通過相機拍攝時,相機的鏡頭已經對圖像進行了一次初始的模糊,根據高斯模糊的性質:

其中爲第0層尺度,爲被相機鏡頭模糊後的尺度。高斯金字塔的組內尺度是指同一組內的尺度關係,組內相鄰層尺度簡化爲:


組間尺度是指不同組之間的尺度關係,相鄰組的同層尺度簡化爲:


最後可將組內和組間尺度歸爲:,其中, i表示爲金字塔組數,n爲每一組的層數。上一組圖像的底層是由前一組圖像的倒數第三層圖像隔點採樣生成的,這樣可以保持尺度的連續性。

在Lowe的論文使用瞭如下參數,

1.3 DoG尺度空間生成

使用LoG(Laplacianof Gaussian)能夠很好地找到圖像中的興趣點,取一張圖像將其模糊,並且計算它的二階導數,這樣可以定位圖像中的邊界和直角。這些邊界和直角對於找到特徵點是很有幫助的。但是二階導數對噪音是非常敏感的,通過使用模糊操作平滑噪音,可以穩定了二階導數。這個問題計算所有二階導數需要大量的計算,所以使用近似操作。Lowe使用更高效的高斯差分算子代替拉普拉斯算子進行極值檢測。

Lindeberg早在1994年就發現高斯差分方法DoG(Difference of Gaussian)是對高斯拉普拉斯方法LoG的一個近似,DoG的響應值是對的近似。如圖1-2所示。


圖1-2 LoG曲線和DoG曲線的對比

在某一個尺度上對特徵點的檢測,可以通過對同一組內的兩個相鄰高斯尺度空間圖像相減,得到一個DoG的響應值圖像表示爲:


其中K爲兩相鄰尺度空間倍數。

由熱傳導方程可知:,對上式進行有限差分運算,得到:


由於常數k-1並不會影響極值點的位置,所以的近似表示,即DoG是對LoG的近似表示。

使用DoG對LoG近似帶來的好處是顯而易見的。第一是LoG需要使用兩個方向的高斯二階微分卷積核,而DoG直接使用高斯卷積核,省去了對卷積核的生成的運算量;第二是DoG保留了各個高斯尺度空間的圖像,這樣,在生成某一空間尺度的特徵時,可以直接使用式(1-1)產生的尺度空間圖像,而無需重新再次生成該尺度的圖像;第三是LoG對特徵點進行檢測較DoH(Determinant of Hessian)、Harris和其他點檢測方法穩定性更好,抗圖像中噪聲的能力更強,而DoG是對LoG的近似和簡化,因此,也具有與LoG相同的性質。

DoG是通過構建圖像金字塔具體實現的。如圖1-3所示。


圖1-3 高斯金字塔與DoG的實現

2. 檢測尺度空間極值點

特徵點是由DOG空間的局部極值點組成的,特徵點的搜索是通過同一組內各DoG相鄰兩層之間比較完成的。爲了尋找尺度空間的極值點,每一個採樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如圖2-1所示,中間的檢測點與它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。也就是說,比較是在一個3×3的立方體內進行。


圖2-1 在DoG中極值點的搜索與定位

搜索過程從每組的第二層開始,以第二層爲當前層,對第二層的DoG圖像中的每個點取一個3×3的立方體,立方體上下層爲第一層和第三層。這樣搜索得到的極值點既有位置座標(DoG的圖像座標),又有空間尺度座標(層座標)。當第二層搜索完成後,再以第三層作爲當前層,其過程和第二層的搜索類…….。在極值比較的過程中,每一組圖像的首末兩層是無法進行極值比較的,爲了滿足尺度變化的連續性,我們在每一組圖像的頂層繼續用高斯模糊生成了3幅圖像,此時,高斯金字塔每組有S+3層圖像,DoG金字塔每組有S+2層。這樣只犧牲了0組的最低層和第N組的最高層。圖2-2爲不同尺度層間極值檢測示意圖。


圖2-2 當S=3時不同尺度層間極值檢測示意圖

注:對“爲了滿足尺度變化的連續性”做仔細闡述:

假設S=3,也就是每個組裏有3層,則,那麼按照上圖可得高斯空間和DoG空間分別有3個(S個)和2個(S-1個)分量,在DoG空間中,1st-octave兩項分別是; 2nd-octave兩項分別是;由於無法比較極值,我們必須在高斯空間繼續添加高斯模糊項,使得形成,這樣就可以選擇DoG空間中的中間三項(只有左右都有才能有極值),那麼下一octave中(由上一層降採樣獲得)所得三項即爲,其首項。剛好與上一octave末項尺度變化連續起來,所以每次要在高斯空間添加3項,每組共S+3層圖像,相應的DoG金字塔有S+2層圖像。

3. 精確定位特徵點

3.1 通過子像元插值,去掉低響應的特徵點

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

以上方法檢測到的極值點是離散空間的極值點,檢測到的極值點並不是真正意義上的極值點。圖3-1顯示了二維函數離散空間得到的極值點與連續空間極值點的差別。利用已知的離散空間點插值得到連續空間極值點的方法叫做子像素插值(Sub-pixel Interpolation)。


圖3-1 離散空間的極值點與連續空間極值點之間的關係

  爲了提高特徵點的穩定性,需要對尺度空間DoG函數進行曲線擬合。利用DoG函數在尺度空間的Taylor展開式(擬合函數)爲:


其中。求導並讓方程等於零,可以得到精確的極值點:

對應極值點,方程的值爲:


當精確的極值點相對檢測到的極值點在任一維度上的偏移量大於0.5時(即x或y或),意味着插值中心已經偏移到它的鄰近點上,所以必須改變當前特徵點的位置。同時在新的位置上反覆插值直到收斂;也有可能超出所設定的迭代次數或者超出圖像邊界的範圍,此時這樣的點應該刪除,在Lowe中進行了5次迭代。另外,過小的點易受噪聲的干擾而變得不穩定,所以將小於某個經驗值(Lowe論文中使用0.03,Rob Hess等人實現時使用0.04/S)的極值點刪除。同時,在此過程中獲取特徵點的精確位置(原位置加上擬合的偏移量)以及尺度

注:極值點求導過程:

對於n維函數,其泰勒展開式的矢量表示形式爲:


當矢量爲n維時,有:


    

對於矩陣,則


的導數,則


則對的導數爲:


求取的極值,即,得到極值點所在的位置矢量爲:


3.2通過邊緣效應計算,去掉邊緣響應強的點

爲了得到穩定的特徵點,只是刪除DoG響應值低的點是不夠的。由於DoG對圖像中的邊緣有比較強的響應值,而一旦特徵點落在圖像的邊緣上,這些點就不是穩定的點。一方面圖像邊緣上的點很難定位,具有定位的歧義性;另一方面這樣的點很容易受到噪聲的干擾而變得不穩定。

一個定義不好的高斯差分算子的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。而主曲率通過一個2x2的Hessian矩陣H求出:


其中D值可以通過求取鄰近點像元的差分得到,表示DoG金字塔中某一尺度的圖像x方向求導兩次。H的特徵值與D主曲率成正比例,爲了避免直接的計算這些特徵值,而只是考慮它們的之間的比率。令爲較大特徵值,爲較小的特徵值,則:


如果爲最大特徵值與最小特徵值之間的比值,那麼:

這樣便有:


上式的結果只與兩個特徵值得比例有關,而與具體特徵值無關。當兩個特徵值相等時,的值爲最小,隨着的增加,的值也會增加,即在某一個方向的梯度值越大,而在另一個方向的梯度值越小,而邊緣恰恰就是這種情況。所以爲了剔除邊緣響應點,需要讓該比值小於一定的閾值,所以,要想檢查主曲率的比值小於某一閾值,只要檢查下式是否成立:


將滿足上式成立時的特徵點保留,反之剔除。

Lowe在論文中給出=10。圖3-2演示了SIFT特徵點檢測過程中通過子像元插值和去邊緣效應不斷精化檢測結果的例子。


圖3-2 SIFT特徵點檢測中去邊緣效應不斷精化過程

(a)待檢測原始圖像,大小爲233x189;b)通過DoG響應極值點,得到的原始特徵點,共832個;

(c)通過子像元插值,去掉低響應的特徵點,共729個;(d)通過邊緣效應計算,去掉邊緣效應的特徵點,共536個;

注:圖中的箭頭起點表示特徵點的位置,箭頭的方向表示特徵點領域梯度的主方向,箭頭的長度表示特徵點尺度大小。

4. 特徵點方向分配

爲了實現描述符旋轉不變性,需要根據檢測到的特徵點的局部圖像結構求得一個基準方向。使用圖像梯度的方法求取局部結構的穩定方向。對於在DoG金字塔中檢測出的特徵點,我們知道該特徵點的尺度值,因此根據這一尺度值,得到最接近這一尺度值得高斯圖像:


使用有限差分,計算以特徵點爲中心,以r爲半徑的領域內圖像梯度的幅角和幅值。

梯度的幅角計算公式如下:


梯度的幅值計算公式如下:

 

每個加入梯度方向直方圖的採樣點梯度幅值都要進行權重處理,加權採用圓形高斯加權函數,按Lowe的建議,按1.5的高斯分佈加成,按尺度採樣三倍原則,鄰域窗口半徑r爲3x1.5。由於SIFT算法只考慮了尺度和旋轉的不變性,並沒有考慮仿射不變性,通過高斯加權,使特徵點附近的梯度幅值有較大的權重,這樣可以部分彌補因沒有仿射不變性而產生的特徵點不穩定的問題。

在完成特徵點領域的高斯圖像的梯度計算後,使用直方圖統計鄰域內像素的梯度方向和幅值。梯度方向直方圖的橫軸是梯度方向角,縱軸是梯度方向角對應的梯度幅值累加值。梯度直方圖將的方向範圍分爲36個柱(bins),其中每10度爲一個柱。如圖4-1所示,方向直方圖的峯值方向代表了該特徵點領域內圖像梯度的主方向,也即該特徵點的主方向。

爲了增強匹配的魯棒性,當存在另一個相當於主峯值80%能量的峯值時,則將這個方向認爲是該特徵點的輔方向。因此,一個特徵點可能會被指定具有多個方向(一個主方向,一個以上輔方向),具體而言,就是把該特徵點複製成多份特徵點,並將方向值分別賦給這些複製後的特徵點。僅有15%的特徵點被賦予多個方向,但可以明顯的提高特徵點匹配的穩定性。通常離散的梯度方向直方圖要進行插值擬合處理,來求得更精確的方向角度值。

 

圖4-1 從高斯圖像上求取梯度,由梯度得到梯度方向直方圖,爲簡化,圖中只畫了八個方向的直方圖

在獲得了圖像的特徵點主方向後,每個特徵點有三個信息:位置、尺度和方向,同時也就使關鍵點具備平移、縮放、和旋轉不變性。

5、特徵點特徵矢量生成

接下來就是爲每個特徵點建立一個描述符,用一組向量將這個特徵點描述出來,使其不隨各種變化而改變,比如光照變化、視角變化等。這個描述子不但包括特徵點,也包含特徵點周圍對其有貢獻的像素點,並且描述符應該有較高的獨特性,以便於提高特徵點正確匹配的概率。SIFT描述子是特徵點附近鄰域高斯圖像梯度統計結果的一種表示,它是一個三維陣列,但通常將它表示成一個矢量。矢量是通過對三維陣列按一定規律進行排序得到的。通過對特徵點周圍圖像區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域圖像信息的一種抽象,具有唯一性。Lowe建議描述子使用在特徵點尺度空間內4x4的窗口中計算的8個方向的梯度信息,共4x4x8=128維SIFT特徵矢量。表示步驟如下:

5.1 確定計算描述子所需的圖像區域

特徵描述子與特徵點所在的尺度有關,因此,對梯度的求取應在特徵點對應的高斯圖像上進行。將特徵點附近的鄰域劃分爲dxd (Lowe建議d=4)個子區域,每個子區域做作爲一個種子點,每個種子點有8個方向。每個子區域的大小與特徵點方向分配時相同,即每個區域有3個子像素,爲每個子區域分配邊長爲的矩形區域進行採樣(個子像素實際用邊長爲的矩形區域即可包含,由於不大,爲了簡化計算取其邊長爲3,並且採樣點宜多不宜少)。考慮到實際計算時,需要採用雙線性插值,所需圖像窗口邊長爲3(d+1)。在考慮到旋轉因素(方便下一步將座標軸旋轉到特徵點的方向),如下圖5-1所示,實際計算所需的圖像區域半徑爲: 


計算結果四捨五入取整,所以實際:


圖 5-1 旋轉引起的領域半徑的變化

5.2座標軸旋轉

將座標軸旋轉爲特徵點主方向,以確保旋轉不變性,如圖5-2所示。


圖5-2 座標軸旋轉

  旋轉後鄰域內採樣點的新座標爲:

5.3 計算子區域內的梯度值及其權值

將鄰域內的採樣點分配到對應的子區域內,將子區域內的梯度值分配到8個方向上,計算其權值。旋轉後的採樣點座標在半徑爲radius的圓內被分配到的子區域,計算影響子區域的採樣點的梯度和方向,分配到8個方向上。旋轉後的採樣點落在子區域的下標爲:


(橫縱座標由原來的(-2,2)變爲(0,4),所以要加上2,即d/2)。Lowe建議子區域的像素的梯度大小按0.5d的高斯加權計算,即:


其中a,b爲特徵點在高斯金字塔圖像中的位置座標。

5.4 插值計算每個種子點八個方向的梯度


圖 5-3 描述子梯度直方圖

如圖5-3所示,將所得采樣點在子區域中的下標 (圖中藍色窗口內紅色點)線性插值,計算其對每個種子點的貢獻。如圖中的紅色點,落在第0行和第1行之間,對這兩行都有貢獻。對第0行第3列種子點的貢獻因子爲dr,對第1行第3列的貢獻因子爲1-dr,同理,對鄰近兩列的貢獻因子爲dc和1-dc,對鄰近兩個方向的貢獻因子爲do和1-do。則最終累加在每個方向上的梯度大小爲:


其中k,m,n爲0或爲1。

5.5 特徵向量歸一化

如上統計的個梯度信息即爲該特徵點的特徵向量。特徵向量形成後,爲了去除光照變化的影響,需要對它們進行歸一化處理,對於圖像灰度值整體漂移,圖像各點的梯度是鄰域像素相減得到,所以也能去除。得到的描述子向量爲:


歸一化後的特徵向量爲:


則:


5.6 描述子向量門限

非線性光照,相機飽和度變化會造成某些方向的梯度值過大,而對方向的影響微弱。因此設置門限值(向量歸一化後,一般取0.2)截斷較大的梯度值。然後,再進行一次歸一化處理,提高特徵的鑑別性。

5.7 按特徵點的尺度對特徵描述向量進行排序

至此,SIFT特徵描述向量生成。 

參考資料:

1、David G.Lowe Object Recognition from Local Scale-Invariant Features. 1999.
2、David G.Lowe Distinctive Image Features from Scale-Invariant Keypoints. January 5, 2004.
5、sift算法源碼下載,源碼使用vs2010+opencv2.4.3實現。http://download.csdn.net/detail/lcj369387335/6847903

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