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對描述符進行匹配 匹配結...