有没有比SURF和SIFT更快的替代方法进行尺度不变特征提取?

33

SURF是有专利保护的,SIFT也是如此。ORB和BRIEF没有专利保护,但它们的特征不具有尺度不变性,在复杂场景中的实用性受到了严重限制。

是否有任何可以像SURF一样快速提取尺度不变特征,并且没有像SURF和SIFT那样受到严格专利保护的特征提取器呢?


也在dsp上提问了。 - Maurits
7个回答

32
尽管您已经选择了BRISK,但您可能会发现FREAK很有趣。作者声称其结果比BRISK和ORB更好。我还应该补充一点,ORB尺度不变的,但在那个领域存在一些问题。因此,我仍然建议某人尝试它。 FREAK源代码与OpenCV兼容(它们合并起来有多容易我不知道),作者正在努力将其提交给OpenCV项目。 编辑: FREAK现在是OpenCV特征检测器/描述符的一部分。

可以在这里阅读更多内容,了解几种特征检测器/提取器之间的区别,以及一系列基准测试,其中包括FREAK和其他流行的算法。


对我来说,Brisk检测器与Freak描述符的组合是能够提供最佳结果的。 - Jean-Philippe Jodoin
1
https://github.com/kikohs/freak/blob/master/demo/freak_demo.cpp 的链接已损坏,请修复。 - Alex Bezuglyi

14

FREAK是被认为是最快的尺度和旋转不变性描述符提取器,它是开源的,并且你可以轻松地使用它,因为它已经在OpenCV中实现了。你需要一个使用汉明距离的二进制匹配器,例如BruteForceMatcher。

这里有一个示例,展示如何使用它,可以很容易地用SIFT描述符进行替换。


6
似乎您提供的示例链接已经失效了 :( - Rick Smith

9

最终我使用了Brisk,它是一种特征检测器,性能可与SURF相媲美,但采用BSD许可证。此外,它还有一个非常好的开源C++实现,可以轻松地插入到OpenCV FeatureDetector框架中,所以在代码中选择使用Brisk而不是SURF只需要2行代码。


太好了。我看到了这篇论文,但是没有找到实现方法。感谢您的回复。 - KobeJohn

6
您可以尝试使用多尺度梯度直方图技术进行处理,具体内容可参考此链接:multi-scale histogram of oriented gradients。虽然该方法不能完全保证尺度不变性,但如果您的数据受到一定范围内的尺度限制(在实践中通常是这样)则该方法可能适用于您。
另一种方法取决于您的应用场景,即利用poselets,即使它们是基于非尺度不变描述符(如简单的梯度直方图或外观模型)构建的。如果您的训练数据中包含不同尺度的各种物品示例以进行检测,则Poselets中用于训练的Procrustes-style距离应该能够处理很多尺度不变性。但是,如果您的主要应用不是部件的局部化检测,则可能不太令人满意。
顺便说一下,我认为SIFT和SURF被以这种方式申请专利是相当不幸的,因为它们(至少部分)是通过拨款由纳税人资助的。

1
你是否有一个非私密链接,指向多尺度HoG信息,以供那些没有IEEE订阅的人使用? - fish2000

4
你可以尝试KAZE,它应该更快、更精确(视频看起来很棒,但我自己还没有尝试过)。也有一个加速版本可用。
Pablo F. Alcantarilla、Adrien Bartoli和Andrew J. Davison,《KAZE特征》,欧洲计算机视觉大会(ECCV)。意大利佛罗伦萨。2012年10月。
Pablo F. Alcantarilla、Jesús Nuevo和Adrien Bartoli,《非线性尺度空间中加速特征的快速显式扩散》,英国机器视觉大会(BMVC)。英国布里斯托尔。2013年9月。
源代码、视频等详细信息可在作者网站上找到。
*佛罗伦萨

我在一个应用程序中比较了AKAZE、SURF和SIFT,我可以确认在我的测试中,它至少和它们中的任何一个一样好,并且描述符比它们快得多。此外,它也不受专利的限制,所以我建议首选AKAZE。 - oarfish

3

FREAK现在已经包含在OpenCV 2.4.2中,您可以轻松使用它 :-)


-1
检测地标点并通过在地标点周围形成补丁来查找 hog 特征(它没有被专利保护)。

1
你好,欢迎来到SO,并感谢您的贡献尝试。然而,如果问题已经有一个高赞、详细且被接受的答案,像这里一样,那么添加一个没有任何细节的单行回答就没有太多意义了。 - Peter B

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