我使用SURF来匹配两个图像。所以我不知道何时判断一张图片与另一张相似。请帮帮我好吗?
3 回答
您应该检查 OpenCV 的示例文件descriptor_extractor_matcher.cpp。您可以通过将值汇总filteredMatches.distance
为比较指标来自定义代码。它是描述符之间的距离(参见features2d.hpp)。
此外,如果要匹配两个图像,请使用 HSV 直方图比较。检查compareHist_Demo.cpp
这取决于需要多少相似度才能适合您的分类问题中的一个类别。
在最基本的情况下,您将拥有图像/对象的 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。