【AR】AR 的几种底层实现方式

我们在实现AR效果时,为了大大减少我们的工程量,我们可以借助一些主流的AR SDK,比如EasyAR ,Vuforia,太虚AR等等。

Opencv和C++ 实现

大概思路是OpenCV实现对Marker的识别和定位,然后通过OpenGL将虚拟物体叠加到摄像头图像下,实现增强现实。具体思路是:

  1. 使用SIFT算法进行识别(特征点的提取并用特征向量对特征点描述,接着当前视图的特征向量与目标对象的特征向量进行匹配)

  2. 根据识别出来的原目标和帧图像匹配关系得到变化矩阵,来显示三维物体(使用OpenGL来绘制),实现跟踪。

对于基于标记的AR的Opencv实现,我们常常用到Marker:

【AR】AR 的几种底层实现方式_第1张图片

黑色边框中是编码信息,白色为1,黑色为0,将每一行作为一个字,那么每个字有5bits。其中,1、3、5位为校验位,2、4位为信息位。接下来用Opencv实现,其具体思路为:

  1. 对输入图像帧进行标记检测,灰度化,找到图像中轮廓,检测和解码标记,

  2. 估计标记的三维姿态,这里包括提前对摄像机进行相机标定,获取相机内参数和失真系数,根据这个计算出标记的旋转矩阵和平移矩阵,

  3. 由相机内参数和标记的旋转矩阵和平移矩阵,用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】AR 的几种底层实现方式_第2张图片

【AR】AR 的几种底层实现方式_第3张图片

【AR】AR 的几种底层实现方式_第4张图片

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

【AR】AR 的几种底层实现方式_第5张图片

【AR】AR 的几种底层实现方式_第6张图片

【AR】AR 的几种底层实现方式_第7张图片

OpenCV-Marker-less-AR:https://github.com/takmin/OpenCV-Marker-less-AR

Stereo_SLAM_AR(基于ORB-SLAM):https://github.com/ygx2011/Stereo_SLAM_AR

效果:

【AR】AR 的几种底层实现方式_第8张图片

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的实现步骤是:程序初始化----抓取一帧进行视频的输入----然后探测标示卡----计算摄像头的转移矩阵----绘制虚拟物体----关闭视频捕捉。

【AR】AR 的几种底层实现方式_第9张图片

ARToolkit官网:http://artoolkit.org/

ARTooklit优秀文章:http://www.cnblogs.com/polobymulberry/p/5905680.html

   文章中说到,我们实现AR时,可以借助sdk来实现AR,也可以用Opencv和C++ 和ARTooklit和python实现。

转载来自:https://www.sohu.com/a/130629542_335284

你可能感兴趣的:(AR)