1. 程式人生 > >自然特徵提取和匹配

自然特徵提取和匹配

      首先找到影象中的一些“穩定點”,這些點是一些十分突出的點不會因光照條件的改變而消失,比如角點、邊緣點、暗區域的亮點以及亮區域的點,既然兩幅影象中有相同的景物,那麼使用某種方法分別提取各自的穩定點,這些點之間會有相互對應的匹配點,正是基於這樣合理的假設,SIFT演算法的基礎是穩定點。SIFT演算法找穩定點的方法是找灰度圖的區域性最值,由於數字影象是離散的,想求導和求最值這些操作都是使用濾波器,而濾波器是有尺寸大小的,使用同一尺寸的濾波器對兩幅包含有不同尺寸的同一物體的影象求區域性最值將有可能出現一方求得最值而另一方卻沒有的情況,但是容易知道假如物體的尺寸都一致的話它們的區域性最值將會相同。SIFT的精妙之處在於採用影象金字塔的方法解決這一問題,我們可以把兩幅影象想象成是連續的,分別以它們作為底面作四稜錐,就像金字塔,那麼每一個截面與原影象相似,那麼兩個金字塔中必然會有包含大小一致的物體的無窮個截面,但應用只能是離散的,所以我們只能構造有限層,層數越多當然越好,但處理時間會相應增加,層數太少不行,因為向下取樣的截面中可能找不到尺寸大小一致的兩個物體的影象。有了影象金字塔就可以對每一層求出區域性最值,但是這樣的穩定點數目將會十分可觀,所以需要使用某種方法抑制去除一部分點,但又使得同一尺度下的穩定點得以儲存。(此段文字來自

http://blog.csdn.net/cy513/article/details/4414352

一、尺度空間的構建

1、影象尺度空間


2、高斯差分尺度空間(DOG scale-space)

利用不同尺度的高斯差分核與影象卷積生成:


 3、高斯金字塔

影象的金字塔模型是指,將原始影象不斷降階取樣,得到一系列大小不一的影象,由大到小,從下到上構成的塔狀模型。原影象為金子塔的第一層,每次降取樣所得到的新影象為金字塔的一層(每層一張影象),每個金字塔共n 層。為了讓尺度體現其連續性,高斯金字塔在簡單降取樣的基礎上加上了高斯濾波。高斯金字塔上一組影象的初始影象(底層影象)是由前一組影象的倒數第三張影象隔點取樣得到的。



4、DOG金字塔

        2002年Mikolajczyk在詳細的實驗比較中發現尺度歸一化的高斯拉普拉斯函式的極大值和極小值同其它的特徵提取函式,例如:梯度,Hessian 或Harris 角特徵比較,能夠產生最穩定的影象特徵。 而Lindeberg 早在1994 年就發現高斯差分函式(Difference of Gaussian ,簡稱DOG 運算元)與尺度歸一化的高斯拉普拉斯函式非常近似。
        下圖反應了兩者的關係:


DOG的計算可以由相鄰尺度高斯平滑後的影象相減得到:


二、檢測DOG尺度空間極值點

SIFT關鍵點是由DOG空間的區域性極值點組成的.以中心點進行3X3X3的相鄰點比較,檢測其是否是影象域和尺度域的相鄰點的極大值或極小值.


在極值比較的過程中,每一組影象的首末兩層是無法進行極值比較的,為了滿足尺度變化的連續性,在每一組影象的頂層繼續用高斯模糊生成了 3 幅影象,高斯金字塔有每組S+3層影象。DOG金字塔每組有S+2層影象:


三、精確定位關鍵點
1、位置的插值

下圖是二維函式離散空間得到的極值點與連續空間極值點的差別:


利用已知的離散空間點插值得到的連續空間極值點的方法叫做子畫素插值(Sub-pixel Interpolation).對尺度空間DOG函式進行曲線擬合(子畫素插值),利用DOG函式在尺度空間的泰勒展開式:




公式推導如下:





極值點的偏移量的求解如下:


2、去除邊緣響應

一個定義不好的高斯差分運算元的極值在橫跨邊緣的地方有較大的主曲率,而在垂直邊緣的方向有較小的主曲率。 DOG 運算元會產生較強的邊緣響應,需要剔除不穩定的邊緣響應點。獲取特徵點處的Hessian 矩陣,主曲率通過一個2x2 的Hessian 矩陣H 求出:


四、特徵點方向分配

對上面提取的每個關鍵點,圍繞該點選擇一個視窗(圓形區域),視窗內各取樣點的梯度方向構成一個方向直方圖,根據直方圖的峰值確定關鍵點的方向。關鍵點的尺度用來選擇哪個高斯濾波影象參與計算,還用來決定視窗的大小——為了保證不同尺度下的同一關鍵點的方向都包含相同的資訊量,那麼視窗的大小必然不一樣:同一個原始影象,尺度越大,視窗應該越大;反之,如果視窗大小不變,尺度越大的影象,該視窗內的資訊越少.


做一個梯度方向的直方圖,範圍是0~360度,其中每10度一個柱,總共36個柱。每個取樣點按照其梯度方向θ(x,y)加權統計到直方圖,權值為幅度m(x,y )和貢獻因子的乘積。貢獻因子是取樣點到關鍵點(視窗中心)距離的量度,距離越大,貢獻因子越小.直方圖的峰值代表了該關鍵點處鄰域梯度的主方向.


Lowe指出,直方圖的峰值確定以後,任何大於峰值80%的方向(柱)建立一個具有該方向的關鍵點,因此,對於多峰值(幅值大小接近)的情形,在同一位置和尺度就會產生多個具有不同方向的關鍵點。雖然這樣的點只佔15%,但是它們卻能顯著地提高匹配的穩定性。用每個峰值和左右兩個幅值擬合二次曲線,以定位峰值的實際位置(拋物線的最高點)。峰值方向的精度高於10度。


 所以,關鍵點的方向分配步驟如下:


五、描述符的生成


SIFT 描述子是關鍵點領域高斯影象梯度統計結果的一種表示。通過對關鍵點周圍影象區域分塊,計算塊內梯度直方圖,生成具有獨特性的向量,這個向量是該區域影象資訊的一種抽象,具有唯一性。 Lowe 建議描述子使用在關鍵點尺度空間內4×4的視窗中計算的8 個方向的梯度資訊,共4×4×8 =128維向量表徵.

1、確定計算描述子所需的影象區域


計算結果四捨五入取整。

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


旋轉後領域內取樣點的新座標為:


3、將領域內的取樣點分配到對應的子區域內,將子區域內的梯度值分配到8 個方向上,計算其權值 



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


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


5、描述符向量元素門限化

即把方向直方圖每個方向上梯度幅值限制在一定門限值一下(門限一般取0.2)

6、描述符向量元素歸一化

特徵向量形成後,為了去除光照變化的影響,需要對它們進行歸一化處理,對於影象灰度值整體漂移,影象各點的梯度是鄰域畫素相減得到,所以也能去除。



六、匹配

採用關鍵點描述子的歐式距離來作為兩幅影象的關鍵點的相似性度量。


七、SIFT演算法的缺陷

(1)SIFT在求主方向階段太過於依賴區域性區域畫素的梯度方向,有可能使得找到的主方向不準確,後面的特徵向量提取以及匹配都嚴重依賴於主方向,即使不大偏差角度也可以造成後面特徵匹配的放大誤差,從而匹配不成功;
(2)影象金字塔的層取得不足夠緊密也會使得尺度有誤差,後面的特徵向量提取同樣依賴相應的尺度,發明者在這個問題上的折中解決方法是取適量的層然後進行插值。
(3)我們知道同樣的景物在不同的照片中可能出現不同的形狀、大小、角度、亮度,甚至扭曲;計算機視覺的知識表明通過光學鏡頭獲取的影象,對於平面形狀的兩個物體它們之間可以建立射影對應,對於像人臉這種曲面物體在不同角度距離不同相機引數下獲取的兩幅影象,它們之間不是一個線性對應關係,就是說我們即使獲得兩張影象中的臉上若干匹配好的點對,還是無法從中推匯出其他點的對應。

八、SIFT的後續發展






參考: