KinectFusion:用运动的深度相机进行实时3D重建及交互



https://blog.csdn.net/u010696366/article/details/47985073


KinectFusion的GPU Pipeline实现, 涉及到的两篇原理和实现中的一篇,两年前翻译的,那时候多数不理解,再拿出来整理一下,也是加深理解,配图来自原论文,文字为本人翻译,如有不正,敬请指出。

本文最重要的算法都在第四章:GPU实现,也是最难理解的部分,本文的第四章是自己反复阅读过后的理解,也建议想要学习KinFu的同学仔细阅读,源码已经在13年在PCL开放,后来在Microsoft的 SDK上也可用,

如何配置kinectFusion可以运行的PCL环境请点击链接

下面给出原文下载链接>>>>>>>

 KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera

摘要

       
     KinectFusion使用户可以手持Kinect移动,仅用Kinect的深度信息来追踪传感器的3D姿态,实时重建室内场景的详细3D模型。 本文详细描述了KinectFusion的作用性能和新提出的基于GPU的流水线。 我们展示了这个低成本手持扫描设备,几何感知增强现实,实物交互的核心系统。 此核心GPU流水线的新扩展论证了:不降低摄像头追踪和重建的精确度,直接在设备前和用户交互,物体分割。这些扩展可以使在任何平面或三维重建物体表面都可以实时多点触控交互。

ACM 分类: 
H5.2 [Information Interfaces and Presentation] : User Interfaces. 用户界面
I4.5 [Image Processing and Computer Vision ] : Reconstruction. 重建
I3.7 [Computer Graphics]: Three-Dimensional Graphics and Realism. 3D图形实现

常规术语:算法,设计,人为因素。

关键词: 3D  GPU  表面重建  追踪  深度摄像头  AR  物理  几何感知交互



一 . 引言

       
       深度摄像机不是新概念,但Kinect以前的类似设备都很贵。考虑到实时特性,价格便宜,深度感知的质量优异,Kinect已经吸引了大批研究人员和爱好者。

        Kinect运用结构良好的光学技术形成实时的实物场景的离散测量点深度图。这些测量值可以投影变换到一系列离散3D点(或点云)。虽然与别的可商用的深度摄像机所提供的深度数据相比有优势,Kinect的噪声(图2B和3左)也会引起深度测量值波动,深度图包含没有读到的“空洞”。

        应用于游戏,物理,或CAD,高等级表面几何等的3D模型都需要来源于这些有噪音的点数据。一个简要方法是做出如下强假设: 可利用周边点的连接性(深度数据)来生成一个mesh。但结果噪声明显,并且只是从单一固定角度观看,如图2C。要生成一个完整严密的3D模型,必须从不同视角捕获实物场景,并融合成一个单一表示。



        本文展示了一个新的交互性重建系统(KinectFusion)。系统实时的从移动着的Kinect摄像头中获得深度数据,实时创建一个高质量,几何精确的3D模型。一用户手持标准kinect,可在室内任意移动,并在几秒内重建出实物场景的3D模型。系统连续跟踪标定摄像头姿势的六个自由度,把场景的不同新视角融进一个global surface-based展示。一个新的GPU流水线使精确的摄像头跟踪和实时交互速度的表面重建成为可能。本文详细描述了我们新系统的性能和GPU流水线的详细实现。

        KinectFusion用一个廉价的手持扫描设备,核心应用为 从重建的场景中分割感兴趣的物体的新型交互方法。我们也表明实时3D模型如何应用于几何感知的增强现实和以实物为基础的交互。这个交互把虚拟世界和现实世界更真实的融合。
        
        把这个系统放在用户需要在传感器前与之动态交互的环境中,揭示了一个基本的挑战:我们无法假定场景在摄像头前静态不动。我们举出了一个用户在摄像头前移动所造成的失败案例,我们也阐述了一些新方法来克服。最终使摄像头得以追踪并重建一个静态的背景场景,同时分割,重建,跟踪前景物体,包括用户在内。我们用这个方法可以在任何位置建立实时多点触控交互,使用户可以方便的触控任何物质表面,不论平面还是非平面的。

