使用SIFT增强现实

我遇到了很多AR库/ SDK / API,所有这些都是基于标记的,直到我发现这个video ,从描述和评论中,看起来他正在使用SIFT来检测对象并跟随它。

我需要为Android做到这一点,所以我需要在纯Java中完全实现SIFT。

我愿意这样做,但我需要先了解SIFT如何用于增强现实。

我可以利用你提供的任何信息。

在我看来,试图为便携式设备实现SIFT是疯狂的。 SIFT是一种图像特征提取算法,包括复杂的数学运算,当然需要大量的计算能力。 SIFT也获得专利。

尽管如此,如果你确实想要完成这项任务,你应该先做一些研究。 您需要检查以下内容:

  • SIFT的任何变体都可以提高性能,包括各种算法
  • 我建议调查SURF ,它非常强大且速度更快(但仍然是那些可怕的算法之一)
  • Android NDK (我稍后会解释)
  • 很多很多的出版物

为何选择Android NDK? 因为通过在Java应用程序使用的C库中实现该算法,您可能会获得更显着的性能提升。

在开始任何事情之前,请确保你做了那项研究,因为半途而废的图像特征提取算法对Android手机来说太过分了。 实现这样一种算法可以提供良好的结果并在可接受的时间内运行,更不用说使用它来创建AR应用程序了。

正如你如何将它用于AR,我猜你在图像上运行算法得到的描述符必须与保存在中央数据库中的数据相匹配。 然后可以向用户显示结果。 从SURF收集的图像的特征应该描述它,例如可以使用那些来识别它。 我在这方面并不是很有经验,但网上总是有资源。 您可能想要从像对象识别这样的通用东西开始。

祝你好运:)

如果我在哪里,我会研究SIFTfunction的工作原理(以及原因)(正如所说,它的维基百科页面提供了一个很好的cochise解释,有关详细信息,请查看科学论文(与维基百科相关) ),然后建立适合自己口味的自己的变种; 即在您的应用程序所需的性能和CPU负载之间具有最佳平衡。

例如,我认为高斯平滑可能会被一些更快速的平滑方式所取代。

此外,当您构建自己的变体时,您与专利没有任何关系(已经有很多变体,如GLOH)。

我已经尝试过用于330Mhz Symbian移动设备的SURF,即使使用所有优化和查找表,它仍然太慢了。 而且SIFT应该更慢。 每个人现在都在使用FAST手机。 无论如何,特征提取不是最大的问题。 通信和清除误报是比较困难的。 快速链接http://svr-www.eng.cam.ac.uk/~er258/work/fast.html

我建议您首先查看已在OpenCV库中实现的function,包括SURF,MSER和其他function:

http://opencv.willowgarage.com/documentation/cpp/feature_detection.html

这可能足以满足您的应用需求,并且比SIFT更快。 如上所述,SIFT获得专利。

此外,首先在移动平台上进行性能测试,只需在每一帧中提取function,这样您就可以了解哪些function可以实时运行。

您是否在Android端口尝试过OpenCV的FAST实现? 我已经测试了它,并且运行得非常快。

您还可以围绕检测到的FAST关键点计算缩减的直方图描述符。 我听说过3×3而不是标准的4×4 SIFT。 如果您使用NEON指令进行大量优化,那么它有可能实时工作。 否则,我会建议一些快速而简单的东西,比如关键点周围的补丁的平方或绝对差异的总和非常快。

SIFT不是灵丹妙药。 对于实时video应用程序,它通常是矫枉过正的。

与往常一样,维基百科是一个很好的起点: http : //en.wikipedia.org/wiki/Scale-invariant_feature_transform ,但请注意,SIFT已获得专利。