是否有在GPU上实现的、具有尺度/旋转不变性的检测器?

8
在OpenCV 2.4.9.0中,这些特征检测器包括:SIFT、SURF、BRISK、FREAK、STAR、FAST、ORB。 所有这些都在CPU上实现,但只有FASTORB在GPU上实现。http://docs.opencv.org/genindex.html 众所周知,有些是尺度/旋转不变的,但有些则不是: 是否有任何快速替代SURF和SIFT进行尺度不变特征提取的方法? 这些是尺度不变和旋转不变的:
  • SIFT
  • SURF
  • BRISK
  • FREAK
  • STAR
但这些不是尺度不变和旋转不变的:
  • FAST
  • ORB
是否有在GPU上实现并且具有尺度/旋转不变性的检测器?
或者将在OpenCV 3.0中添加到GPU或OpenCL中吗?

1
你看过它了吗?(它已经有OCL版本了)?http://docs.opencv.org/modules/nonfree/doc/feature_detection.html#gpu-surf-gpu - Kornel
@Kornel 谢谢!我没有看到这个,错过了。很遗憾没有 FREAK/BRISK。 - Alex
1
也许你可以尝试使用AKAZE。另外在3.0版本中,你不需要使用ocl版本的surf。它已经是默认的了 - 参见此链接 https://github.com/Itseez/opencv_contrib/blob/master/modules/xfeatures2d/src/surf.cpp#L895。但要使用`UMat`。 - kiranpradeep
@Kiran 谢谢。是的,看起来是真的 - 在OpenCV 3.0中,SURF有3个版本:CPU、CUDA和OCL(如果可以的话,默认情况下会尝试使用)。而AKAZE似乎比ORB更有效率:http://docs.opencv.org/trunk/doc/tutorials/features2d/akaze_tracking/akaze_tracking.html 但我没有找到任何关于在GPU(OCL/CUDA)上实现AKAZE的信息。 - Alex
2个回答

8

实际上,SURF是OpenCV中唯一具有GPU支持的尺度/旋转不变特征检测器。

在OpenCV 3.0中,FASTORB已经获得了OCL支持,而且这两个(FASTORB)已经获得了CUDA支持。

SURF的OCL/CUDA支持已经在您问题的评论中提到,但这只是对OpenCV的贡献,这就是OpenCV开发人员关于opencv_contrib的看法:

新模块的API通常不稳定,也没有经过充分测试。因此,它们不应作为官方OpenCV发行版的一部分发布,因为该库维护二进制兼容性,并尝试提供良好的性能和稳定性。
根据我的以往经验,OpenCV实现的SURF特征比OpenSURF要弱得多。尝试使用它或找到其他开源实现可能是合理的选择。
附:据我所知,仍然没有KAZE/AKAZE的GPU加速版本。

4

我最近和几位同事一起使用CUDA实现了AKAZE。如果你熟悉原始库,那么使用它应该没有问题,因为我们尊重了API。你可以在这里找到当前版本:

https://github.com/nbergst/akaze


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