二 . 相关研究


      使用有源传感器(active sensors)[16],被动的相机[11,18],实时图像[7],或从无序3D点[14,29]来重建几何体,在计算机图形和视觉领域都已有广泛研究。在AR和机器人领域上也有大量的关于同步定位与地图创建(SLAM)的文献,目的在于在创造一个周围的物理环境的地图(见[25])的同时,跟踪用户或机器人。鉴于这么宽泛的话题,和我们建立一个互动系统的愿望,这部分的结构围绕一个特定的设计目标:把KinectFusion
与以前的工作区分开。这些功能的组合使我们的互动式重建系统独一无二。

互动率(Interactive rates)

       首要目标是用KinectFusion同时实现摄像机跟踪和三维重建的实时互动率。此速度至关重要,用于提供直接反馈和用户交互。这区别于现有的许多重建系统,包括仅支持脱机重建[7],实时但低交互速率(例如[12]Kinect的系统以〜2HZ重建),支持摄像头实时跟踪但非实时重建或映射(real-time camera tracking but non real-time reconstruction or mapping phases)[15,19,20]。

没有明确的特征检测(No explicit feature detection)  

       不像SFM系统(structure from motion,如[15])或RGBD技术(RGB plus depth,如[12,13])等需要健壮持续地检测稀疏的场景特征,我们的跟踪方法避免了一个明确的检测步骤,直接工作于Kinect感应器获取的整个深度地图。也避免了依赖于RGB(最近的Kinect的RGBD系统[12]常用),因此系统也适用于室内空间与可变照明条件下。

高品质的几何重建(High-quality reconstruction of geometry)

      核心目标是捕获详细(或密集的)真实场景三维模型。 许多SLAM系统(如[15])专注于实时跟踪,他们用稀疏矩阵来定位而不是重建。其他使用简单的基于点的表示形式(如surfels点元[12]或对齐点云[13])重建。KinectFusion超越了这些以点为基础的重建表面的表示方法,更准确的逼近真实世界的几何形状。

动态交互假设(Dynamic interaction assumed)

       我们将探讨在用户交互的上下文中的跟踪和重建。最重要的是我们的表示方法可以处理动态变化的场景,让用户直接在摄像头前交互。虽然已有使用基于网格的表示方法用于从被动RGB[18,19,20]或TOF相机(Time of Flight)[4,28]实时重建方面的研究,这些都不容易处理不断动态变化的场景。

无需额外设施(Infrastructure-less )

       让用户能够探索和重建任意的室内空间。这表明与使用固定或大传感器(例如,[16,23]),或完全嵌入的环境中(例如,[26])的系统相比,我们的系统具有的一定的移动性。此外,我们的目标是:无论这是否是使用大量基础设施的跟踪系统(如[2])或可信标记(如[27]),都在不需要事先增强的空间进行摄像头追踪。

大规模重建(Room scale)

        最后一个亮点是支持一个房间大小的重建及交互。这把KinectFusion与以前的密集重建系统区别开来,以前的系统要么集中在较小的桌面场景[19,20],要么扫描小的物理对象[28]。

        本文其余部分在结构上分为两部分: 第一部分概述KinectFusion的性能;第二部分描述技术层面:着重于我们新提出的GPU流水线。

三 . KinectFusion的功能简介


         用户手持标准Kinect,迅速移动,即可重建高质量几何精确的室内场景3D模型。要达到这种效果,系统持续跟踪摄像头的6维自由度,实时地把摄像得到的深度数据融合成一整个全局3D模型。随着用户的移动,新摄入的物理场景视角都被融入同一模型中,因此,重建的模型就随着新的测量值的加入而不断完善细节。孔洞慢慢被填平,模型也逐渐趋于完整。

       即使是由摄像头抖动所造成的微小运动导致场景的新视角,也能帮助完善模型,这导致了一个类似于“图像超分辨率【6】”的效果——逐渐加入更多细节,而不是在原始信号中就可见。如图2和3,在如此大噪声输入数据和高速下,重建的结果质量是很高的。重建模型可运用Kinect RGB摄像头进行纹理贴图(如图1C,5B,6A)。

1. 廉价手持扫描仪

 
       KinectFusion一个基本但引人注目的应用是作为一个低成本实物扫描仪。尽管已经有大量研究关注用被动或主动摄像来实现实物扫描【4,28】,但无论从重建速度,质量和规模上,都没有以像Kinect这么低成本的可商用硬件被证实过。此系统可移动,实时的特性,让用户可以迅速从不同视角捕抓物体,并马上看到实时反馈。重建的3D模型可以导入CAD或其他模型应用,甚至3D打印机中(如图4C和D)。

        如图4,系统也可以“反向”应用,只要保证所提取物体占据深度图的大部分,代码不做任何修改,手持刚性物体在固定Kinect前旋转,使系统追踪其6维自由度即可。此例中,手指开始可能会形成重建模型的一部分,但随着用户转动物体,最终也会引起手指的移动而逐渐被整合出此3D模型。

2. 直接交互分割物体


        当用户想要扫描一个特定较小的物体而非一个场景时,KinectFusion支持先重建出整个场景,再通过移动想要分离的实物,精确地将其分离出来。系统持续监控“3D重建”过程,并观察整个过程中的变化,若物体被移出或放入场景,3D模型内将迅速监测到大量变化。这些变化实时地检测,使重定位的物体从背景模型中干净的分割出来。本方法使用户可以简单的直接通过移动物体迅速执行分割过程,无需任何明确的GUI输入。

3. 虚拟几何体在现实场景中


        除了扫描,KinectFusion支持更多现实形式的AR,将一个虚拟3D环境叠加于其上并同真实环境中的表现进行交互。图6(第一排)中,一个虚拟的金属球直接合成到这个3D模型,从Kinect获得的实时RGB数据同样合成其中。这个虚拟的金属球可以以和追踪的实际摄像头同样的角度来渲染,使其能够随着Kinect的移动在空间上注册。正如在图6(B,C和D)中所示,实时的3D模型可以表现现实与虚拟精确的遮挡关系,包括极其复杂的图形。通过原始深度图是不能实现之前那种质量的遮挡处理,尤其是在物体的边缘(图6E),因为存在沿深度不连续性的显著噪声。精确的遮挡效果对于身临其境的增强现实AR体验至关重要,这种效果在稀疏映射的实时AR系统中还没有实现(e.g.【15】)。

        光线追踪渲染效果能够实时计算得出用来创建逼真的阴影,光照和反射效果,而且同时照顾到虚拟和现实几何性质。例如,图6(B和D)展示了虚拟出的物体如何在真实的几何体上投影,还有部分真实场景在虚拟的物体上的反光。后者(图D)甚至成为被当前物理相机角度看来遮挡着的场景的一部分。

4. 应用力学原理的虚拟现实


        把这种针对“虚”“实”世界进行结合以及空间调整的能力进一步深化,虚拟的物体也可以开始与重建的场景进行动态交互,这种交互可通过模拟真实世界多方面的物理属性来实现。诸如游戏,机器人等许多类型的应用都可以获益于这样精确的实时物理属性仿真。甚至在3D模型正在重建时也可以进行刚体的碰撞仿真。图7展示出了成千上万个与重建的3D模型相互作用的小颗粒球,并且这些都是实时完成的。这个功能无论对于重建一个场景,还是同时在模型中进行物理计算都是独一无二的,并且展示了实现更多物理性增强现实应用的潜力。

5. 前景信息与背景信息分离

 
        注意,像大多数关于SLAM(Simultaneous Localization and Mapping, 同步定位与建图)和基于摄像头的场景重建的文献中提及的一样,我们对到目前所描述的核心系统做出一个基本假设——相机在一个静态的场景内进行跟踪。一旦我们将关注的焦点从场景重建切换到场景内互动,这个假设就不再成立了。物理对象例如用户的双手,将会不可避免地出现在场景中,双手不断运动并影响追踪与重建。我们的相机追踪对于瞬态的,快速的动作有很好的鲁棒性(图5)。然而,长时间与场景的互动却是有问题的,如图8所示。

        这很明显是一个计算机视觉方面的富有挑战性的难题,我们基于GPU的流水线的适用范围已经扩大到可以在用户交互的某些特定的情形下,根据场景的运动粗略估计相机的运动。当用户在场景内进行交互时,相机追踪“锁定”在背景上并且忽略处于前景处的用户以完成相机姿态的预测(图15)。这个前景信息的数据可以由相机跟踪定位进行追踪(包含6个自由度)并且相对独立地重建,以及静态背景的重建。

         这种在场景中重建和追踪用户的功能可以使我们基于物理性质仿真所产生出的新扩展更早的展现出来。现在,刚性粒子球可以同快速动态变化的前景图像相碰撞。图9展示了许多颗粒同一个移动用户的动态更新重建进行交互。这实现了用户与物理性质可激活的虚拟物体之间的直接交互。

         此外,由于我们拍摄获取了背景和前景用户(例如,双手或者潜在的全身)两者的几何属性关系,我们可以判断两者之间相交的部分。这些交叉的点表明何时前景与背景相接触,而且形成了一种健壮的方法来检测用户是否正在触摸任何形状的表面,包括非平面的表明。这个功能支持直接的多点触控,以实现在用户所处环境中触及任何表面,正如在交互式桌面社区所展示的那样(见图10)。


