我从 OpenCV 教程页面复制了Feature Matching with FLANN的代码,并进行了以下更改:
- 我使用了 SIFT 功能,而不是 SURF;
我修改了“匹配良好”的检查。代替
if( matches[i].distance < 2*min_dist )
我用了
if( matches[i].distance <= 2*min_dist )
否则,在将图像与其自身进行比较时,我会得到零匹配。
绘制关键点的修改参数:
drawMatches( img1, k1, img2, k2, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector<char>(), DrawMatchesFlags::DEFAULT);
我从INRIA-Holidays dataset的 Ireland 文件夹中的所有图像中提取了 SIFT 。然后我将每个图像与所有其他图像进行比较并绘制匹配项。
但是,我在过去使用的任何其他 SIFT/Matcher 实现中从未遇到过一个奇怪的问题:
- 我与自己匹配的图像的匹配很好。除了一些关键点之外,每个关键点都映射到自身。见上图。
- 当我将 I 与另一个图像 J 匹配时(J 不等于 I),许多点被映射到同一个图像上。下面是一些示例。
有没有人使用 OpenCV 教程中的相同代码并且可以报告与我不同的体验?