其他分享
首页 > 其他分享> > 如何使用C使用SURF OpenCV找到最佳匹配?

如何使用C使用SURF OpenCV找到最佳匹配?

作者:互联网

我在VS2010中使用OpenCV C进行人脸识别应用.为此,我使用了SURF,BruteForceMatcher.

BFMatcher matcher;
    vector< DMatch > matches;

//match: execute the matcher!
    matcher.match(descriptors1,descriptors2, matches);

我想知道当我调用这个方法时到底发生了什么.
我的手势是“匹配”向量将填充匹配的关键点.

无论如何我可以使用这个“匹配”向量找到好的匹配?
目前,我正在做这样的事情,以获得最小距离和最大距离:

for( int i = 0; i < descriptors1.rows; i++ )
    { 
        double dist = matches[i].distance;
        if( dist < min_dist ) min_dist = dist;
        if( dist > max_dist ) max_dist = dist;
    }

如果我的上述方法是正确的,我如何使用最小距离和最大距离来检查图像是否匹配.

谢谢.

如果有人能为我找到这个,我将不胜感激.
谢谢.

解决方法:

您可以尝试使用knnMatch()方法匹配图像,计算两个最近邻居.对于第一个图像中的每个描述符,第二个图像中将有2个最接近的匹配项.

这些匹配是基于描述符之间距离的两个最佳匹配.如果这些匹配的距离相似,则可能会选择错误的距离.在这种情况下,你应该丢弃那些比赛.你可以通过检查距离比来做到这一点.
如果第一场比赛和第二场比赛之间的距离比率不大于选定的门槛,则应丢弃这些比赛.
之后,您可以进行RANSAC测试,以获得更好的结果.

标签:surf,face-recognition,c,opencv
来源: https://codeday.me/bug/20190831/1779475.html