特征点匹配---最近邻点比次近邻点
sift特征点直接运用BruteForce方法进行匹配会出现很多错误,因此我们运用最近邻点比次近邻点进行限制,可大大提高特征点匹配的正确率。即:bestmatchBFMatcher matcher(NORM_L2, false);//定义一个匹配对象vector<vector<DMatch>> matches2;//定义一个容器用来装最近邻点和次近邻点vector<DMatc
·
sift特征点直接运用BruteForce方法进行匹配会出现很多错误,因此我们运用最近邻点比次近邻点进行限制,可大大提高特征点匹配的正确率。
即:bestmatch
BFMatcher matcher(NORM_L2, false);//定义一个匹配对象
vector<vector<DMatch>> matches2;//定义一个容器用来装最近邻点和次近邻点
vector<DMatch>matches;//定义一个容器用来装符合条件的点
matcher.match(descriptors1, descriptors2, matches);//进行匹配
const float ratio = 0.7;//将比值设为0.7 可以自己调节
matches.clear();//清空matches
matcher.knnMatch(descriptors1, descriptors2, matches2, 2);//运用knnmatch
for (int n = 0; n < matches2.size(); n++)
{
DMatch& bestmatch = matches2[n][0];
DMatch& bettermatch = matches2[n][1];
if (bestmatch.distance < ratio*bettermatch.distance)//筛选出符合条件的点
{
matches.push_back(bestmatch);//将符合条件的点保存在matches
}
}
cout << "match个数:" << matches.size() << endl;
更多推荐
已为社区贡献2条内容
所有评论(0)