SURF和SIFT的替代物体跟踪算法用于增强现实。

19

这里询问并尝试了SURF和SIFT两种算法后,它们似乎都不足以快速生成足够的兴趣点来跟踪来自相机的流。

例如,SURF需要大约3秒钟才能为一幅图像生成兴趣点,这对于跟踪来自网络摄像头的视频来说太慢了,而在移动电话上使用它时效果会更差。

我只需要一个能够跟踪特定区域,其大小、倾斜等信息的算法,然后我可以在此基础之上进行构建。

谢谢

7个回答

14
我怀疑你使用SURF算法可能需要一些改变?
这里有一篇麻省理工学院的论文,介绍了如何在移动设备上使用SURF算法进行增强现实应用。链接如下:http://people.csail.mit.edu/kapu/papers/mar_mir08.pdf 摘录如下:
在本节中,我们介绍了SURF算法的实现及其在手机上的适应性。接下来,我们讨论了准确性对最近邻搜索速度的影响,并展示了我们可以通过最小化匹配准确性的影响来实现一个数量级的加速。最后,我们讨论了图像匹配流程在手机上的实现细节。我们研究了手机上的性能、内存使用和带宽消耗。
你可能还想研究OpenCV的算法,因为它们经过了试验和测试。
根据你的应用程序的限制,你可以减少这些算法的通用性,以查找图像中已知的POI和标记。
跟踪POI的一部分是估计它从2D图像中的一个点到另一个点的向量,然后选择性地确认它仍然存在(通过像素特征)。同样的方法可以用于跟踪(而不是重新扫描整个图像)POI和POI组/对象的透视和旋转变化。
有大量的论文在线上,介绍如何在2D投影上跟踪物体(在许多情况下可以达到严重的倾斜)。
祝你好运!

我能想到唯一可能会减慢它速度的是它是用Java编写的这个事实。除此之外,很明显生成兴趣点是耗时的关键。 - Leo Jweda

7

5
我们正在一个项目中使用SURF算法,我们发现OpenSURF在原始速度和性能方面优于OpenCV的SURF实现。虽然我们还没有测试其重复性和准确性,但它的速度要快得多。
更新: 我只是想指出,您不需要在每一帧中执行SURF匹配步骤,您可以简单地在每两帧之间执行它,并在不执行SURF的帧中插值对象的位置。

只是想评论一下,最新版本的OpenCV中,SURF实现已经被重写以利用英特尔线程块。如果您的执行设备具有多个核心,速度提升是不可思议的(比OpenSurf快得多)。 - Diego

3
如果您对要跟踪的区域有更严格的限制,可以使用更简单的算法。正如您所知,ARToolKit非常快,但仅跟踪具有非常明显框架的黑白标记。
如果您想要一个(有点)通用的跟踪器,可以尝试PTAM。该网站(http://www.robots.ox.ac.uk/~gk/PTAM/)目前已关闭,但这里有一个很棒的视频展示它在iPhone上的工作效果(http://www.youtube.com/watch?v=pBI5HwitBX4)。

我之前不知道PTAM,但从视频来看,它看起来非常不错。我想我只能等待它再次上线了。我尝试在Google Code Search中搜索,但是没有结果。 - Leo Jweda

2

正如其他人所提到的,三秒钟似乎异常地长。在测试Mahotas库中的SURF实现时,我发现即使对于一些相当大的图像(例如1024x768),平均需要0.36秒,而且这还是Python和C混合使用的情况,因此我想一些其他纯C实现可能会更快。


mahotas 的作者在这里:实际上,Python 层非常薄。我不会从纯 C 中预期大量速度的提升。 - luispedro

2

2

在受限的嵌入式系统中,我使用的一种选项是使用更简单的兴趣点检测器:例如FAST或Shi-Tomasi。 我选择了Shi-Tomasi,因为我针对的是FPGA,可以轻松以像素速率运行它而无需任何重要的缓冲。

然后使用SURF生成识别到的特征周围图像块的描述符,并将其用于匹配和跟踪目的。


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