0

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

4

3 回答 3

2

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

编辑:

matcher 的输出是描述符之间的距离向量。距离越小描述符越相似。

于 2012-12-06T09:14:00.587 回答
1

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

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

于 2012-12-07T08:11:32.170 回答
1

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

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

你有一个训练集(学习你的分类器“学习”),你有一个测试集,你可以用它来控制你的系统的结果。如需更详细的帮助,您需要了解有关您的应用程序的更多信息,即要求、示例图像等。

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

于 2012-12-06T08:00:00.713 回答