2009-08-17 235 views
2

我遇到过许多AR库/ SDK/APIs,它们都是基于标记的,直到我找到this video,从描述和评论中,它看起来像他使用SIFT来检测对象并遵循它。使用SIFT增强现实

我需要做的是为Android,所以我会需要在纯Java的完整实现SIFT的。

我愿意这样做,但我需要知道SIFT如何用于增强现实第一。

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

回答

10

在我看来,想要实现SIFT用于便携式设备是疯狂。 SIFT是一种图像特征提取算法,它包含复杂的数学运算,并且肯定需要大量的计算能力。 SIFT也获得专利。

不过,如果你确实要完成这个任务出去,你首先应该做的相当一些研究。你需要检查的东西,如:

  • SIFT的任何变体增强的性能,其中包括各地不同的算法
  • 我会建议寻找到SURF这是非常强大和更更快(但仍那些可怕的一个算法)
  • Android NDK(以后我会解释)
  • 很多很多的出版物

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

开始什么之前,请确保您做研究事业这将是半路认识到的图像特征提取算法只是太多的Android手机太可惜了。这是一个非常努力的过程,它实现了这样一种算法,可以提供良好的结果并在可接受的时间内运行,更不用说使用它来创建AR应用程序。

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

祝您好运:)的

+0

感谢您的回答。 我开始移植http://user.cs.tu-berlin.de/~nowozin/libsift/(libsift)以Java,但我想我现在需要找到一种替代。 所以我想我将不得不放弃这一点,并找到在Java或C++中的SURF实现(以防我选择使用NDK)。 但是,我的问题是它可以如何用于AR。 – 2009-08-20 20:54:36

+0

为你增加了一些更多的信息:) – alkar 2009-08-21 19:41:54

2

如果我在那里你,我会考虑SIFT特征如何(以及为何)的作品(如前文所述的维基百科页面提供了一个良好的科奇斯的解释,并为更多的细节检查科学论文(链接到维基百科)),然后构建适合自己口味的自己的变体;即在您的应用程序所需的性能和CPU负载之间达到最佳平衡。

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

此外,当你建立你自己的变种,你没有任何与专利(目前已经有很多变种,比如GLOH)。

+0

谢谢,我会给你一个镜头。 – 2009-09-28 16:38:06

2

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

1

我建议你看在OpenCV库已经实现的功能,其中包括SURF,MSER和其他人开始:

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

这可能是足以让你的应用程序并且比SIFT更快。如上所述,SIFT获得专利。

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

1

您是否尝试过在Android端口的OpenCV的执行速度快?我测试过它,它运行得非常快。

您也可以计算所检出的FAST关键点减少直方图描述符。我听说过3x3而不是SIFT的标准4x4。如果您使用NEON指令对其进行大量优化,那么它具有实时工作的良好机会。否则,我会推荐一些快速而简单的方法,例如在非常快速的关键点周围提供补丁的平方或绝对差异。

SIFT也不是万能的。对于实时视频应用程序,通常是矫枉过正。