HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素:
看完微软栩栩如生的宣传视频后,如果你的反应是
卧槽,Matrix 要来了
那么你要好好看这一段,因为 Matrix 是 Virtual Reality / VR / 虚拟现实,VR 的特点是让参与者置身于计算机生成的三维图像世界中,淡化真实的世界。VR 近期的代表产品是 Oculus Rift,戴上 Rift 后你是看不到真实世界的。在我看来 VR 最大的问题是:这个虚拟世界很真实很精彩,但是有什么用呢?也就是说 VR 只能做到更逼真的三维世界,它无法帮助人们更好地理解真实的世界。
HoloLens 也不是 Google Glass,它比 GG 多了:
HoloLens 也不是市场上常见的的 AR,常见的基于摄像头的 AR 应用基于摄像头有:
基于丑陋的黑白标记图片的 AR
以及基于任意图片的 AR
很炫是吗,但是它们只能检测到图片所在的那个平面。HoloLens 比它们都牛,它能检测到各个角度的三维场景!
我们回到 AR 的定义,想要实现增强现实,必须先理解现实,那么对于 HoloLens 而言现实是什么呢?是传感器的数据。
传感器是啥?是摄像头。
同样是摄像头,为什么 HoloLens 就可以感知深度呢?微软的 Kinect 在这方面很成功,那么是不是 HoloLens 上放了一台嵌入式的 Kinect 呢?
答案在下面的原型图片中
HoloLens 拥有有四台摄像头,左右两边各两台。通过对这四台摄像头的实时画面进行分析,HoloLens 可覆盖的水平视角和垂直视角都达到 120 度。
也就是说它采用的是立体视觉 / Stereo Vision 技术来获取类似下图的深度图 / depth map。
立体视觉是计算机视觉学科的一个子学科,专注于从两个摄像头的图像数据中得到真实场景中的物体离摄像头的距离。示意图如下
下面是基本的步骤,查阅 OpenCV 文档可以了解具体到函数用法http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html
只有一张深度图是不够的,它只是某一时刻真实的场景在摄像头中的映射。要想得到完整的三维场景,我们需要分析一系列的深度图。
答案是 SLAM,Simultaneous Localization And Mapping,即同步定位与建图系统。这个技术被用于机器人、无人汽车、无人飞行器的定位与寻路系统。解决的是非常哲学的问题:
SLAM 有很多实现的方式,有一个开源的 http://pointclouds.org/ 实现了很多深度图的处理和匹配算法,可以认为是三维版本的 OpenCV。
而微软围绕着 Kinect 的深度图数据发明了 Kinect Fushion 算法,并发表了两篇论文:
为什么我认为 HoloLens 与 Kinect Fushion 有关?答案在这个页面中http://research.microsoft.com/en-us/people/shahrami/。 Shahram Izadi 是微软剑桥研究院的 principal researcher 及 research manager。他所领导的互动3D技术组 / interactive 3D technologies 为微软的多项产品提供了研究力量,包括 Kinect for Windows, Kinect Fusion 以及 HoloLens。顺便说一句,他们组在招人:)
Kinect Fushion,通过在室内移动 Kinect 设备,获取不同角度的深度图,实时迭代,对不同对深度图进行累积,计算出精确的房间以及房间内物体的三维模型。
它分四个阶段:
在 HoloLens 的应用中我们运行到第三步,即获取三维乐高模型就可以了,第四步并不是必需的。因为 HoloLens 的屏幕是透明的,不需要再把房屋的模型渲染一遍,我们自带的眼睛已经渲染了一遍了:)
HoloLens 炫酷的 demo 都是怎么制作的?
还剩下三个难点,留待后续文章叙说: