我正在尝试开发一个AR android应用程序 它应该检测并识别相机捕获的对象,我正在使用OpenCV,但我不熟悉AR领域中移动设备的对象识别。
我有两个问题:
1-哪种算法更好(在精度和速度方面)SIFT,SURF,FAST,ORB或其他什么?
2-我想知道检测和跟踪的过程是否会是这样的:
拍摄相机框架,检测其关键点,计算其描述符,然后将其与数据库中可用的每个图像(描述符垫)匹配,以找出它属于哪个。
我觉得上面提到的步骤计算量很大,特别是如果为每个帧重复这些步骤以继续跟踪对象。
请向我提供有关算法的详细信息以及最符合我目标的步骤 提前致谢
答案 0 :(得分:3)
FAST只是一个探测器,其中SIFT,SURF,ORB和BRISK是探测器和描述符。
你的问题非常普遍。
SIFT和SURF最准确,但它们受专利保护,无需购买即可使用。
二进制描述符是许多现代应用程序的有吸引力的解决方案,特别是对于计算和内存资源有限的移动平台。
在我看来,我更喜欢ORB,因为它是基于二进制的描述符。与BRISK相比,它需要较低的计算量和较少的内存要求。
在最终确定之前,您必须对所有这些可用的描述符进行研究。
答案 1 :(得分:1)
我知道这是一个老问题,但我觉得它能够帮助别人。
有一个很好的教程,使用Android,OpenCV和OpenGL ES 3.0,使用NDK与Android studio一起构建一个小型AR应用程序。 它有很好的解释和Github repo来检查代码。
http://www.anandmuralidhar.com/blog/android/simple-ar/
它使用ORB功能来检测/匹配标记以在场景上生成3D对象。 关于第二点,本教程可以让您了解该过程的工作原理。