更多关于SURF的信息

时间:2012-12-06 02:27:48

标签: opencv computer-vision surf

我使用SURF来匹配两张图片。所以我不知道何时判断一张照片与另一张照片相似。可以帮帮我吗?

3 个答案:

答案 0 :(得分:2)

SURF是计算机视觉算法,它有探测器和描述符,它不会告诉你两张图片是否相同。检测器检测兴趣点(IP),描述符将其描述为64位长矢量。您应该同时运行SURF的Detector算法和两个图像上的描述符,并且使用一些匹配算法(bruteforce,flann),您可以说两个图像的X%相似。我建议你尝试ORB或Brief,但它们会产生二元向量。一些有用的文章: here here 您可以找到我的文章“识别视觉标记在手机“第225-228页

编辑:

匹配器的输出是描述符之间距离的向量。距离越小,描述符越相似。

答案 1 :(得分:1)

这取决于您的分类问题中需要多少相似度才能适合某个类别。

在最基本的情况下,您将拥有图像/对象的n维描述向量。然后,您可以将其适合训练集中对象的向量。然后,不同的算法最适合不同的情况。 OpenCV在这里提供不同的可能性。参数还取决于您愿意接受的误报等百分比。

你有一套训练装置(从中学习你的分类学员'学习')你有一套测试装置,你可以用它来控制你的系统结果。 有关更详细的帮助,需要了解有关您的应用程序的更多信息,例如要求,示例图像等。

编辑:示例find_obj.cpp没有决定是否在场景中找到了对象(box.png)(box_in_scene.png)。它只能在场景中找到与盒子上的SURF点最相符的SURF点。这就是为什么还存在错误匹配的点对。如果你想做出决定,如果匹配计为“找到”,你可以这样做,例如通过设置找到的匹配的最大平均距离(DMatch结构的成员),或通过检查一个好的转换矩阵是否可以计算(例如使用findHomography)。这在以下教程中显示:http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html#feature-homography我还建议使用OpenCV的新cpp API,而不是相当复杂的C API,如果可能的话。它可能会降低程序的复杂性,使您更容易专注于应用程序的基本(算法)部分。除了Csabi已经说过,我还建议你看看ORB。

答案 2 :(得分:1)

您应该检查OpenCV的示例文件descriptor_extractor_matcher.cpp。您可以通过将filteredMatches.distance值汇总为比较指标来自定义代码。它是描述符之间的距离(见features2d.hpp)。

此外,如果要匹配两个图像,请使用HSV直方图比较。查看compareHist_Demo.cpp