3

我遇到了许多 AR 库/SDK/API,它们都是基于标记的,直到我找到这个视频,从描述和评论来看,看起来他正在使用 SIFT 来检测对象并跟踪它。

我需要为 Android 做这件事,所以我需要在纯 Java 中完整实现 SIFT。

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

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

4

6 回答 6

10

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

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

  • 任何增强性能的 SIFT 变体,包括各种不同的算法
  • 我建议研究一下SURF,它非常健壮且速度更快(但仍然是那些可怕的算法之一)
  • Android NDK(我稍后会解释)
  • 很多很多的出版物

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

在开始任何事情之前,请确保您进行了这项研究,因为遗憾的是,在中途意识到图像特征提取算法对于 Android 手机来说太多了。实现这样的算法本身就是一项认真的努力,它可以提供良好的结果并在可接受的时间内运行,更不用说使用它来创建 AR 应用程序了。

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

祝你好运:)

于 2009-08-20T16:13:01.450 回答
3

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

于 2009-09-22T08:20:13.473 回答
2

如果我在你那里,我会研究 SIFT 功能是如何(以及为什么)工作的(如前所述,它的 wikipedia-page 提供了一个很好的 cochise 解释,有关更多详细信息,请查看科学论文(链接到 wikipedia) ),然后构建适合您口味的自己的变体;ie 在性能和 cpu 负载之间具有最佳平衡,这是您的应用程序所需的。

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

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

于 2009-09-11T09:50:02.093 回答
1

我建议您首先查看 OpenCV 库中已经实现的功能,其中包括 SURF、MSER 等:

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

这对于您的应用程序来说可能已经足够了,并且比 SIFT 更快。如上所述,SIFT 已获得专利。

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

于 2010-02-19T10:30:50.590 回答
1

您是否在 Android 端口中尝试过 OpenCV 的 FAST 实现?我已经对其进行了测试,并且运行速度非常快。

您还可以计算检测到的 FAST 关键点周围的简化直方图描述符。我听说过 SIFT 的 3x3 而不是标准的 4x4。如果您使用 NEON 指令对其进行大量优化,则它很有可能实时工作。否则,我会推荐一些快速和简单的方法,比如平方和或绝对差值,用于非常快的关键点周围的补丁。

SIFT 不是灵丹妙药。对于实时视频应用程序,这通常是多余的。

于 2011-03-21T19:37:11.393 回答
0

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

于 2009-08-17T20:11:17.147 回答