四 . GPU实现


       我们的实时摄像头跟踪和表面重建方法是基于两个已有深入研究的算法【1,5,24】(已被设计成GPU并行算法)。论文【21】指出本方法的完全形成过程,包括重建性能的定量评估。而本部分主要讨论的是新核心GPU流水线及其扩展的实现,这是加速的关键。

     主流水线包括4个主要阶段(如图11):
①Depth Map Conversion → ②Camera Tracking(ICP)→  ③Volumetric Integration → ④Raycasting(3D Rendering)

        ①Depth Map Conversion 把实时深度图从二维图像坐标转化到摄像头坐标空间中的3D点(称为vertices)和法向量。   

        ②Camera Tracking(ICP Iterative Closest Point)在跟踪阶段,用ICP算法的GPU实现,六维刚体变换使每个当前有向点都与前一帧对应点紧密排列。所有对应变换都逐渐累加用于一个单一变换(定义了Kinect的全局坐标)。

        ③Volumetric Integration :本文应用基于【5】的体积表面表示方法,而非融合点云或创建网眼等其他方法。若给出摄像头的全局方位,这些方向点就能转化到全局坐标系,独立的3D体元网格即被更新。每个体元存储一个不断更新的它到假定实物表面位置的平均距离。

        ④Raycasting(3D Rendering)体绘制:为了最终渲染给用户,整体都被光线投射出以提取暗含表面的视图。若给出摄像头的全局方位,这个光线投射出的体视图就等同于一个用于下一次ICP迭代的全局一致的小噪参考帧。这使把当前实时深度图与我们处理过的小噪投射模型视图排列在一起追踪成为可能,传统的只用实时帧到帧深度图则不能。

以上每步都是在GPU上用CUDA并行,流水线中的每步描述如下:

1. Depth Map Conversion 深度图变换



        在时刻i,每个CUDA线程占用输入深度图Di(u)中一个单独的像素点u = (x,y) 并行。 已知Kinect摄像头的内部校准矩阵K,每个GPU线程把一个深度测量值投影变换成相机坐标空间的一个3D顶点,如下: 。这样就并行算出了一个vertex map 


        同样,每个GPU thread中,每个顶点对应的法向量用相邻投影点通过中作如下运算(标准化到单元长度)。这样就并行算出了一个normal map .

        在时刻i6维摄像头方位是一个刚体变换矩阵,其中,3×3旋转矩阵平移向量。若已知此变换,则顶点和法线可分别转化到全局坐标系中: 


