1. 程式人生 > >【目標檢測】SIFT特徵學習記錄

【目標檢測】SIFT特徵學習記錄

一、生成尺度空間

尺度空間L(x,y,\sigma )定義為

其中I(x,y)是輸入影象,*是卷積運算,G(x,y,\sigma )可變尺度的高斯函式

二維高斯函式畫出來是下面這樣的,

卷積過程是在影象上進行滑窗,核函式和影象點乘相加。

1.1 建立高斯金字塔LOG

首先對影象做降取樣,根據不同的降取樣尺度,可以生成多層影象,每層影象再用不同尺度的高斯核進行平滑,每一層又能得到多組不同模糊程度的影象。

1.2 建立高斯差分金字塔DOG

為了在尺度空間更高效的檢測穩定的關鍵點,定義D(x,y,\sigma )

同層內相鄰兩組影象做差分。

相鄰兩層之間的尺度相差一個比例因子k。如果每組有S層,則k=2^{1/s}。上一組影象的最底層影象是由下一組中尺度為2σ的影象進行降取樣得到的。

二、檢測區域性空間極值點

尋找極值點時,每個畫素要和本層影象相鄰的畫素和相鄰層的相鄰畫素點進行比較,只有它大於(或小於)所有相鄰點時,才判定為極值點。

如下圖所示,中間的檢測點要和其所在影象的3×3鄰域8個畫素點,以及其相鄰的上下兩層的3×3領域18個畫素點,共26個畫素點進行比較。

三、精確定位極值點

3.1 剔除低對比度極值點

D(x,y,\sigma )做泰勒展開,

其中,

極值點如下,

把極值點帶人泰勒展開式中,得到

作者在論文中設定閾值條件|D(\hat{x})|\geqslant 0.03,小於0.03的極值點將被剔除。

3.2 剔除邊緣極值點

光是剔除掉低對比度的極值點還是不夠的,DOG會在邊緣處產生較強的響應,但這些偽極值點並不是我們想要的。

在邊緣梯度的方向上主曲率值比較大,而沿著邊緣方向則主曲率值較小。候選特徵點的DoG函式的主曲率可以通過2x2的Hessian矩陣H計算,

主曲率與H的特徵值成比例關係。假設\alpha為H的最大特徵值,\beta為H的最小特徵值,則

其中,Tr(H)為矩陣H的跡,Det(H)為矩陣H的行列式。

設γ=α/β表示最大特徵值和最小特徵值的比值,則

這樣,上式只與兩個特徵值的比例有關,與具體的值無關。

檢測主曲率是否小於閾值r,只需判斷

論文中設定r=10。

四、方向賦值

通過尺度不變性就極值,可以使其具有方向不變性。利用關鍵點鄰域畫素的梯度方向分佈特性,可以為每個關鍵點指定方向,使其具有旋轉不變性。

計算出梯度的幅值和方向之後,就可以用直方圖統計特徵點鄰域內畫素的梯度幅值和方向了。360°分成36個直方圖的柱,橫軸是方向,縱軸是幅值的累加,在直方圖的峰值就是特徵點的主方向。在梯度直方圖中,當存在一個相當於主峰值80%能量的柱值時,則可以將這個方向認為是該特徵點輔助方向。直方圖的統計半徑為3×1.5σ。作者指出15%的關鍵點具有多方向,而且這些點對匹配的穩定性很關鍵。最終,關鍵點的方向可以由和主峰值最近的三個柱值通過拋物線插值得到。

五、影象描述子

前面已經為每個關鍵點賦予了位置、尺度和方向資訊。接下來需要用一組向量來描述關鍵點。

如下圖所示,

關鍵點附近劃分為2x2個子區域,每個子區域有8個方向的資訊,一個SIFT向量就是2x2x8=32維。

作者指出在實驗中4x4x8=128維的描述子表現最好。