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;

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