2. Camera Tracking 摄像头跟踪


         ICP(Iterative closest point)是在3D配准上广泛应用的算法(详见【24】)。而KinectFusion将ICP扩展到跟踪 摄像头位姿(每新输入的深度图对应的c amera pose),其实这一步是通过ICP估计出一个把上一帧变换到当前帧摄像头位置的一个变换矩阵, (再直观点就是上一时间点i-1输入的点云通过上一小节提到的矩阵的变换,变换到当前时刻i时摄像头所在坐标系下,并和当前时间点输入的点云i align在一起,成一个点云, 关于icp的更深理解及实现参见我的另一篇blog: PCL学习笔记之二:registratration(ICP算法) 。这样随着摄像头位置不断变换,得到的6DOF矩阵不断叠加,最终得到一个唯一的的全局摄像头位置(gobal camera pose)Ti。

ICP重要的第一步是:找到当前时刻i和前一时刻i-1的有向点之间的对应关系。在本系统中,用投影数据联合(projective data association【24】)来找到这种对应关系。这部分GPU算法伪码如列表1所示。已知前一时刻全局摄像头位置Ti-1,每个GPU线程把一个独立点vi-1变换到摄像头坐标空间,并透视投影到图像坐标中。然后把这个2D点作为在当前定点Vi和法线贴图Ni中沿着射线(即,投影到同一图像坐标中)查找对应点的索引。最终,每个GPU线程测试其对应系列点的兼容性以剔除离群值,这个过程先把所有点转换到全局坐标,然后测试他们之间的欧氏距离和角度,使在阈值内。需要注意Ti是用Ti-1来初始化,然后用一个每次ICP迭代过程中计算的增量变换更新的。
        已知这一系列相关有向点,每个ICP迭代的输出是一个最小化点到面误差度量的单一的变换矩阵T【3】,把T定义为当前帧中每一点到前一帧中相应点处切平面的距离的平方和:

                                        

        我们用一个线性近似来解决这个系统,即假定在帧和帧之间只存在一个增量变换【3,17】。此线性系统采用树规约方法(tree reduction)在GPU上并行运算并求和。 然后,这个6*6线性系统的解决方案在CPU上运用乔利斯基分解(Cholesky decomposition)解决。
        我们基于GPU的摄像头跟踪实现的新的贡献主要是,ICP是在640*480 Kinect深度图所提供的所有的测量值上运行的。没有对点进行稀疏采样,或者明确的特征提取(尽管ICP确实暗含把深度特征合并)。此种密集追踪目前只在我们新提出的GPU实现中可行,并且在KinectFusion中分割物体和用户交互有重要作用,正如后文描述。


3. Volumetric Representation


        通过用ICP预测摄像头的全局方位,所有深度测量值都能从二维图像坐标转化到一个单一连续的全局坐标空间。我们基于论文【5】的体表示方法整合这些数据。一个固定分辨率的三维体(映射到一个特定尺寸的3D实体空间)预先确定,再被均匀细分成一组体元组成的网格。运用一系列符号距离函数(SDF)把全局3D顶点整合到体元中。在SDF中,值表示到实际表面的相对距离;在实际表面前面,值为正;在实际表面后面,值为负;在表面交界上,值定义为零,交界处变号。
        实际上只存储实际表面附近一段截短的区域【5】——本文称作TSDF截短的符号距离函数。我们发现这种表示方法存储Kinect传感器数据与其他方法尤其是mesh网眼方法相比有很多好处:它暗含了实物测量数据的不确定性,高效处理多样的测量值,新值计入时及时填补孔洞,适应摄像头移动,且暗中存储了表面几何体。


4. Volumetric Integration


        为达到实时运算速度,我们新提出了GPU实现的体表现的TSDF。GPU给3D体元网格整体分配了对齐的线性内存。虽然我们系统有时明显内存效率不足(一个512^3大小的体积包含需要512MB内存存储的32bit体元),但是运算速度很高效。由于内存排列对齐,并行线程可以合并使用这些内存以增加内存吞吐量。
        算法保证了能同时取得体元网格的存储数据,同时整合了深度数据的投影。算法实时的更新体积内的TSDF数值(速度达到每2ms更新512^3大小体积),而且连续表面(从点云表示的深度图得来)的预测离散成体元网格。此外,本方法的实现比层次法(如【29】)更简单。而且随着GPU内存的增加,本方法甚至可以为一整个房间建模。
        列表2中伪码表示这个算法的主要步骤。考虑到一个体积内的体元数量之大,为每个体元创建一个GPU线程不可行。为保证能同时存取内存,每个GPU线程分别分配给体积前表面薄片上的点(x,y)。沿着z轴上的每个薄片移动,这些GPU线程就能并行扫过整个体积。已知一个体积的分辨率,和这个体积所映射的实物尺寸,每个离散的3D网格位置可以转化为全局坐标系内的一个顶点。这个顶点到摄像头中心(全局摄像头变换的平移矢量)的度量距离是可以计算的。也可以把这3D顶点透视投影回原来的图像坐标上以找到沿着射出光线的实际深度值。测量值和计算得到的差给出了体元的一个新SDF值(第7行);标准化到TSDF(第9行,11行);用简单运行加权平均与前一个存储值平均(第13行)【5】。新权重和平均TSDF都存储在体元中。


5. Raycasting for Render and Tracking

 
       本文实现了GPU-based raycaster (光线跟踪是渲染的主要方法) 是用来渲染上一步中的volume内暗含的表面(如原论文Listing3中伪码)。每个GPU thread并行投射一条ray,渲染 输出图像中的一个pixel。给出一个起始位置和光线投射的方向,每个GPU thread沿着光线 穿过体元,通过监测TSDF值的符号改变(过零点)交界处来提取暗含表面的位置。最终表面交界处的点是在零点交界处左右两边分别由三线取样点用线性内插法取得的。若梯度与接触面正交,曲面法线直接能从TSDF在零点交界处求导得出。因此,每个找到一个曲面交界点的GPU thread可单独计算一个内插点和法线,计算结果可作为输出像素点的(lighting)光线计算的参数,用于渲染。

        图12是渲染流水线:在光线投射的视角下,使传统基于多边形的图形,以正确的遮挡处理技术blending (图像中常用的融合手段)了虚拟和现实场景,如图6。

a),基于mesh的场景以相机参数(等同于物理全局摄像头方向矩阵Ti和内部校准矩阵K)被渲染;

