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所示,真实场景和虚拟场景分布在两端,在这两者之间接近真实环境的是增强现实,接近虚拟场景的是增强虚拟(扩增虚境),而位于中间的部分叫做混合实境。

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

如果从这两个定义来说,Pokemon GO也是可以算一种简单形式的AR游戏,至少给人在感官上的体验是符合AR的。其虽然我知道很多人认为下面这样才叫AR……但是我们还是要有信心的嘛!

这里我表达一下我个人对AR的看法:

不管是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系统核心思路是这样的:

下面以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)。如下图:

  • 2D BarCode(二维码)

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

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

0x05 - 参考资料


【AR实验室】ARToolKit之概述篇的更多相关文章

  1. 【AR实验室】mulberryAR : ORBSLAM2+VVSION

    本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 mulberryAR是我业余时间弄的一个AR引擎,目前主要支持单目视觉SLAM+3D渲染,并且支持iOS端,但是该引 ...

  2. Android核心分析之十六Android电话系统-概述篇

    Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述.我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想 ...

  3. 【AR实验室】mulberryAR:并行提取ORB特征

    本文转载请注明出处 —— polobymulberry-博客园 0x00 - 前言 在[AR实验室]mulberryAR : ORBSLAM2+VVSION末尾提及了iPhone5s真机测试结果,其中 ...

  4. 【AR实验室】ARToolKit之Example篇

    0x00 - 前言 PS : 我突然意识到ARToolKit本质可能就是一个可以实时求解相机内外参的解决方案. 拿到一个新的SDK,90%的人应该都会先跑一下Example.拿到ARToolKit的S ...

  5. 【AR实验室】ARToolKit之制作自己的Marker/NFT

    0x00 - 前言 看过example后,就会想自己动动手,这里改改那里修修.我们先试着添加自己喜欢的marker/nft进行识别. 比如我做了一个法拉利的marker: 还有网上找了一个法拉利log ...

  6. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  7. 掌上快递 APP 项目之概述篇

    概述 学习Android开发也有一段时间了,利用业余时间独立制作的一款快递类APP软件.大概2个多星期吧,自己将其定位为"集快递信息追踪.附近快递点查询. 快递公司投诉功能为一体的便民生活类 ...

  8. 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)

    SDK 开发 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(理念与设计原则篇) 顶级开源项目 Sentry 20.x JS-SDK 设计艺术(开发基础篇) 系列 Snuba:Sentr ...

  9. Proxy --概述篇

    概述: Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前架设 ...

随机推荐

  1. Visual Studio 2010的MSDN帮助文档离线使用

    如果没有在安装vs过程中安装帮助,也可通过Visual Studio帮助菜单中的Manage Help Settings来对帮助进行设置或安装. 可以选择从磁盘安装内容,如果选择从磁盘安装可能会要求提 ...

  2. MIP改造常见问题二十问

    在MIP推出后,我们收到了很多站长的疑问和顾虑.我们将所有疑问和顾虑归纳为以下二十个问题,希望对大家理解 MIP 有帮助. 1.MIP 化后对其他搜索引擎抓取收录以及 SEO 的影响如何? 答:在原页 ...

  3. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  4. spark处理大规模语料库统计词汇

    最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...

  5. jQuery.template.js 简单使用

    之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...

  6. HTML 5 应用程序缓存manifest

    什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏 ...

  7. ESLint的使用笔记

    原文地址:https://csspod.com/getting-started-with-eslint/?utm_source=tuicool&utm_medium=referral 在团队协 ...

  8. JavaScript基础学习-函数及作用域

    函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...

  9. Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

    最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时 ...

  10. 微信官方开源UI库-WeUI

    概述 WeUI是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计,可以令用户的使用感知更加统一.包含button.cell.dialog.toast.article.icon等各式元素 ...