如何找到最好的匹配使用SURF OpenCV使用c++
How to find the best match using SURF OpenCV using C++?
我使用OpenCV c++,在VS2010中用于人脸识别应用程序。为此,我使用了SURF, BruteForceMatcher。
BFMatcher matcher;
vector< DMatch > matches;
//match: execute the matcher!
matcher.match(descriptors1,descriptors2, matches);
我想知道当我调用这个方法时到底发生了什么。我的手势是"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特征倾向于使用快速近似近邻搜索进行匹配。在openv网站上有一个使用它的教程。
相关文章:
- 在 OpenCV 中计算 SURF 功能之间的距离
- OPENCV 3.2.0无法访问Xfeatures2d中的Surf/Sift
- opencv 3.1.0中使用SURF时出错
- OpenCV-SURF功能问题
- 未实现 OpenCV SURF 函数
- 我如何在带有OpenCV的iOS上执行此EmguCV C#代码(使用SURF)
- OpenCV 在 SURF 检测后崩溃
- 如何使用OpenCV为图像中的所有点计算SURF点
- 如何在opencv中使用surf算法在源图像中找到模板图像的确切角
- OpenCV GPU SURF ROI error?
- 如何找到最好的匹配使用SURF OpenCV使用c++
- 错误cv::SURF::SURF(double,int,int,bool,bool)在OpenCV和c++中实现SURF
- OpenCV:如何使用mask参数进行特征点检测(SURF)
- OpenCV C++ 'Access Violation' with SURF
- openCV SURF error
- OpenCV SURF -获得两个图像之间的旋转角度
- OpenCV SURF extractor.compute error
- OpenCV SURF:两个特性之间的代价函数
- C++ OpenCV SURF vs SurfFeatureDetector vs SurfDescriptorExtr
- SURF opencv的描述符计算