利用SIFT進行特徵匹配

2022-05-31 19:45:10 字數 2474 閱讀 4275

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,y0,σ0

)為檢測到的極值點,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=λ1/λ2

,則邊緣極值點即是r比較大的點,設r閾值為thres,對所有的極值點判斷其r值是否大於thres,若大於則去除。

更簡單的方法是,利用

進行篩選,其中λ1+λ1

=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演算法消除誤匹配點

SIFT特徵匹配

影象特徵分很多種,例如顏色特徵 紋理特徵 形狀特徵 空間關係特徵等。常用的特徵為sift特徵。sift scale invariantfeaturetransform,sift 具有以下特性 1 對平移 旋轉 伸縮 亮度 遮擋和雜訊等具有良好的不變性,對視覺變化 仿射變換也有一定的穩定性。2 即使少...

RANSAC用於SIFT特徵匹配

關於ransac 演算法的基本思想,可從網上搜尋找到,這裡只是ransac用於sift特徵匹配篩選時的一些說明。ransac演算法在sift特徵篩選中的主要流程是 1 從樣本集中隨機抽選乙個ransac樣本,即4個匹配點對 2 根據這4個匹配點對計算變換矩陣m 3 根據樣本集,變換矩陣m,和誤差度量...

opencv 31 SIFT特徵匹配

使用siftfeaturedetector的detect方法檢測特徵存入乙個向量裡 可以使用drawkeypoints在圖中標識出來 使用siftdescriptorextractor的compute方法提取特徵描述符 特徵向量 特徵描述符是乙個矩陣 使用匹配器matcher對描述符進行匹配 匹配結...