1. 程式人生 > >談談對SIFT演算法的理解

談談對SIFT演算法的理解

參考資料

SIFT演算法一般是指David G. Lowe在1999年提出,2001、2004兩年改進後的演算法。其中又屬04年這篇最全面而詳細。Lowe的論文和Demo參見其主頁
http://www.cs.ubc.ca/~lowe/keypoints/

概要

因為Lowe在論文中很多細節並未給出,導致很多人(包括我)在企圖實現SIFT時遇到了很大的困難。在參照了前人的筆記以及程式碼後,我嘗試搞懂Lowe的想法,並儘量把我所遇到的不太好理解的地方重點解釋。尤其是一個經常被提起的問題:
關鍵點帶有的尺度空間、DoG金字塔層數資訊的利用
形象來說,就是
可能重合的關鍵點如何應用在同一張「二維」影象上,儘管我們在demo上看不到任何重合的SIFT向量,以及這樣做的意義是什麼


將在後文解釋。然而對於和本演算法關聯不是那麼大的知識,i.e. 高斯差分空間上極值點對應主曲率較大處,將給出一個模糊而形象的理解,並給出參考文獻,以供有興趣、有需求的朋友查閱。

希望這篇文章能夠幫到各位。

SIFT主要目的

SIFT旨在解決縮放、平移、旋轉變換下的影象匹配問題,同時也可以解決小角度的放射變換和3D投 影,以及部分照明因素、噪聲的影響。

整體思想

Lowe將SIFT分成了四步,其中第一、二步從影象中提取關鍵點的位置 (keypoints),第三步對關鍵 點賦予方向,第四步將關鍵點包含的位置、方向資訊綜合成一個128維向量。 於是,SIFT將影象匹 配問題轉化為向量最短(歐式)距離求解。

STEP 1 尺度空間極值點檢測

關鍵點:對縮放和旋轉變換保持某種性質不變的點
尋找尺度空間中的極值點,即可能的關鍵點

構建 DoG上的尺度空間

圖中每一張平面都是一個經若干次變換得到的平面。 有圖所示,我們最後得到的是一黃(左)一藍(右)代表的兩個金字塔狀圖片層。藍金字塔(DoG)是黃金字塔相鄰層差分得到。
「圖」

下面關注黃金字塔的構建。 首先,左下角就是我們拿到的原圖。 相同大小的圖片成為一個組(octave),每組從下到上依次是1S+3張。 第i張影象由第1張卷積σi=ki1σ的高斯函式產生, 即:

L(x,y,σi)=G(x,y,σi)I(x,y)
其中
G
(x,y,σ)=12πσ2e(x2+y2)/2σ2

下一組的第一張由前一組的倒數第三張做因子為2的降取樣生成。其餘同理。

這樣,我們就定義了DoG上的尺度空間。在此空間上的極值點就是備選的關鍵點了。

選取 DoG和尺度空間的原因

探測在尺度變換下保持不變的位置可以通過尋找在不同尺度下穩定的特徵決定。 這個一系列的尺度就是尺度空間。

高斯變換的理由在於:在一定條件下,尺度空間的核函式只有高斯函式。

對尺度空間做差分的原因:Lindeberg (1994)的研究表明Laplacian of Gaussian (LoG) 運算元可以產生非常穩定的影象特徵。因此理論上應當使用LoG對高斯空間(黃色金字塔)逐層尋找該層中的相對不變的位置,即穩定的特徵。

然而,DoG與LoG十分相似,

σ2G=Gσ(G(x,y,kσ)G(x,y,σ)kσσ)
G(x,y,kσ)G(x,y,σ)(k1)σ22G

而且與LoG相比,DoG要好算得多,所以在SIFT演算法中取高斯差分函式,即:

D(x,y,σ)==(G(x,y,kσ)G(x,y,σ))I(x,y)L(x,y,kσ)L(x,y,σ)
我們取k=2

極值點檢測

我們在得到的DoG上,對每層每個畫素點探查極值,方法如下:

  • 對給定點,將它的值與同層周圍八 個點進行比較
  • 若是最值點(最大/最小),則繼續與其上一層九個點、下一層九個點比較。
  • 若該點是此27個點中最值點,則認為是備選點。

Lowe在文中解釋 ,由於大部分點都不滿足第一條(同層八個點中 最大/最小),所以此演算法可以迅速消除大部分點。

一些引數

下給出Lowe在文中所使用的引數。其值均是通過實驗得出的較優解,故推導過程略。
S=3
σ=1.6
We double the size of the input image using linear interpolation prior to building the rst level of the pyramid.

STEP 2 關鍵點定位

此節將從3.1中的備選點裡選出穩定的點(即為關鍵點)。

插值關鍵點的位置、 篩除低對比度的點

低對比度:在極值點的區域性,函式D(x,y,σ)的值變化不大的點

  1. D(x,y,σ)在每個極值點x處泰勒展開,取到二階項近似
    D(x)=D+(Dx)Tx+12xT2Dx2x
  2. Dx=0的點的偏移量x̂ =2D1x2Dx
  3. 如果偏移量大於0.5,則需要替換極值點的位置為其旁邊的點(因為之前採用了以因子為2的降取樣,所以求出的極值點不夠精準),並再次求偏導。
  4. 丟棄D(x̂ )=D+DTxx̂ <0.03的點,即對比度比較低的點

消除邊緣效應

因為DoG對邊緣非常敏感,然而邊緣上點的位置不好確定,也不穩定,所以要丟棄。

清除的要點:
1. DoG上的極值點有一個特性:D(x,y,σ)在邊緣處的主曲率很大,在垂直方向上比較小。
2. **主曲率和D(x,y,σ)的海瑟矩陣H的特徵值成正比
3. **

Tr(H)2D<