AR android 应用的 3d 对象识别

3d object recognition for AR android app

我正在尝试开发 AR android 应用程序。
它应该检测并识别相机捕获的物体,我正在为此目的使用OpenCV,但我对AR领域中移动设备的物体识别不是很熟悉。

我有两个问题:

1- 哪个算法更好(在精度和速度的意义上)SIFT、SURF、FAST、ORB 或其他算法?

2-我想知道检测和跟踪的过程是否是这样的:
拍摄相机帧,检测其关键点,计算其描述符,然后将其与数据库中可用的每个图像(描述符垫)进行匹配,以找到它属于哪一个。
我觉得上述步骤的计算量会很大,尤其是如果对每一帧都重复这些步骤以保持跟踪对象。

请提供有关算法的一些详细信息以及最适合我的目标的步骤。
提前致谢

FAST 只是一个检测器,而 SIFT、SURF、ORB 和 BRISK 是检测器和描述符。

你的问题很笼统。

  • SIFT描述子是经典方法,也是“原创” 后来提出的大多数描述符的灵感。缺点 就是数学复杂,计算量大。
  • SURF 检测器被认为是更有效的替代品 筛。它有一个基于 Hessian 的检测器和一个基于分布的 描述符生成器。
  • SIFT 和 SURF 基于梯度直方图。那就是 需要计算补丁中每个像素的梯度。这些 计算花费时间。尽管 SURF 加快了计算速度 使用积分图像,这对某些人来说仍然不够快 申请

SIFT 和 SURF 最准确,但它们受专利保护,必须购买才能使用。

  • FAST 是一个独立的特征检测器,它不是描述符 发电机。它的设计非常高效,适用于 任何复杂性的实时应用程序。
  • BRIEF 描述符是一种轻量级、易于实现的描述符 基于二进制字符串。 BRIEF 描述符针对低功耗 设备,并补偿它的一些鲁棒性和准确性 效率。

二进制描述符是许多现代应用程序的有吸引力的解决方案,尤其是对于计算和内存资源都有限的移动平台。

在我看来,我更喜欢 ORB,因为它是一个基于二进制的描述符。与 BRISK 相比,它需要更少的计算和更少的内存需求。

在最终确定之前,您必须对所有这些可用的描述符进行研究。

我知道这是一个老问题,但我觉得它可以帮助其他人。

有一个很好的教程,它使用 Android、OpenCV 和 OpenGL ES 3.0 通过 Android studio 使用 NDK 构建一个小型 AR 应用程序。 它有很好的解释和一个 Github repo 来检查代码。

http://www.anandmuralidhar.com/blog/android/simple-ar/

它使用 ORB 功能 detect/match 标记在场景中生成 3D 对象。 关于你的第二点,教程可以让你了解这个过程是如何工作的。