我想要做的是跟踪一个标记(相当小的和平纸,上面有图纸)。我只是想知道它是否存在。我一直在研究许多不同的算法,比如寻找轮廓,以防我将标记做成简单的几何形状(从纸上剪下的星星),当然还有更严肃的东西,比如 SIFT 和 SURF。
现在我正在尝试使用 FLANN 进行 SURF,我使用的代码是这个(几乎没有修改): http ://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html
问题是结果真的不好: 我的结果http://img46.imageshack.us/img46/8729/xpu5.jpg
就像除了我的标记外,我与其他所有东西都匹配......即使我用标记得到的少数幸运匹配在两张图像之间也不相同。这是一个大问题,因为我的“现实世界”应用程序将在一个非常“嘈杂”的环境中,有很多物体,而不是在白色统一的背景上,相机有点晃动,所以可能也很模糊。同样,起初我想使用一个比这个小得多的标记(current_size/4)。
所以我的问题是,我怎样才能提高准确性?是否应该制作一个具有更多纹理的更复杂的标记等等(因为我读到 SURF/SIFT 不擅长检测纹理低的物体)?另一个匹配器会产生很大的不同吗?或者我应该使用 SIFT 吗?或者,另一种方法/算法是否更适合标记?知道如果仅在标记完全可见而不只是其一部分时才检测到标记,这将不是问题(这种方式实际上对我来说更方便)。我使用了一些基于标记的 AR,所以我知道这些库很擅长,但我不知道他们使用什么样的算法。在任何情况下,示例代码、链接或只是一个建议将不胜感激。
一些额外的有用信息:我在树莓派(C++ OpenCV,Linux Debian)上运行它,它集成了摄像头板,因此分辨率不是最好的,而且速度很慢(代码运行 1-2 分钟)但它是没问题,我并没有真正瞄准实时(虽然会很好)。对于这个测试,我使用了巨大的图像 (2592x1944),因为我希望结果尽可能好。我应该将分辨率更改为 800x600 吗?由于某些奇怪的原因,这会提高准确性吗?
编辑:根据要求,我的原始图片: http : //img35.imageshack.us/img35/2329/5a93.jpg http://img703.imageshack.us/img703/847/cwg8.jpg
EDIT2:我只是运行蛮力匹配器并得到完全相同的结果,当我说精确时,我的意思是精确。发布屏幕截图将复制我之前的屏幕截图。现在我开始认为是我的图像很糟糕。用更好的相机拍摄参考图像的照片并使用它来匹配另一个(我现在在我的 Pi 上使用的那个)拍摄的图像是否明智?我知道相机参数可以发挥一些作用,因此我的问题。