如何使用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