SIFT特徵檢測與RANSAC過濾

2021-07-09 07:26:55 字數 1663 閱讀 3447

/*

*@function siftdetect.cpp

*@brief 對sift特徵檢測和匹配進行測試,並實現ransac演算法進行過濾錯配點

*@author ltc

*@date 11:20 saturday,28 november,2015

*/#include#include#includeusing namespace std;

using namespace cv;

//ransac演算法

vectorransac(vectormatches,vectorquerykeypoint,vectortrainkeypoint);

int main(int argc,char* argv)

//sift特徵提取

siftfeaturedetector detector;

vectorkeypoint1,keypoint2;

detector.detect(img1,keypoint1);

detector.detect(img2,keypoint2);

//cout<

vector> matches_knn;

matcher.match(des1,des2,matches);

matcher.knnmatch(des1,des2,matches_knn,2);

// cout<

for(int i=0;imatches_ransac=ransac(matches,keypoint1,keypoint2);

mat img_match,img_match_flann;

drawmatches(img1,keypoint1,img2,keypoint2,matches_ransac,img_match);

drawmatches(img1,keypoint1,img2,keypoint2,match_knn,img_match_flann);

imshow("img_match",img_match);

imshow("img_match_flann",img_match_flann);

//for(size_t i=0;iransac(vectormatches,vectorquerykeypoint,vectortrainkeypoint)

{ //定義儲存匹配點對座標

vectorsrcpoints(matches.size()),dstpoints(matches.size());

//儲存從關鍵點中提取到的匹配點對的座標

for(int i=0;iinliersmask(srcpoints.size());

//匹配點對進行ransac過濾

homography = findhomography(srcpoints,dstpoints,cv_ransac,5,inliersmask);

//ransac過濾後的點對匹配資訊

vectormatches_ransac;

//手動的保留ransac過濾後的匹配點對

for(int i=0;i

sift原理:

匹配結果:

RANSAC用於SIFT特徵匹配

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

opencv 特徵點檢測 sift和surf

關於在opecv中使用,sift和surf進行特徵點檢測,主要分為三步 一.新增lib檔案。在opencv新版本中,上述了兩個演算法寫到了non free中,需要新增opencv nonfree244d.lib debug時新增 或opencv nonfree244.lib release時添 加 ...

SIFT特徵匹配

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