AR与VR都是计算视觉产业体系的核心技术。但AR 与 VR 相比,人们普遍认为前者的前景更加广阔,更有预测称,到2020年,AR的市场规模会比VR大一倍。但是,由于AR 多了与真实世界相互融合这一个步骤,因此实现难度也比 VR 大得多。下文中,我们对目前业内应用的AR实现方式做了较完善的盘点,包括专业级别的七种主流AR光学方案,以及针对狂热科技爱好者的四种底层AR实现方式。帮助大家了解AR是如何实现虚拟世界和现实世界的交互融合的。
七种AR光学方案及优缺点
1、直接投影或离轴反射
这种技术类似于投影仪,可以将影像直接投影到眼镜上,比如 Glass Up,就是在右侧镜腿上安装了一个微型投影仪,并将镜片作为反射镜,会在镜片上投射一个大小为 320×240 的区域,通过反射以后形成平行光进入人眼成像。这种方案虽无法像手机或平板电脑一样进行多任务处理,但应付一些文字信息和简单图表足够。Meta 眼镜也采用了类似技术——离轴反射镜,与标准抛物反射镜的不同之处在于,它可在特定角度下直射并聚焦入射平行光,且支持无限远焦点,造型极其紧凑的投影仪藏在镜框内,左右各有一个,由 LED 光源将半透式 LCD 上的影像投射到分光镜片上成像,从而提供了立体视觉。
2、棱镜光学
如图,最简单的就是 45 度角棱镜,把显示器产生的光从眼镜框反射进人眼,也同时让现实世界的光透进来。这样做简单便宜,众所周知的 Google Glass 便是采用了这种方案。但由于技术限制,连 Google Glass 的缺点也很明显,视场角仅 20°左右(棱镜方式要想做大 FOV 只能做得更厚),光线需要先后经过半反半透膜层两次,光能利用率低(约为 20%),导致画面较暗。受限于制造工艺,镜片厚,提供面积大的镜片成本高、良率低。
3、自由曲面棱镜式
自由曲面指表面形状不能被连续加工的,具有传统加工成型的任意性特点的曲面,其设计难度远远高于前两类。一般情况下它的形态是一个楔形的玻璃,这种曲面是非旋转对称的 XY 多项式自由曲面。在这种结构中,光线经过该棱镜的变换,形成虚拟放大的图像,自由曲面全反射的出射面和自由曲面的反射面能消除色差和畸变等像差,因此成像质量更加清晰,视角可以达到 54 度,采用双自由曲面棱镜视角可以进一步提高。缺陷就是,体积较大,厚度约在 7-10mm。
4、光波导+全息技术
波导能够在 3mm 以内的玻璃上,实现 30-40°的视场角。它会低于一般近视眼镜的厚度,非常轻薄,因此可以和普通眼镜结合。不过,它的设计难度也是最大的。该技术的基本原理是光的全反射和衍射。如图,全息波导头盔显示系统主要由微显示器、全息光栅和平板波导组成。图像经过微型准直透镜后变成平行光进入光波导到达第一个全息光栅,由于全息光栅的衍射效应使平行光改变传输方向从而满足全反射条件并沿波导方向向前无损传播。当平行光传播到第二个全息光栅时,全反射条件被破坏从而使平行光从全息波导出射,并进入人眼成像。由于全息波导的存在,光学图像可以垂直偏转传播。这不但减小了传播距离,还可保持光学系统的重心在头部以内。同时减少了折镜的使用,从而有利于光学系统的简洁化和轻小型设计。不过,该技术智能实现单色显示,想要实现彩色效果必须采用 3 层镜片,分别投射红、绿、蓝三原光,利用不同光线的融合形成彩色。目前,HoloLens 便是采用这种方案。
5、光波导+反射技术
全息光栅方案,由于衍射效应会造成色散和图像模糊。所以,以色列公司 Lumus 用到了一种 Light-guide Optical Element(LOE)器件,这种器件使用的并非全息光栅,而是更加简单的多反射层结构,如图所示。LOE 器件的原理和潜望镜类似,但是使用了多个反射镜扩展出瞳。每个反射镜反射的都是平行光,这些反射镜成同一像。其中 Lumus 的代表性产品 PD-18 分辨率为 800×600,视场角为 26°×20°,出瞳为 10mm,出瞳距为 23mm。器件厚度为 2.3mm,重量小于 70g,亮度为 1200fL,显示区透过率为 70%,其余区域透过率为 92%。
6、光场技术
光场技术作为近眼 3D 的另外一大技术路线,其代表者就是 Magic Leap。该技术最大的好处就是可以允许用户自由对焦,看远看近不至于产生传统照片或视频那样的模糊感觉。这种方法的技术核心是光导纤维投影仪(Fiber Optic Projector),基于激光在光导纤维中传播后从纤维的端口射出时输出方向和纤维相切的原理,Magic Leap 通过改变纤维在三维空间中的形状,特别是改变纤维端口处的切方向,控制激光射出的方向,直接投射到视网膜。
7、视频叠加技术
上述几种方案相对较难,视频叠加技术则可以更简单地实现 AR 效果。视频叠加技术直接利用摄像头取代透镜观察真实世界,并将虚拟事物叠加在摄像头所拍摄的场景中。该方法避免了光学设计上的难题,并且可以增强人的视觉感知能力,比如通过使用红外线摄像头,可以看见红外光谱的景象。不过,它也带来了另一个难题,那就是数据运算量极高,这个问题亟待解决。
四种“底层”AR实现方式
如果说上面的是专业技术解决方案,那么下面我们要介绍的就是专为AR技术爱好者准备的“业余”方案。
1、Opencv和C++
大致原理是OpenCV实现对Marker的识别和定位,然后通过OpenGL将虚拟物体叠加到摄像头图像下,实现增强现实。具体思路是:使用SIFT算法进行识别(特征点的提取并用特征向量对特征点描述,接着当前视图的特征向量与目标对象的特征向量进行匹配),根据识别出来的原目标和帧图像匹配关系得到变化矩阵,来显示三维物体(使用OpenGL来绘制),实现跟踪。
2、Python
Python是世界上最优雅的语言,目前的计算机视觉项目大都用Python来实现,当然用Python的CV库也可以很轻松的实现AR效果。用Python来实现AR效果,首先需要运用到两个开源的工具包PyGame与PyOpenGL。PyGame是非常流行的游戏开发工具包,它可以非常简单的处理显示窗口,输入设备,事件以及其他内容。在实现的过程中,需要获取照相机矩阵并转换到OpenGL格式,并以平面和标记物进行姿态估计,然后在图像中放置虚拟物体,实现增强现实。
3、AR+SLAM
SLAM主要用于地图重建,在AR中,通常运用SLAM算法来获取camera pose。网上有一些SLAM开发资源与AR-SLAM 项目案例,有兴趣的可以下载参考。
4、ARToolkit
ARToolKit 是一个C/C++ 语言编写的库。对于开发一个AR程序来说,最困难的部分在于实时的将虚拟图像覆盖到用户视口,并且和真实世界中的对象精确对齐。ARToolKit使用图像技术计算摄像机和标记卡之间的相对位置,从而使程序员能够将他们的虚拟对象覆盖到标记卡上面。ARToolKit 提供的快速和准确的标记跟踪,能够让人快速的开发出许多更新更有趣的AR程序。实现步骤是:程序初始化—抓取一帧进行视频的输入—然后探测标示卡—计算摄像头的转移矩阵—绘制虚拟物体—关闭视频捕捉。