Microsoft HoloLens 技术解谜(上)

HoloLens 是什么?

HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素:

  • 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的图像与真实的世界相叠加。类似的产品有图像投射到视网膜上的 Google Glass,以及叠加在手机摄像头画面上的手机 AR 应用。
  • 它拥有是独立的计算单元,自带 CPU + GPU + HPU,不需要外接计算机。它的 CPU 和 GPU 基于英特尔的 14 纳米工艺的 Cherry Trail 芯片,HPU 是微软发明的缩写 ,全称是 Holographic Processing Unit,即全息处理单元。按照知乎匿名用户的回答,HPU 是一块 ASIC (Application-specific integrated circuit),是微软为 HoloLens 定制的集成电路,对此,我只能说“有钱任性”。

HoloLens 不是什么?

看完微软栩栩如生的宣传视频后,如果你的反应是

卧槽,Matrix 要来了

那么你要好好看这一段,因为 Matrix 是 Virtual Reality / VR / 虚拟现实,VR 的特点是让参与者置身于计算机生成的三维图像世界中,淡化真实的世界。VR 近期的代表产品是 Oculus Rift,戴上 Rift 后你是看不到真实世界的。在我看来 VR 最大的问题是:这个虚拟世界很真实很精彩,但是有什么用呢?也就是说 VR 只能做到更逼真的三维世界,它无法帮助人们更好地理解真实的世界。

HoloLens 也不是 Google Glass,它比 GG 多了:

  • 三维感知能力,可以对身边的三维场景进行建模。而 GG 只能看到 RGB 像素值。
  • 三维渲染能力。
  • 人机交互能力,可以用手势来进行控制。

HoloLens 也不是市场上常见的的 AR,常见的基于摄像头的 AR 应用基于摄像头有:

基于丑陋的黑白标记图片的 AR

以及基于任意图片的 AR

很炫是吗,但是它们只能检测到图片所在的那个平面。HoloLens 比它们都牛,它能检测到各个角度的三维场景!

HoloLens 的 AR 是如何得到三维场景深度信息的?

我们回到 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

  1. 摄像头校正,undistortion。由于摄像头的镜片出厂时都存在扭曲,为了得到精确的数据需要在使用前进行较正。常用的方法是基于棋盘的各个姿态拍几次,然后计算相机的矩阵参赛。下图便是常见的标定界面。
  2. 图像对齐,rectification。因为两个摄像头的位置不同,因此它们各自看到的场景是有偏差的,左边的摄像头能看到最左的场景,右边的看到最右的场景。图像对齐的目的是得到相同的场景部分。
  3. 左右图像匹配,correspondence。在 OpenCV 中可以使用http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html 得到 disparity map。
  4. 通过重映射函数,比如 OpenCV 中的 cv::reprojectImageTo3D,得到一张深度图。

只有一张深度图是不够的,它只是某一时刻真实的场景在摄像头中的映射。要想得到完整的三维场景,我们需要分析一系列的深度图。

HoloLens 如何从多张深度图重建三维场景?

答案是 SLAM,Simultaneous Localization And Mapping,即同步定位与建图系统。这个技术被用于机器人、无人汽车、无人飞行器的定位与寻路系统。解决的是非常哲学的问题:

  • 我现在在哪里?
  • 我可以去哪里?

SLAM 有很多实现的方式,有一个开源的 http://pointclouds.org/ 实现了很多深度图的处理和匹配算法,可以认为是三维版本的 OpenCV。

而微软围绕着 Kinect 的深度图数据发明了 Kinect Fushion 算法,并发表了两篇论文:

  • KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera
  • KinectFusion: Real-Time Dense Surface Mapping and Tracking

为什么我认为 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 设备,获取不同角度的深度图,实时迭代,对不同对深度图进行累积,计算出精确的房间以及房间内物体的三维模型。

它分四个阶段:

  1. 深度图格式转换,转化后的深度的单位是米,用浮点数保存。并计算顶点坐标和表面的法向量。
  2. 计算世界坐标系下的相机姿态(包含位置和朝向),通过迭代的对齐算法跟踪这两个值,这样系统总是知道当前的相机与最初的姿态相比变了多少。
  3. 第三阶段将姿态已知情况下的深度数据融合到单个三维乐高空间里,你也可以叫它为 MineCraft 空间,因为这个空间的基本元素不是三角形,而是方格子。演示视频中频频出现 MineCraft 场景估计也和这个阶段有关。
  4. 基于 Raycasting 的三维渲染,Raycasting 需要从当前的相机位置发出射线,与三维空间求交集。乐高空间特别适合 Raycasting,可以用八叉树来加速射线的求交运算。Raycasting、Raytracing 以及 Rasterization 是三种常见的渲染方式,这里就不展开了。

在 HoloLens 的应用中我们运行到第三步,即获取三维乐高模型就可以了,第四步并不是必需的。因为 HoloLens 的屏幕是透明的,不需要再把房屋的模型渲染一遍,我们自带的眼睛已经渲染了一遍了:)

HoloLens 炫酷的 demo 都是怎么制作的?

还剩下三个难点,留待后续文章叙说:

    • 手势识别怎么做的?
    • 眼球跟踪怎么做的?
    • 非常贴合的三维渲染是怎么做的?
时间: 2024-10-17 08:46:14

Microsoft HoloLens 技术解谜(上)的相关文章

Microsoft HoloLens 技术解谜(下)

读者提问之“HoloLens 的深度传感器有没有可能是基于 TOF?” 先介绍下背景知识,市面上常见的有三种类型的深度传感器: 结构光,这个技术的代表产品是 Kinect 一代,它的传感器芯片用的是 PrimeSense 家的.说句题外话,PrimeSense 现在是苹果旗下的公司,这个领域未来一定会很精彩. TOF,time-of-flight,代表产品是 Kinect 二代,由于微软对于 One 这个单词的热爱,它的官方名字是 Kinect One,有点混乱是吧? 双目摄像头,代表产品是 G

微软HoloLens技术解谜

HoloLens 是什么? HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素: 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的图像与真实的世界相叠加.类似的产品有图像投射到视网膜上的 Google Glass,以及叠加在手机摄像头画面上的手机 AR 应用. 它拥有是独立的计算单元,自带 CPU + GPU +HPU,不需要外接计算机.它的 CPU 和 GPU 基于英特尔的 14纳米工艺的 Cherry Trail 芯片,H

【整理】一个真实的图灵:如迷的解谜者,并非万事成谜

据说,每一个码农都愿意为他默默撅起臀部,所以后来程序员都自称为IT基佬.阅读了<图灵传>,观看了<模仿游戏>电影,不免对图灵的一生有了一个了解,一个真实的图灵是怎么样子的呢?我整理了一些网上的资料并总结了一下,并非我个人原创,现在就和各位园友share一下: 1.关于电影<模仿游戏> 电影<模仿游戏>引进的有点“晚”了.这部电影在2014年获得了奥斯卡奖中的最佳改编剧本奖,可直到2015年夏天才正式引进到国内.这么一部数学家艾伦·图灵的传记片,铁杆影迷恐怕已

在 PHP 中结合 Ajax 技术进行图片上传

前面几则日志中讲述了在 PHP 中上传文件,相信大家对 PHP 中如何进行文件上传已经初步掌握.本文来继续探讨在 PHP 中上传文件的技术,不同的是,本次上传将仅限于图片文件的上传,并且将采用 Ajax 技术. 本例将要实现这样的效果:当用户选择图片,开始上传后,后台上传完成时,随即会显示到当前页面.由于,从开始上传到上传完成,再到图片显示均在一个页面上 完成(从表面上看).所以使用 Ajax 技术是必须的.但如何使用这些操作在一个页面上来完成呢?考虑到这样的情况,当文件开始上传后,便开始打开

WebService WSDL详解(上)

为什么使用WSDL? 像Internet协议之类的标准有没有为权威所利用,或者人们这样看待它是因为顺之所获的好处远远超出了代价?曾经有许多试图建立的标准都流产了.有时候,那些还没有普遍使用的标准甚至由法令或政府规定强行推出:Ada语言就是一例. 我相信正是跟随标准所带来的好处使它广泛接受.例如,对于铁路服务来说,真正重要的是,不同公司所铺设的铁路结合到一起,或者是来自好几个公司的产品协调的工作在一起.几家大的企业合力建立了SOAP标准.Web Service描述语言(WSDL)向这种Web Se

Broken Sword II The Smoking Mirror v2.0.09 Android-DeBTPDA 美式冒险解谜大作

Broken Sword II The Smoking Mirror v2.0.09 Android-DeBTPDA 美式冒险解谜大作         Broken Sword II The Smoking Mirror非常经典的一款美式冒险解谜大作.游戏精美的画面和细节上的精雕细琢,给人非常华丽的感觉:引人入胜的故事情节.交互式的游戏环境.全程语音给玩家的代入感强烈.在操作上采用游标指引角色行动,解谜为主,考验玩家的观察力和想象力,全部是图形显示,不识英文也能轻松上手,推荐给喜爱动脑解谜的游戏

智能电话机器人,使用Microsoft语音识别技术(Speech sdk)

最近公司接手到了一个有挑战的项目,很有意思,拿出来和大家分享下,交流下开发过程中的一些收获和感悟. 智能电话机器人 原委是这样的,有一个大佬,手里有好多好多,总之就是好多手机充x卡,他想把这些充x卡充值到不同的用户手机号里.有的朋友接触过的,会说“可以和移动去谈,然后搞到移动的接口,根据接口开发程序,然后把充x卡密码都弄进数据库里,用程序读取,之后调用移动接口完成充值.” 说得好,漂亮!而且充x卡密码存到数据库里面这件事,大佬已经找人没日没夜加班干活全都录入到数据库里了. 但是事实很悲催,由于各

QR 码详解(上)

原文:QR 码详解(上) 关于二维码,我查了下资料,现在基本都在用日本的 QR 码,PDF417以及汉信码日常基本看不到.原因在于各方面来说,的确是 QR 码最为优秀.所以我准备写一篇介绍 QR 码的文章,如果是写书,可能不方便写得这么详尽,但如果是网上的文章,就可以自由发挥了.写完这篇文章,再抽取部分内容正规化,并整合其它内容形成书的第四章.为方便未来上课讲解方便,以及快速画图,我还做了一个<QR助手程序>,帮助绘制 QR 码中的各部分图形,最后演化成一个二维码绘制程序.本来并未打算要自己写

[转]JVM指令详解(上)

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong) 本文主要记录一些JVM指令,便于记忆与查阅. 一.未归类系列A 此系列暂未归类. 指令码    助记符                            说明 0x00         nop                                什么都不做 0x01        aconst_null                   将null推送至栈顶 二.const系列 该系列命令主要