b),曲面向量和未使用的颜色数据不是存在frame buffer和vertex buffer中,而是单独分别存储在与显示无关的称作vertex,normal,color的单元里;c),在体绘制时用于输入。每一个GPU线程中,mesh顶点到摄像头中心的距离都被转化到grid坐标系中(列表3,第7,8行)。这个距离作为一个额外终止条件:沿着每条光线上(19行),在体积和网面几何中作精确的遮挡检测。

        环境光,漫反射,和镜面反射的光效可以通过重建和虚拟的几何结构计算而得(图6)。更先进的明暗度计算可以通过沿着每条光线的第二次(或更多)反射来实现。阴影是在第一道光束打在体元或网格表面后(列表3,第13,19行),再从表面到光源走了二次射线计算得到得(在grid坐标系下)。若在光线在截止之前打到表面上,那么该顶点上就附有阴影。对于反光,一旦第一道光线射到表面上,新的射线方向就将基于曲面法线和初始射线方向生成。

        本系统中体绘制的贡献是,在同一个算法中实时进行,同时处理以下各部分:在重建的3D模型中得出并绘制暗含的表面,把传统的多边形几何与适当的遮挡处理相结合,并给出先进的需要光线跟踪的明暗度计算。任何一个6维图像摄像头变换都可以被用来绘制物体,任意第三方都可允许作为3D模型的用户导航。然而,另一个更重要贡献在于为ICP摄像头跟踪部分生成高质量数据。当光线投射摄像头等于实物摄像头方位时,所提取的顶点和法线映射到深度和法线单元(从相同角度出发的实物相机),此结果中噪音相较原始kinect数据将大大减小。如【21】所示,通过直接跟踪光线投射的模型相较于帧到帧ICP追踪更能缓和偏移,减少ICP出错。


