ar技术怎么实现 四种AR的实现方式
2017-08-14
导读:我们在实现AR效果时,为了大大减少我们的工程量,我们可以借助一些主流的ARSDK,比如EasyAR,Vuforia,太虚AR等等,当然,作为AR技术的狂热爱好者
我们在实现AR效果时,为了大大减少我们的工程量,我们可以借助一些主流的AR SDK,比如EasyAR ,Vuforia,太虚AR等等,当然,作为AR技术的狂热爱好者,我们的追求远远不止于此。所以了,我今天给大家介绍了几种“底层”实现AR的方式。
Opencv和C++ 实现
大概思路是OpenCV实现对Marker的识别和定位,然后通过OpenGL将虚拟物体叠加到摄像头图像下,实现增强现实。具体思路是:
使用SIFT算法进行识别(特征点的提取并用特征向量对特征点描述,接着当前视图的特征向量与目标对象的特征向量进行匹配)
根据识别出来的原目标和帧图像匹配关系得到变化矩阵,来显示三维物体(使用OpenGL来绘制),实现跟踪。
对于基于标记的AR的Opencv实现,我们常常用到Marker:
黑色边框中是编码信息,白色为1,黑色为0,将每一行作为一个字,那么每个字有5bits。其中,1、3、5位为校验位,2、4位为信息位。接下来用Opencv实现,其具体思路为:
对输入图像帧进行标记检测,灰度化,找到图像中轮廓,检测和解码标记,
估计标记的三维姿态,这里包括提前对摄像机进行相机标定,获取相机内参数和失真系数,根据这个计算出标记的旋转矩阵和平移矩阵,
由相机内参数和标记的旋转矩阵和平移矩阵,用OpenGL进行渲染三维物体。
项目地址:https://github.com/GeekLiB/opencv_iphoneAR
参考资料:
书籍:深入理解OpenCV 实用计算机视觉项目解析
(链接: https://pan.baidu.com/s/1mi0oCmG 密码: erh5)
文章:OpenGL与OpenCV实现增强现实
(链接http://www.tuicool.com/articles/MNJjyam)
Python 实现AR效果
Python是世界上最优雅的语言,目前的计算机视觉项目大都用Python来实现,当然用Python的CV库也可以很轻松的实现AR效果。
用Python来实现AR效果,我们首先运用到两个工具包----PyGame与PyOpenGL。PyGame是非常流行的游戏开发工具包,它可以非常简单的处理显示窗口,输入设备,事件以及其他内容。PyGame是开源的(http://www.pygame.org/)。PyOpenGL是OpenGL图形煸炒的Python绑定接口。并且它也是开源的(http://www.opengl.org/wiki/Getting_started)。在实现的过程中,我们需要获取照相机矩阵并转换到OpenGL格式,并以平面和标记物进行姿态估计,然后在图像中放置虚拟物体。
参考资料:
python计算机视觉:链接: https://pan.baidu.com/s/1geArUUn 密码: fnby
当然,这里也有一个很好的Python AR框架BAR4Py,它是由百晓通客栈×创客项目群着手开发的“增强现实(AR)”的 Python 开发库。
项目地址:https://github.com/GeekLiB/AR-BXT-AR4Python
特点:
基于 OpenCV,以及 Python 的数学库;
跨平台,可拓展,免费、开源;
支持简单的 Mark 标记物以及复杂的图像标记;
使用遗忘队列结构动态更新相机标定;
可以看看他们的测试效果:
AR+SLAM
SLAM主要用于地图重建,在AR中,我们主要运用SLAM算法来获取camera pose(SLAM的结果是基于feature的点云,提前重建后可以remap拿到较好的camera pose)。
在这里,我给大家收集了一些SLAM开发资源与AR-SLAM 项目案例,大家可以下载参考。
SLAM开发资源汇总:https://github.com/GeekLiB/Lee-SLAM-source
PTAM-AR:http://www.robots.ox.ac.uk/~bob/research/research_ptamm.html
OpenCV-Marker-less-AR:https://github.com/takmin/OpenCV-Marker-less-AR
Stereo_SLAM_AR(基于ORB-SLAM):https://github.com/ygx2011/Stereo_SLAM_AR
效果:
opencv-markerless-AR-Mobile:https://github.com/meiroo/opencv-markerless-AR-Mobile
ARToolkit
这是一个老牌的AR工具包,ARToolKit 它是一个C/C++ 语言编写的库。对于开发一个AR程序来说,最困难的部分在于实时的将虚拟图像覆盖到用户视口,并且和真实世界中的对象精确对齐。ARToolKit使用图像技术计算摄像机和标记卡之间的相对位置,从而使程序员能够将他们的虚拟对象覆盖到标记卡上面。ARToolKit 提供的快速和准确的标记跟踪,能够让你快速的开发出许多更新更有趣的AR程序。
目前ARToolkit支持以下系统:
相信大多数开发者学习或开发的第一个AR应用用的就是ARToolkit。ARtoolkit的实现步骤是:程序初始化----抓取一帧进行视频的输入----然后探测标示卡----计算摄像头的转移矩阵----绘制虚拟物体----关闭视频捕捉。