在发现OpenCV的强大功能后,我决定使用该库开发我现在正在开发的自然标记跟踪引擎。但我的问题是,我不知道一个适当的方法来实现这样的跟踪器。
我制定了以下计划:
- 使用目标跟踪算法之一(例如SIFT, SURF等)来描述和从实时摄像机馈送中提取关键点。
- 根据提取的关键点转换成直方图,并将直方图与存储标记的直方图进行比较。
- 一旦找到匹配,转换这些位置信息并将其传递给负责渲染3d对象的引擎。
我尝试了SIFT和SURF算法来描述和提取关键点,最终结果是两种算法的fps都非常低(即小于0 fps)。我注意到SIFT和SURF在计算上非常昂贵,它是否适合在实时摄像机馈送上进行此类跟踪?
谢谢。
开发这样的标记需要您对图像处理,3D成像,跟踪等有深入的了解。不像开发一个简单的应用程序。
最好使用已开发的;)
FERNS比SIFT更高效、更简单。你可以用它。它是由EPFL的研究人员开发的。如果你读过AR/跟踪论文,你会发现这些人是行业/领域的领导者。它也在以后的OpenCV版本中实现(我认为在2.1或2.2?)
否则你可以从这里获得该算法的源代码:蕨类植物:平面目标检测
编辑:基本上,像FERNS这样的算法会告诉你位置/旋转等(这是由称为Homography的矩阵表示的变化)某个表面将参考另一个框架。这个Homography是3D渲染所需的一切;)
使用OpenGL或类似的3D库,您可以使用计算的同形图绘制对象。如果你对每一帧重复这个过程,你将得到一个简单的AR应用程序。
理论书籍:图像处理和3D成像
要了解AR,请阅读:ARToolKit paper
关于FERNS: oezuysal'site的更多信息
SIFT是一个很好的算法,但是你不能从中得到最好的速度。有一些方法使用FAST进行检测,然后为检测到的点构建一个简化的SIFT描述符(而不是使用128个值,例如32个)。此外,还开发了用于FAST的金字塔式方法(您有ORB,但其描述符不够好)。
现在OpenCV刚刚发布了FREAK,他们承诺它是最快和强大的,所以我很快就会尝试一下。你可以在OpenCV上看看这种增强现实的教程。
SIFT和SURF是成功的视觉特征,并且可能是正确的方法(尽管存在更快计算的特征)。
SIFT可以在GPU上进行高效的计算。看到siftGPU。