【AR技术点】(三)完整的AR效果

开始工作了,留给自己写博客和看书的时间也变少了。
最近半年更新的比较少,但是这个系列还是需要有个完结,不想写的太多,因为说的在前面都已经说过了。

AR在一年前就实现了,但是一直没有写博客来提一下。
这个项目,中间耗时近一年,虽然并不是大部分时间都在做AR实现,但是还是耗费了许多的功夫,最后也终于实现了大致的功能和预期,达到了实时的AR效果。我的毕业论文也是描述了AR过程的实现和优化方法。
由于时间太久远,不太想描述具体的细节,而且前面讲的已经差不多了。
简单贴一下用到的算法和优化方式吧:

  • 编程语言:C++
  • 使用的库和标准:openCv(图像识别和处理)、openGL(3d渲染和绘制)和一些线性矩形的处理库和数学库
  • 特征点识别和描述算法:SURF算法(Speeded Up Robust Features),描述出特征点群
  • 特征点匹配:K为2的KNN算法,即最近邻匹配
  • 特征点群追踪:金字塔Lucas-Kanande光流法作为点群的预测,FAST算法用于SURF算法特征之后的特征点群的追踪和定位,LK通过FAST算法描述出的特征点群算出光流追踪特征点群的移动
  • 单应性矩阵:单应性变换矩阵(Homography),openCv
  • AR-3D模型绘制:openGL的渲染管线
  • … 还有挺多的优化点的,不过一时间想不起来了,想到再补充吧。

这里就再随便贴点最后的效果。

效果

  1. 这整个视频画面是通过openCv拿到视频帧,然后用openGL作为纹理绘制在一个面上的,当识别到图像特征点群,比对之后,首先确认是否匹配到特征图像
    在这里插入图片描述
  2. 若匹配成功,通过KNN筛选出准确的匹配点群,并算出单应性矩阵,根据算出的位置旋转和远近矩阵,通过openGL渲染出3D模型到这个纹理面上,这样就有了远近的效果。
    在这里插入图片描述
  3. 光流金字塔追踪之前通过匹配到的点群算出的矩形框中的点群(加速),对筛选之后的特征点群进行移动跟踪,跟踪完成若剩下的能跟踪到的点群数量还能支持单应性矩阵的生成,则继续重复第二步。
    在这里插入图片描述
    最后帧率大概在15帧以上,效果看起来还是挺不错的。

总结

如此,AR过程完结,挺简单吧。现在看起来真的挺简单的,但是当时做起来是真的非常费劲,因为周围没有任何人做过类似的东西,大多数人都只是对AR的库进行过使用。
所以这些全部都只能靠我自己去寻找方法,比如特征点的识别描述,之前也是想了各种的描述算法——SIFT、SURF、ORB等。最后选择了SURF算法,发现根本不能实现帧同步,卡的像PPT
然后想到并不是每一帧都需要去描述整个视频图像,然后做了图像分块、光流追踪、FAST算法算出简单特征点和SURF算法的尺度不变的特征点进行一一对应、只追踪特征点群描述出来的矩形区域等等等等。
看了上百篇相关的论文,查看了很多相关的博客。最后总算做了出来,没有半途而废。
这个东西有价值吗?没有,因为市面上任何一个商用库都比我流畅和易用。
但是它有意义吗?对我来说,有。
做没有价值但是有意义的事情,是一种浪漫,程序员的浪漫。
最后,感谢我本科做了那么多没价值但是有意义的事情,希望以后也能多做一些这样的事情。

相关博客

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页