6. Simulating Real-World Physics 模拟真实世界的物理原理

 
       进一步合并真实和虚拟的几何形状,GPU流水线可以扩展到支持虚拟物品和重建的场景之间的物理上真实的碰撞。基于【9】【10】,以粒子仿真的实验已在GPU上实现。仿真实验内的场景外形由一组静态颗粒表示(图13)。这些相同大小的球体虽然保持静止,但仍然可能和其他动态的模拟颗粒碰撞。虽然只是近似,但此技术实时地在目标体积内为每一个分立表面的体元建模,并取得令人瞩目的成就:即使非常微小或者任意形状的物品,如书的边缘或茶壶的把手也有很好效果,如图7(右下)和13。
        静态粒子是在体合成的时候被创建的。随着扫描过体积,TSDF值即在一个接近零的自适应阈值内被提取出来,其中零值表示表面界面或零等高集合。对每一个表面体元,都有一个静态粒子被实例化。每一个颗粒在全局度量空间中包含一个3D顶点,一个速度向量(静态粒子为空),和一个ID。一个关键问题就是碰撞检测。我们使用一个在空间上细分的均匀网格来区分临近的颗粒【9】。网格中的每个单元都有一个唯一的ID。通过将颗粒的全局顶点转换为网格坐标,每个动态或静态的颗粒都分配到一个网格单元ID。
        我们的系统保有两个列表——一个存储静态颗粒,另一个存储动态的。在两个列表中,粒子都通过按它们当前网格ID排序(用基于GPU的基数排序)后,被挑选进网格单元格中。在每个模拟步骤,每出现一个动态粒子,就启用一个GPU线程。每个线程通过检测(3^3)临域内的单元处理碰撞(先处理动态-动态的碰撞,再处理动态-静态的碰撞)。离散单元法(DEM, Discrete Element Method)【10】被用于计算两个粒子碰撞时的速度矢量。粒子的全局速度基于临近碰撞,重力,和包围体的相互作用而累加。 然后,每个粒子都基于每个仿真步骤累积的速度重新定位。
        图7所示为上千个颗粒和重建场景的交互情况。我们基于GPU流水线的一大主要贡献是: 在物理模拟取得突破性进展的同时依然保持互动速率,还同时进行摄像头实时跟踪和重建。默认情况下,在光线投射过程中只有动态颗粒被渲染,于是可以再次被重建的几何体正确的遮挡(图7)。

五 . 场景互动

 
        目前为止,我们所描述的核心系统都基于场景保持合理静止状态这样一个假设。显然,在一个互动环境中,用户希望在显示器前自由运动并与场景交互。这样就产生了两个主要挑战。

        第一,ICP追踪假定每一帧都会产生由于摄像机运动而引起的刚性变换。用户在显示器前进行交互会引起独立于摄像机运动的场景运动,而这种运动使之前的假设不再成立。因为我们的ICP追踪是密集的(即用户所有可用点集),因此我们的系统在处理瞬时的场景运动时是有弹性的。例如,在图5中,即使当用户移动这个茶壶时,仍有足够多的背景点供ICP汇聚。但是,过大或太长的场景运动会造成追踪失败。

        第二,而我们的系统支持实时重建,表面预测将会随着时间细化,这是利用一个连续的加权平均的距离值实现的。考虑到获得更快的模型更新通过调整权重,新的TSDF值将获得更高的优先级,但是这种权衡折中的代价是额外的噪声被引入重建当中。在实际运行中,权重的选择要对重建的质量以及基于场景内变化的重建定期更新这两个方面进行平衡。但是,这并不支持连续移动的场景。通常,用户自由地在场景中移动会造成相关的深度数据只能被部分的并入人体的范围。由于摄像机追踪直接依赖于这个模型,而这个模型在这种情况下与实时数据不一致,错误也就随之发生了。

ICP异常值分割


        这里为核心GPU流水线提供了一种新扩展,用来着手探讨用户与重建场景之间的动态交互(图14)。这项技术采用了一种密集ICP追踪的独特的性质。当所有的深度测量都开启的时候,投影数据关联中的异常值会形成一个强有力的初步预测,这个预测关于部分独立于摄像机运动的场景运动——条件是有足够的刚性背景点足以使ICP仍旧收敛。我们的解决方案稳健地将一个移动中的前景物体从背景中分离出来,使追踪错误减少,并且使用户可以在场景中直接进行交互。

        这种GPU流水线假定至少要刚性场景的一部分已经利用核心重建流水线初步重建完成(标记为a)。初始扫描过后,进入场景中的运动物体包含着定向点,这些点与已经重建的表面之间有着显著的差别。这些错误的ICP投影数据关联被复制到一个异常值映射(标记为b)。接下来,一个深度感知关联的组成分析开始在异常值映射上运行,来聚集大的相关的碎片并删除较小的由传感器噪声引起的异常值(标记为c)。在侦测到有前景场景运动处,大的相关的碎片被掩盖在输入深度映射用来核心“背景”重建(标记为d)。这会阻止在核心流水线中相关的前景深度测量被用于重建或追踪。大块的异常值可以利用第二个区块(潜在运行于一个有着不同重建设定的独立GPU)被另外重建。最后一步光线投射到两个独立的区块并且将两者的输出合成(标记为f),使用与图12相同的方法。

        总的来说,我们的技术在稳定跟踪方面得到了引人瞩目的成果,而且因此提高了对于静态背景的重建质量,即使当场景的部分区域持续在镜头前运动时又能达到以上的效果。此外,这个技术可以健壮地分离出一个前景物体,并且潜在地独立于背景重建。

检测在任意曲面的触摸


       流水线可以通过观察前景和背景之间的交叉部分进一步扩展到支持多点触摸输入。我们扩展背景体积的默认的光线投射,输出一个触摸地图,伪代码如列表4所示。使用光线投射的前景顶点地图作为输入,每个GPU线程再次沿光线通过背景体积。若过零点可以定位,则相应的前景顶点(沿相同的射线)将被检测(第6行)。若前景和背景在可变范围之内,则该前景位置是在触摸地图的输出上。触摸地图的深度关联的成分分析法不仅抑制了噪声,也随着跟踪时间的加长标注了图像域中的疑似指尖。在平面和非平面的表面上应用多点触摸的例子如图10和图16。

建立动态场景建模


       目前已经可以从背景中稳定的区分出移动的前景,这提出了个有趣的问题:如何最好地重建这样的移动表面。面临的主要挑战就变成了如何把前景数据整合到第二个体积里面,这样表面测量值之间的对应关系就可以随着时间加长有所确保了。作为一个初步的探索,我们在另一个ICP实例中已经试验了单独预测前景对象的姿势。这次同样也是以密集ICP进行,但只使用前景有向点(从实时深度图和用光线投射的第二个体积得来)。在实践中,我们发现,即使前景的微小部分非刚性运动,密集ICP也收敛。一个令人信服的例子是即使手指的移动非刚性,用户的手臂(图15)的刚性部分ICP收敛。这提供了一个相对于全局摄像头变换,预测前景对象的姿势的粗糙方法。

       使用此预测的姿势,可以对齐排列深度测量值并将其融合到所述第二体积。 前景的表面预测随着时间增加可以建立起来,并逐渐变得更加精细完整。由于前景表面可能会被移动,我们给予整合进来的新的测量值更多的权重。一个简单的扩展使用每体素的权重,该权重基于TSDF(整合之前)的导数的动态平均值不断调整。

       这使我们能够调整单个表面体素的权重,当变化率 高的时候(如手指或手部)给新的测量值高权重,若TSDF测量值稳定(如前臂)降低其权重。 图16和图15中展示了基于前景ICP跟踪和每体素的自适应加权的初步结果。可以看出结果中比原Kinect的数据相当大的降低了噪音——用户的手臂,手和手指都清晰可辨——而这个前景重建发生在侧摄像机跟踪和背景重建的完善过程中。

       对于我们的物理模拟,我们现在可以把整个前景重建表示为静态颗粒,使移动的用户和动态粒子之间的碰撞一帧一帧(如图9中所示)进行建模。这重建移动的前景的方法,也可以是纯粹用来跟踪,持在用户手中的刚性物体的姿势——使跟踪不依赖摄像机运动,并且无标记或该对象的先验知识。一个例子如图1(右一)所示是已经重建的茶壶(图5),六维自由度被跟踪并以真实的物理对象重新登记。

六 . 结论


       我们提出了KinectFusion——用一个移动的标准Kinect实现实时三维重建交互系统。我们的贡献有三。

       首先,详细描述了一个新的GPU流水线,只使用一种商用摄像头和图形硬件就可实时实现3D追踪,重建,分割,渲染和互动;
       第二,已经验证了本系统核心的新应用方法:低成本的对象扫描和先进的AR和基于物理属性的交互;
       第三,描述了同时进行分割,跟踪和重建动态用户和背景场景的新方法,使在任何室内场景任意曲面的几何形状上多点触控成为可能。

       我们相信,这是第一次重建系统的用户在场景中直接交互达到这个级别。我们希望进一步扩展系统,重建更大的场景,在该场景中可能需要更有效的内存表示方法,如八叉树[29]。受我们的初步结果的鼓舞,我们也希望探索更细粒度的方法来跟踪和重建移动变形表面,包括用户。我们希望的是,无论是在底层技术,还是互动可能性上,KinectFusion都能打开许多新的课题研究。

你可能感兴趣的:(计算机视觉)