C++ SURF/SIFT的开源替代方案

C++ SURF/SIFT的开源替代方案,c++,opencv,open-source,ubuntu-12.04,image-recognition,C++,Opencv,Open Source,Ubuntu 12.04,Image Recognition,我一直在寻找一些有效的、尺度/旋转不变性的、无专利的关键点检测器+描述符提取器的组合,但是我测试过的所有组合给我的结果都很差。我试着按照建议使用Brisk和Freak,但它们在检测物体时给了我同样糟糕的结果。(即:错误图像的内联或良好匹配多于正确图像的内联或良好匹配。) 是否有人通过开源组合获得了可用的对象检测? 我非常感兴趣,因为我想知道是我没有正确过滤结果,还是因为生成的数据有问题。您提到您已经尝试了FREAK和BRISK,它们都报告了与SIFT和SURF相当的结果。另一个较新的选项是名为的

我一直在寻找一些有效的、尺度/旋转不变性的、无专利的关键点检测器+描述符提取器的组合,但是我测试过的所有组合给我的结果都很差。我试着按照建议使用Brisk和Freak,但它们在检测物体时给了我同样糟糕的结果。(即:错误图像的内联或良好匹配多于正确图像的内联或良好匹配。)

是否有人通过开源组合获得了可用的对象检测?
我非常感兴趣,因为我想知道是我没有正确过滤结果,还是因为生成的数据有问题。

您提到您已经尝试了FREAK和BRISK,它们都报告了与SIFT和SURF相当的结果。另一个较新的选项是名为的描述符


该链接提供了一个开源实现,它的目标是在即将发布的OpenCV版本中。

可能是因为我是这方面的新手,但我没有发现可比较的结果,可能是因为:1。使用Surf,我可以使用FlannBasedMatcher.knMatch,然后应用比较算法将良好的_匹配与其他匹配分开。最后,使用good_matches().size,我在检测对象时获得了相当好的结果。2.我不能用Freak或Brisk(Flann上的LSHindex问题,BruteforceMatcher.knMatch结果不同,等等…)总之,我不确定我解决问题的方法是否最合适…谢谢链接,一旦我澄清了我的想法,我会尝试一下:)你是对的,你不能使用OpenCV的标准knn体系结构来描述二进制描述符,因为它们完全依赖于带浮点值的欧几里德距离。在比较二进制描述符的上下文中,这是没有意义的。k-最近邻算法是一种经过充分研究的算法,并且可以使用替代实现,使您可以使用汉明距离作为距离度量。这将给你更好的匹配结果与畸形或轻快。祝你好运谢谢你的建议!我没有想过使用OpenCV的任何替代品,因为这可能会产生复杂的情况,但这是值得的,我会尝试这样做。(我已经尝试过的是这段代码,它试图创建一个Flann LSH索引,但我无法让它工作)