当前位置: 首页 > 科技赋能

揭秘微软HoloLens技术的秘密!如何还原 3D 场景

时间:2024-05-22 18:08:11 科技赋能

什么是 HoloLens? HoloLens是微软发布的一款可穿戴增强现实计算设备。

它有几个关键要素:它是一个增强现实产品,即Augmented Reality(AR)。

AR技术将计算机生成的图像与现实世界叠加。

类似的产品包括将图像投射到视网膜上的谷歌眼镜,以及叠加在手机相机屏幕上的移动增强现实应用程序。

它拥有独立的计算单元,拥有自己的CPU+GPU+HPU,不需要外接计算机。

其CPU和GPU基于英特尔14纳米Cherry Trail芯片。

HPU是微软发明的缩写,全称是HolographicProcessingUnit,即全息处理单元。

根据一位匿名知乎用户的回答,HPU是一块ASIC(专用集成电路),是微软为HoloLens定制的集成电路。

对此,我只能说“你有钱,你想做什么就做什么”。

  HoloLens 不是什么?如果你看完微软栩栩如生的宣传视频后的反应是,天啊,黑客帝国来了。

那你就得仔细看这一段了,因为Matrix就是Virtual Reality/VR/虚拟现实。

VR的特点是将参与者置于计算机生成的三维图像世界中,淡化现实世界。

VR最新的代表产品是Oculus Rift。

佩戴 Rift 后您将无法看到现实世界。

在我看来,VR最大的问题是:这个虚拟世界很真实,很刺激,但是它有什么用呢?也就是说,VR只能创造一个更加真实的三维世界,却无法帮助人们更好地理解现实世界。

HoloLens不是Google Glass(以下简称GG),它不仅仅是GG:三维感知能力,可以对你周围的三维场景进行建模。

而GG只能看到RGB像素值。

3D 渲染功能。

人机交互能力可以通过手势控制。

HoloLens 并不是市场上常见的 AR。

常见的基于摄像头的AR应用有:基于难看的黑白标记图片的AR和基于任意图片的AR。

很酷,不是吗,但它们只能检测图像所在的平面。

HoloLens比它们都好,它可以从各个角度检测三维场景!   HoloLens的AR如何获取三维场景的深度信息?让我们回到AR的定义。

要实现增强现实,我们必须首先了解现实。

那么 HoloLens 的现实是什么?是传感器数据。

  什么是传感器?它是一台相机,但它也是一台相机。

为什么HoloLens可以感知深度?微软的Kinect在这方面非常成功,那么HoloLens上是否有嵌入Kinect呢?答案就在下面的原型图中:HoloLens 有四个摄像头,每侧两个。

通过分析这四个摄像头的实时图像,HoloLens 可以覆盖水平和垂直视角。

换句话说,它利用立体视觉/Stereo Vision技术来获得类似于下图的深度图。

立体视觉是计算机视觉的一个子学科,专注于从两个摄像机的图像数据中获取真实场景中的物体距摄像机的距离。

示意图如下: 下面是基本步骤。

查看OpenCV文档了解具体功能使用:相机校正、去畸变。

由于相机的镜头在出厂时就存在畸变,因此在使用前需要进行校正,才能获得准确的数据。

常见的方法是根据棋盘的每个姿势进行多次拍摄,然后计算相机的矩阵来进行比赛。

下图是常见的校准界面。

图像对齐、校正。

由于两个摄像机的位置不同,所以看到的场景是倾斜的。

左摄像头可以看到最左边的场景,右摄像头可以看到最右边的场景。

图像对齐的目的是获得相同的场景部分。

左右图像匹配、对应。

您可以使用 OpenCV 来获取视差图。

通过重映射函数,例如OpenCV中的cv::reprojectImageTo3D,获得深度图。

只有深度图是不够的,它只是某一时刻相机中真实场景的映射。

为了获得完整的 3D 场景,我们需要分析一系列深度图。

HoloLens 如何从多个深度图重建 3D 场景?答案是SLAM,Simultaneous Localization And Mapping,即同步定位和建图系统。

该技术用于机器人、无人驾驶汽车和无人机的定位和寻路系统。

它解决了非常哲学的问题:我现在在哪里?我可以去哪里?实现SLAM的方法有很多种。

有一种开源方法可以实现许多深度图处理和匹配算法。

可以认为是OpenCV的三维版本。

微软围绕 Kinect 的深度图数据发明了 Kinect Fushion 算法,并发表了两篇论文:KinectFusion: Real-time 3D Reconstruction and Interaction using a Moving Depth Camera; KinectFusion:实时密集表面测绘和跟踪。

为什么我认为 HoloLens 与 Kinect Fusion 有关?答案就在这个页面上。

Shahram Izadi 是微软剑桥研究院的首席研究员和研究经理。

他领导的交互式 3D 技术小组为多种微软产品提供研究力量,包括 Kinect for Windows、Kinect Fusion 和 HoloLens。

对了,他们组正在招聘:)Kinect Fushion,通过在室内移动Kinect设备,获取不同角度的深度图,实时迭代,累积不同对的深度图,计算出房间的精确三维尺寸以及房间里的物品。

模型。

分为四个阶段:深度图格式转换。

转换后的深度单位为米,并保存为浮点数。

并计算曲面的顶点坐标和法向量。

计算世界坐标系中的相机位姿(包括位置和方向),并通过迭代对齐算法跟踪这两个值,以便系统始终知道当前相机与原始位姿相比改变了多少。

第三阶段将深度数据与已知姿势融合到单个三维乐高空间中。

你也可以称之为我的世界空间,因为这个空间的基本元素不是三角形,而是方形网格。

演示视频中频繁出现的《我的世界》场景大概与这个阶段有关。

基于光线投射的三维渲染。

光线投射需要从当前相机位置发射光线并与三维空间相交。

乐高空间特别适合光线投射,八叉树可以用来加速光线的相交操作。

光线投射(Raycasting)、光线追踪(Raytracing)和光栅化(Rasterization)是三种常见的渲染方法,这里不再讨论。

在HoloLens应用程序中,我们运行到第三步,即获取三维乐高模型。

第四步不是必须的。

由于HoloLens屏幕是透明的,因此无需再次渲染房屋模型。

我们自己的眼睛已经呈现了它。