利用SIFT進行特征匹配


 SIFT算法是一種基於尺度空間的算法。利用SIFT提取出的特征點對旋轉、尺度變化、亮度變化具有不變性,對視角變化、仿射變換、噪聲也有一定的穩定性。

SIFT實現特征的匹配主要包括四個步驟:

  • 提取特征點
  • 計算關特征點的描述子
  • 利用描述子的相似程度對特征點進行匹配
  • 消除誤匹配點

 

1、 提取特征點

構建尺度空間:模擬圖像的多尺度特征。經證實,唯一可能的尺度空間核是高斯函數。用L(x,y,σ)表示一幅圖像的尺度空間,由可變尺度的高斯函數G(x,y,σ)和圖像卷積產生,即,其中(x,y)表示圖像上的點,σ是尺度因子。

 

高斯金字塔:

  • 將圖像與不同σ的高斯函數做卷積
  • 對圖像進行降采樣

第一階的第一層是原始圖像,同一階中相鄰兩層的尺度因子比例為k,其它層依次類推。

第二階第一層的尺度因子來自於第一階中間層的尺度因子。

 

DOG金字塔

Laplace算子:具有旋轉不變性(證明參考)。

LOG算子:將Laplace算子與高斯函數相結合,

為了簡化LOG的計算,提出了DOG算子即高斯差分函數:

所以, 而

所以

根據上面可知,高斯差分算子只是比LOG算子多了一個系數(k-1),並不影響特征點的求解。

 

所以DOG函數如下:

DOG金字塔通過高斯金字塔相鄰尺度空間函數相減得到,第一層的尺度因子與高斯金字塔第一層的尺度因子一致。

 

 

檢測極值點,初步確定特征點

該步驟檢測DOG空間的最大最小值,需要對DOG尺度空間的每個像素點(除去最頂層最底層)與其周圍26個像素點(如下圖,同層相鄰8個,上一層9個,下一層9個)進行比較。若結果是該像素點比其周圍26個像素點值都大或都小,則初步判斷為局部極值點,記下其位置和尺度因子。若結果是該像素點比其周圍26個像素點值都大或都小,則初步判斷為局部極值點,記下其位置和尺度因子。

 

對上一步得到的特征點進行篩選,去除低對比度及邊緣的點。

 

精確定位極值點:

我們找的極值點屬於離散空間上的點,不一定是真正極值點,需要一條曲線進行擬合。

A(x0,y00)為檢測到的極值點,B(x,y,σ)為真正的極值點,在A附近應用泰勒展開公式:

D對x求導,令其為0得:

帶入上式得:

若上式求出的中|Δx|或|Δy|或|Δσ|中有一個>0.5,表示該插值點偏離了插值中心,

    令x=x+round(Δx)

        y=y+round(Δy)

        σ=σ+round(Δσ)

繼續插值直到達到最大迭代次數或|Δx|、|Δy|、|Δσ|均<0.5。

對得到的極值點B計算D(B)進行低對比度篩選。

 

消除邊緣效應:

目的是消除邊緣極值點。邊緣極值點滿足的條件是:一個方向上變化率非常小,另一個方向上變化率較大(如在黑板上畫一條水平線,則水平方向灰度值變化率非常小,垂直方向變化率大,且主曲率與黑塞矩陣的特征值成正比)。根據這一性質,求出黑塞矩陣,設H的特征值為λ1、λ2,其中較大的是λ1。令r=λ12,則邊緣極值點即是r比較大的點,設r閾值為thres,對所有的極值點判斷其r值是否大於thres,若大於則去除。

更簡單的方法是,利用進行篩選,其中λ11=tr(H),λ1λ2=|H|

 

尋找特征點主方向:

對於任一像素點(x,y),

其梯度值:

梯度方向:

對於每個特征點,統計以其為中心的鄰域內的像素梯度方向,用直方圖表示統計結果,直方圖的峰值就是該特征點的主方向。

 

2、特征點描述子:

以特征點x為中心畫圓鄰域,將該鄰域划分成16個子區域。每為一個單位,那么總共有8個刻度,統計每個子區域內8個刻度值,如下圖

則用16x8=128維矢量作為該特征點的描述子。

 

3、特征匹配:

分別提取圖像1、圖像2的特征點並計算描述子。對圖像1的每個特征點f,在圖像2中找到距離其最近的兩個特征點k1、k2,並計算f與k1、f與k2之間夾角θ1、θ2,

,則為一對匹配點。

 

4、消除誤匹配點:使用RANSAC算法消除誤匹配點

  •  隨機找到8個特征點對,使用八點法計算基礎矩陣F
  • F驗算剩余特征點對,計算用F驗算成功的點對數n
  • 重復一定次數,找到使n達到最大值的F,不滿足F的特征點對刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM