帶有Lowe s演算法的SURF特徵提取和匹配

2021-10-01 10:57:32 字數 1686 閱讀 1951

直接使用surf提取,匹配的效果還是相當糟糕的,如果我們拿著這樣子的匹配結果去實現影象拼接或者物體追蹤,效果肯定是極差的。所以我們需要進一步篩選匹配點,來獲取優秀的匹配點,這就是所謂的「去粗取精」。這裡我們採用了lowe』s演算法來進一步獲取優秀匹配點。

為了排除因為影象遮擋和背景混亂而產生的無匹配關係的關鍵點,sift的作者lowe提出了比較最近鄰距離與次近鄰距離的sift匹配方式:取一幅影象中的乙個sift關鍵點,並找出其與另一幅影象中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離除以次近的距離得到的比率ratio少於某個閾值t,則接受這一對匹配點。因為對於錯誤匹配,由於特徵空間的高維性,相似的距離可能有大量其他的錯誤匹配,從而它的ratio值比較高。顯然降低這個比例閾值t,sift匹配點數目會減少,但更加穩定,反之亦然。

lowe推薦ratio的閾值為0.8,但作者對大量任意存在尺度、旋轉和亮度變化的兩幅進行匹配,結果表明ratio取值在0. 4~0. 6 之間最佳,小於0. 4的很少有匹配點,大於0. 6的則存在大量錯誤匹配點,所以建議ratio的取值原則如下:

ratio=0. 4:對於準確度要求高的匹配;

ratio=0. 6:對於匹配點數目要求比較多的匹配;

ratio=0. 5:一般情況下。

#include

"highgui/highgui.hpp"

#include

"opencv2/nonfree/nonfree.hpp"

#include

"opencv2/legacy/legacy.hpp"

#include

using

namespace cv;

using

namespace std;

intmain()

} mat first_match;

drawmatches

(//使用函式 drawmatches來繪製檢測到的匹配點

image02, keypoint2,

//第一幅影象及其特徵點

image01, keypoint1,

//第二幅影象及其特徵點

goodmatchepoints,

//匹配結果

first_match)

;//生成的影象

}

輸入影象:

輸出影象:

匹配點明顯減少:由特徵點匹配的效果來看,現在的特徵點匹配應該是非常精準了,因為我們已經把不合格的匹配點統統移除出去了。

帶有Lowe s演算法的SIFT特徵提取和匹配

採用lowe s的演算法選出優秀匹配點。include highgui highgui.hpp include opencv2 nonfree nonfree.hpp include opencv2 legacy legacy.hpp include using namespace cv using...

SURF演算法中的ransac演算法

就是首先隨機抽取觀測資料子集,我們假設視為這子集就是 內點 局內點或者局內資料 然後用這子集進行相關的擬合來計算模型引數 或者估計函式 找到這模型 或者函式 以後,利用觀測點 資料 進行是否正確,如果求出來的模型能夠滿足足夠多的資料,我們視為很正確的資料。最後我們採納。但是,如果不適合,也就是說求出...

帶有限制條件的Dijkstra演算法

dist maxnum 源節點到節點i的dist intc maxnum maxnum i 到 j 的距離 path 存放每一次的路徑 sp nodes p 必經點 必經線段中的點存放 sp edge maxnum maxnum 必經線段 i j 置位true 對sp nodes p進行全排列,對每...