Jav*_*ock 29
在设计时,它的目的是更快,但实际上差异与标准相机的实时应用无关.顺便说一句,FAST探测器更快,实际上非常强大.
我正在为手机上的实时增强现实编程,我们在应用程序执行期间使用SIFT(初始化)和FAST(金字塔FAST进行实时特征检测)的组合.FAST实际上更快,它在OpenCV中实现,所以如果你不想坚持使用SURF试一试.我没有看到最近的实时使用SURF的论文,但我看到了SIFT的修改版本,描述符和其他类型的修改的像素更少,所以看起来SURF是一个很好的想法,没有得到据我所知.无论如何,这只是我的意见.
les*_*mal 16
OpenCV没有最佳的SURF实现速度或稳定性.如果你计算两个写得很好的实现的FLOPS,那么SURF基本上比SIFT更快.SIFT通过使用大型高斯核对图像进行多次卷积来计算图像金字塔,而SURF使用积分图像完成近似.
要查看SURF的几个实现的比较,请在此处查看我的页面:
http://boofcv.org/index.php?title=Performance:SURF
不幸的是,由于跨平台问题,OpenCV拒绝了与舍入相关的补丁.也许这个补丁会被调整并重新提交.在我自己的工作中,我注意到通用round()非常慢,并用自定义函数替换它.
至于Jav_Rock提到的FAST探测器,我只把它作为最后的手段.探测器的稳定性远远低于其他任何东西,但它确实很快.
不进行任何更改,如果在 OPENCV 中应用 SIFT 和 SURF,SIFT 看起来比 SURF 更快,但事实并非如此。为了证明我已经在 393*387 像素的图像上测试了它们。运行相同的特征提取 100 次并获取其平均时间后,结果为
SIFT: 0.0983946(s)
冲浪:0.183372(s)
但关键点的数量有很大差异, SIFT:kpsize = 671 d-row = 671 d-col = 128
SURF:kpsize = 1156 d 行 = 1156 d 列 = 64
SURF 返回的关键点数量几乎是 SIFT 的两倍,因此说 SIFT 比 SURF 更快是不公平的。
当我们使用 Fast 作为检测器然后应用 SIFT、SURF 时:
SIFT: 0.199448(s) SURF: 0.0613682(s)
SIFT:kpsize = 2362 d 行 = 2362 d 列 = 64
SURF:kpsize = 2362 d 行 = 2362 d 列 = 64
在这里,SURF 比 SIFT 快三倍。
请使用SURF 的原始实现进行测试。打开简历比较慢。
比较 SIFT 和 SURF 的原始实现时,您将使用 SURF 获得更快的结果。通过调整参数,您可以提高一个数量级的速度。但是,稳健性可能会受到影响。这一切都取决于您的用例。
一般来说,SURF 和 SIFT 一样健壮。根据数据集,您可能会得到不同的结果,但总的来说,它们在稳健性方面是相同的。
还有一些SURF 的 GPU 实现比我的原始实现快得多。