/*
*@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 即使少...