【发布时间】:2014-08-09 13:44:18
【问题描述】:
是否有任何 SIFT 的 C/C++ 实现在 ~2.2GHz 的处理器和 4GB 的 RAM 中实时运行?或者提取 SIFT 特征和约 2000 个关键点的描述符的最低可实现运行时间是多少。 Andrew Vedaldi 的 C++ 实现需要大约 3.5 秒来处理 2000 个关键点。
【问题讨论】:
标签: image-processing data-structures runtime real-time sift
是否有任何 SIFT 的 C/C++ 实现在 ~2.2GHz 的处理器和 4GB 的 RAM 中实时运行?或者提取 SIFT 特征和约 2000 个关键点的描述符的最低可实现运行时间是多少。 Andrew Vedaldi 的 C++ 实现需要大约 3.5 秒来处理 2000 个关键点。
【问题讨论】:
标签: image-processing data-structures runtime real-time sift
您可以使用非常快的 ORB。 或者调整 SIFT/SURF/算法选项。
OpenCV 3.1.0 现在有几种算法,例如 KAZE 和 AKAZE - 后者可能是最好的图像检测器和描述符,因为它通过其(快速显式)扩散尺度空间显示了很好的结果。之前的 SIFT&SURF 已移至“额外”存储库。
尽管如此,您可能想要改进匹配器算法。在这种情况下,请尝试使用 FLANN(也在 3.1.0 中)。
【讨论】:
如上所述,SIFT 不能实时运行。但是,您可以改用二进制描述符,它提供了一种快速替代方案,但准确性和性能稍差。可以在此处找到有关二进制描述符的一系列教程:
简介: http://gilscvblog.wordpress.com/2013/08/26/tutorial-on-binary-descriptors-part-1/
OpenCV 使用示例: http://docs.opencv.org/doc/user_guide/ug_features2d.html
【讨论】:
一般没有。 SIFT 的精确实现即使在现代 PC 上也无法实时运行。 但是在 GPU http://cs.unc.edu/~ccwu/siftgpu/ 上有一个实现。
更快的选择是 SURF,但仍然不是实时的。我只知道在现代手机上实时运行的 DoH 描述符的一种实现,但它不是公开的。
【讨论】: