SURF/SIFT的开源替代方案

3
我一直在寻找一种高效、旋转不变性和无专利的关键点检测器+描述符提取器组合,但我测试过的所有方法都给我非常糟糕的结果。我尝试使用Brisk和Freak作为这里推荐的方法,但它们对于检测对象给出了相同糟糕的结果。(即:对于错误图像有更多的内点或好匹配点比正确的图像。)
是否有人成功地使用开源组合实现可用的对象检测? 我非常感兴趣,因为我想知道是我没有正确地过滤结果还是生成的数据有问题。
1个回答

4
你提到了已经尝试了FREAK和BRISK,它们都报告了与SIFT和SURF相当的结果。另一个较新的选择是称为KAZE的描述符。
该链接提供了一个开源实现,并旨在成为OpenCV的即将推出的版本之一。

也许是因为我在这方面是个新手,但我觉得结果不可比较,可能是因为:1.使用Surf时,我能够使用FlannBasedMatcher.knnMatch,然后应用比较算法将good_matches与其他匹配分开。最后,通过good_matches().size,我可以相当准确地检测到一个对象。2.使用Freak或Brisk时我无法做到这一点(Flann上的LSHindex存在问题,BruteforceMatcher.knnMatch的结果不同等等)。无论如何,我不确定我的解决问题的方法是否最合适... - Str1101
谢谢您提供链接,一旦我澄清了我的想法,我会尝试一下 :) - Str1101
1
你说得对,对于二进制描述符,你不能使用OpenCV的标准knn架构,因为它们纯粹依赖于浮点值的欧几里得距离,这在比较二进制描述符的上下文中毫无意义。k最近邻算法是一个经过充分研究的算法,有可用的替代实现,可以使用汉明距离作为距离度量。这将为您提供更好的FREAK或BRISK匹配结果。祝你好运! - Chris
谢谢你的建议!我之前没有考虑过使用OpenCV以外的替代方案,因为这可能会带来一些麻烦,但是这值得一试。我已经尝试过这个代码[链接](http://find-object.googlecode.com/svn/trunk/find_object/example/main.cpp),它试图创建一个Flann LSH索引,但我无法使其工作。 - Str1101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接