【AR实验室】ARToolKit之概述篇

0x00 - 前言


我从去年就开始对AR(Augmented Reality)技术比较关注,可是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual Reality)火爆。至于MR(Mixed Reality)更像是Google Glass事情以后对AR的洗白。可是今年AR行业出了件大事,没错,别左右看了,说的就是你 —— Pokemon GO。暂且不讨论这款游戏是否是AR游戏,毕竟争议挺大,可是这款游戏着实是让AR火了一把。AR应用开发貌似也有了燎原之势。算法

0x01 - AR技术定义


目前对AR技术的常见理解就是CV(Computer Vision)+CG(Computer Graphic)。CV的方法不少,简单些好比FREAK+ICP(ARToolKit中的NFT),复杂些就是SLAM(Magic Leap)。CG就没什么好说的,利用CV算法获取到的图形相关信息(好比CG中的模型矩阵、视图矩阵、投影矩阵)进行绘制。从这一点上来讲Pokemon GO确实不能算做AR游戏,毕竟人家只是基于LBS的。性能

知乎上有一个话题 - 我想给你们说下AR的昨天今天明天能够吗?欢迎一块儿讨论 关于将来的AR形态?里面提到了AR两种被普遍接受的定义:学习

1. 一种是Paul Milgram和Fumio Kishino于1994年定义的“现实-虚拟连续体”。他们描述了从真实环境到虚拟环境的连续体。如图1-2所示,真实场景和虚拟场景分布在两端,在这二者之间接近真实环境的是加强现实,接近虚拟场景的是加强虚拟(扩增虚境),而位于中间的部分叫作混合实境。spa

AR定义

2. 另一种定义是1997年北卡大学的Ronald Azuma提出的加强现实的定义。他认为加强现实技术应具备三个具体特征:三维注册、虚实融合以及实时交互。
做者:AR学院归海
连接:https://www.zhihu.com/question/33214635/answer/56058935
来源:知乎
著做权归做者全部,转载请联系做者得到受权。
视频

若是从这两个定义来讲,Pokemon GO也是能够算一种简单形式的AR游戏,至少给人在感官上的体验是符合AR的。其虽然我知道不少人认为下面这样才叫AR……可是咱们仍是要有信心的嘛!对象

口袋妖怪概念图

这里我表达一下我我的对AR的见解:blog

不论是vision based仍是LBS,AR在技术上的目标其实就是创建一个和现实场景1:1的虚拟世界。从CG的角度,AR最关键的技术点是创建一个相机坐标系,并能获取到现实场景中相应的模型信息(网格、位姿、材质等等)。那么vision based的方法目前能够作到对于已经注册过的识别对象,是能够获取到它在相机坐标系中的位姿信息。而LBS的方法更符合通常CG开发的流程,首先利用GPS创建一个世界坐标系,就能够获取到每一个物体在世界坐标系的位置(包括相机),这样你就能够将这些物体转化到相机坐标系中,思路差很少是这样,只是精度上存在必定问题。目前给AR下一个精准的定义还太早,我认为用户感官上以为是虚实融合就能够算是AR。游戏

0x02 - AR技术现状


虽然上面提到了不少次Pokemon GO,可是LBS的AR系统并非我想研究的重点,毕竟从目前来看vision based的AR系统才是主流。可是局限于我我的的见识,只使用过Vuforia、EasyAR、ARToolKit。你们有兴趣的话,能够看一下知乎上的讨论 - 有哪些比较优秀的AR开源项目,或者SDK?图片

Vuforia没得说,商业SDK,支持的特性也比较多,好像能够支持3D Object Tracking,具体支持到什么程度,尚未尝试,你们感兴趣能够登陆Vuforia官网。EasyAR是国内的一款SDK,AR识别性能仍是要赞一个,你们能够去看EasyAR官网视频,仍是很真实地反映了其性能(不像Magic Leap以前那个鲸鱼的视频),我的仍是很看好的,比起Vuforia最大优点是无偿使用时不须要水印(^_^;)。而ARToolKit相对上述两个SDK在识别性能和特性上表现的不是很突出,可是ARToolKit胜在开源,若是你须要作一些AR业务扩展,而Vuforia和EasyAR不能知足你,ARToolKit是一个很好的选择。并且AR其中一个趋势就是集成到现有App中,那么使用Vuforia和EasyAR的代价就比较大了。另外做为一个学生,抱着研究学习的心态,ARToolKit就再合适不过了。开发

因此后期我仍是专一于ARToolKit的研究上,据说今年秋天ARToolKit6将发布,仍是很期待的,ARToolKit官网连接请戳

0x03 - ARToolKit概述


ARToolKit系统核心思路是这样的:

ARToolKit简化流程图

下面以NFT(天然图片追踪,Natural Feature Tracking)为例,简述AR实现流程

1. 经过相机校准(标定),获取到由于相机制造工艺误差而形成的畸变参数,也就是相机内参(intrinsic matrix),来复原相机模型的3D空间到2D空间的一一对应关系。这对后面的特征提取步骤有很大做用。

2. 根据相机自己的硬件参数,咱们能够计算出相应的投影矩阵(Projection Matrix)。

3. 对待识别的天然图片(也就是任意的一张二维图片)进行特征提取,获取到一组特征点{P1}。

4. 实时对相机获取到的图像进行特征提取,也是一组特征点{P2}。

5. 使用ICP(Iterative Closest Point)算法来迭代求解这两组特征点的RT矩阵(Rotation&Translation),即Pose矩阵,也就是图形学中常说的模型视图矩阵(Model View Matrix)。

6. 有了MVP矩阵(Model View Projection),就能够进行图形绘制了。

0x04 - ARToolKit支持特性


目前来讲,ARToolKit支持天然图片/Marker/2D BarCode的识别。

  • 天然图片处理

这个应用比较普遍,对用户的限制也会小不少。不过最好使用一些特征比较明显的图像,效果会更好。

  • Marker/MultiMarker

这是一种通过特殊处理的图像,须要在边缘包裹两层,最外侧是包裹了白色/浅色边缘,内侧是包裹了黑色边缘,你们猜也能猜出来这样作主要是提升识别度,同时也方便计算Pose(由于能够直接提取边缘来计算Pose)。以下图:

hiro_marker

  • 2D BarCode(二维码)

这个没什么好说的,最多见的。

另外ARToolKit目前支持的渲染引擎是OSG(OpenSceneGraph),不过版本比较低。固然,你也可使用OpenGL ES进行绘制。毕竟咱们只须要获取到了MVP矩阵,理论上绘制部分是能够彻底分开的。

0x05 - 参考资料


相关文章
相关标签/搜索