孙晓明,任 磊
(浙江理工大学信息学院,浙江杭州 310018)
三维重建是计算机视觉、计算机图像学领域的研究热点,旨在从二维图像数据集或场景视频中获得三维数据模型,以三维立体信息展示。随着科技的发展,智能手机硬件集成度不断提高,尤其是相机小型化、集成化,使移动端拥有良好的场景信息采集能力。高效、准确的三维重建技术在众多领域得到应用,如虚拟现实(Virtual Reality,VR)、增强现实(Augmented Reality,AR)、智慧城市、军事作战、文物保护和地图构建等。基于RGB-D 的三维重建技术不仅限于静态场景重建,在动态重建方面也取得长足进展。
Roberts[1]在1963 年首次使用计算机视觉方法从二维图像中获取三维信息,从此三维重建技术不断发展,成果显著。基于移动端的三维重建利用智能手机的传感器同时进行惯性测量单元(Inertial Measurement Unit,IMU)数据、RGB 图像和深度图像采集,实时重建三维立体场景。2010 年,微软开始使用Kinect 进行相关开发,之后,陆续出现Intel RealSense、PrimeSense Carmine、Google Tango 等类似深度相机。RGB-D 的实时重建在计算机视觉领域及计算机图像学领域引起巨大反响。此后,在静态、动态场景重建方面涌现出众多切实有效的算法。
随着计算机视觉技术的不断发展,采用深度相机进行动作识别、场景、建模等相关应用越来越多。彩色相机拍摄的图片得到相机视角内的场景颜色信息并记录下来,却不包括深度信息,而深度相机能够获取场景的深度信息,解决了该问题。通过获取的深度图像,人们能准确知道图像中每个点与相机的距离(景深),附加该点2D 图像中对应的(x,y)坐标就可计算得到图像中每个点的空间坐标,建立截断符号距离函数(Truncated Signed Distance Function,TSDF)体素模型,从而实现场景的三维重建[2]。
目前主流的深度相机方案分为3 种,其性能如表1 所示。
(1)基于结构光(Structured Light)的深度相机。通过近红外激光器将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集[3]。具备一定结构的光线会因拍摄物体的不同深度区域而采集不同的图像信息,然后通过运算单元换算成深度信息,以此获得三维结构。
(2)基于光飞行时间(Time-Of-Flight)的深度相机。通过测量光飞行时间来测量距离[4]。其工作原理是通过向目标连续发射激光脉冲,然后通过传感器接收反射光线,通过探测光脉冲的飞行往返时间得到目标距离。
(3)基于双目立体视觉(Binocular Stereo Vision)的深度相机。基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,通过计算图像对应点间的位置偏差获取物体的三维几何信息[6]。
Table 1 Comparison of camera performance of different depths表1 不同深度相机性能比较
IMU 模块数据包括3 轴陀螺仪、3 轴加速度计以及磁力计等传感器。惯性传感器之间相互独立且不易相互影响,并可相互校正。但加速度计和陀螺仪数据精确性常受到随机噪声影响,且积分求解位移及旋转时,随着时间的推移误差累积较大,数据仅在短时间内稳定可靠。而磁力计易受当地环境影响,需要预先校正。因此,一般不采用直接积分计算位姿的方法。
多传感器融合的方法可以得到较好的位姿计算结果[6]。目前,位姿计算主要采用视觉传感器组合IMU 传感器的融合方案。视觉传感器在特征点明显、丰富的场景下效果较好,但遇到像玻璃、白墙等特征点较少的环境时基本无法工作;IMU 传感器长时间使用有非常大的累积误差,优点是短时间内相对位移数据精度很高,所以采用视觉传感器和IMU 数据融合可相互弥补不足,得到较好的位姿计算结果。
基于滤波器的紧耦合方法(Filter-based Tightly Cou⁃pled Method),将图像的特征向量加入系统状态向量中联合求解。基于滤波器的经典紧耦合算法有MSCKF[7]、ROVIO[8]等,基于滤波器的松耦合方法(Filter-based Loose Coupled Method)则不将图像的特征点向量加入系统状态向量,而将图像作为单独部分计算位姿,与IMU 数据求解结果进行融合,联合求解最优位姿。
静态场景重建与同时定位、地图构建(Simultaneous Lo⁃calization and Mapping,SLAM)相类似,但SLAM 更加注重机器人在未知环境中的导航问题[9]。在计算机图形学中,通过3D 密集重建生成高质量的三维场景[10],大多数方法都基于Curless 等[11]的基础研究,开创了体素融合的先河,从而为第一个实时RGB-D 重建方法提供了基础[12]。
RGB-D 相机所获得的深度图噪声包括相机中心到目标物体的距离,以及深度图中像素点的位置与RGB 图像位置的偏移等[13],而双边滤波可以保持边缘降噪平滑,对深度图进行噪声消除[14]。将深度图像素点投影到相机空间坐标,获取3D 点云[15]:
其中,(u,v)表示深度图中的像素坐标,d 表示该点对应的深度值,K 为相机的内参矩阵,(X,Y,Z)是(u,v)表对应的点云坐标。
相机位姿估计可获得相机运动的旋转矩阵和平移矩阵。位姿估计需计算点云的法向量,存储法向量信息的点云作为输入参数求解位姿。
Besl[16]与Chen 等[17]最先采用基于迭代最近点(Itera⁃tive Closest Points Algorithm,ICP)的Frame-to-Frame 算法。通过相邻帧的ICP 匹配算法计算从前一帧Tt-1到当前帧Tt的位姿相对变化:
通过开发快速且有效的ICP 算法,使手持扫描设备能实时反馈[18]。实时反馈使用户在重建过程中能及时修补重建缺失部分并确定重建是否完成,但基于相邻帧的ICP算法在长时间的扫描过程中会引起漂移积累问题。
为了减少漂移问题,实时RGB-D 重建采用Frame-to-Model 跟踪策略[19-20]。Frame-to-Model 算法利用当前帧点云数据与匹配后的模型上一帧位姿的点云数据进行ICP 匹配。Frame-to-Model 算法相对于Frame-to-Frame 算法有两个显著优点:①通过当前重建状态合成渲染深度图代替最后一帧来确定重建结果,大大减少了时间跟踪漂移;②采用Point-to-Plane 距离矩阵,通过稳定模型法向来定义切平面,取代带有噪声的法向输入,从而获得更高的跟踪准确性,增加重建系统鲁棒性。
尽管Frame-to-Model 算法显著减少了时域跟踪漂移,但却没有很好地解决局部追踪误差积累,局部追踪误差仍会累计到三维重建过程。为了克服上述问题,基于全局位姿优化方法首次应用于非实时3D 重建方法,通过使用手持消费级传感器生成高质量的重建结果,其核心方法是通过保留局部细节并结合全局位姿优化在场景中平均对齐误差。Dai 等[21]的BundleFusion 方法实现了基于实时集束调整策略和表面重积分技术的全局一致性实时重建。
基于Frame-to-Frame、Frame-to-Model 或全局优化相机跟踪算法大多需要匹配对应点,将对应点输入优化方法中计算出最佳的整体对齐变换。根据匹配方式分为稀疏匹配和密集匹配,稀疏匹配采用主要特征点进行匹配,密集匹配则希望找到所有或大部分点的对应关系。
稀疏匹配通常将当前颜色和深度输入值的特征点与先前帧或模型中的特征点进行匹配来计算一组稀疏对应关系。Zhou 等[22]以及Henry 等[23]提出的3D 场景重建方法采用SIFT 进行特征采集和特征匹配。稀疏特征描述还可采用SURF、ORB 等描述。密集匹配方法通过Point-to-Plane 误差度量测量空间点的距离接近程度,Point-to-Plane度量可以作为到目标物体表面距离的一阶近似值。
3D 模型主要有两种方式表示获取的RGB-D 数据:①规则或分层3D 体素网格;②3D 点云。
Curless 等最先采用体素融合方法表示3D 模型,使用规则网格存储符号距离函数(Singed Distance Function,SDF)的离散值,这种方式被Rusinkiewicz 采用从而第一次实现了实时重建算法,此后被Newcombe 等采用实现实时重建系统。基于体素的模型表示方法通常使用SDF 隐式存储模型曲面,曲面的外部、内部体素分别存储最近曲面的正、负距离值,而几何曲面被定义为SDF 中的过零点。附加属性值比如颜色值等,通常存储在每个体素属性中。在重建方法中人们更关心的是模型表面附近的体素值,因此常采用TSDF 方法。
规则体素网格需要预先定义体素和分辨率。在实时场景重建方面,大多数算法都很依赖现代图像处理器(Graphics Processing Unit,GPU)的计算能力,而体素网格表示的空间范围以及分辨率通常受到GPU 内存限制。
另一种模型的有效表示方法是采用有层级的体素(Volumetric)表示,如八叉树结构,其中TSDF 可在实际曲面附近以稀疏形式编码;Zeng 等[24-25]使用固定4 层分层结构存储TSDF,将八叉树分为顶层、分支层、中间层和数据层,仅将TSDF 存储在最高级;Chen 等[26]提出应有固定分辨率的类似三层结构存储表示。
除了基于体素的表示方法之外,Keller 等[27]和Whelan等[28]的重建方法都是基于稀疏点云表示的重建方法。点云附加信息,例如点的大小、直径、颜色和其他信息都存储在每个点的属性中。将一组新的点数据加入点云模型时,需要在新加入点和模型点中间建立明确的对应关系。如果使用视觉反馈,那么单个点的简单渲染会产生带有孔洞的不完整渲染图像。为了渲染密集图像,通常应用Point-Splatting 技术,即将每个3D 点都以一定的半径圆投影到2D图像上,从而得到密集图像。
高质量非刚性运动物体三维重建是一项极具挑战的课题,尤其是在要求实时重建的目标情况下。动态场景重建在计算机视觉、人机交互、生物学以及医学等众多领域有重要意义。
动态场景重建技术在虚拟现实(VR)和增强现实(AR)等领域也得到应用。Keller 等[27]基于动态场景计算分割前景并在计算相机位姿时排除在外,从而在大部分场景运动时得到鲁棒的相机追踪效果。
动态场景重建一个重要课题是使重建方法相对于运动对象具有鲁棒性。基于隐式距离函数的体素融合方法,如KinectFusion,仅限于静态场景表面实时重建。如果场景中含有多个运动物体,就要使用几个相互独立的体素模型进行跟踪与重建。Jaimez 等[29]将场景分为静态部分和动态部分进行重建;Dou 等[30]假定预先扫描场景为静态场景,对相机进行实时在线追踪,将场景的动态部分进行分割并分别重建。
Newcombe 等[31]的Dynamic Fusion 方法首次实现了无模板实时三维重建,使用单一消费级深度相机(MicrosoftKi⁃nect)实时重建了物体几何运动;Guo 等[32]使用基于密集反射率一致性数据来取代颜色一致性假设。基于密集反射率一致性可以更好地处理光源变化,并在大尺度刚性、非刚性运行时获得更稳定的跟踪。
Slavcheva 等[33]提出Killing Fusion 方法,解决了物体快速运动和拓扑变化问题。该方法对输入帧TSDF 和当前模型TSDF 进行融合迭代。
本文从传感器、静态场景重建、动态场景重建以及工作流程等方面对基于RGB-D 的三维重建工作进行总结。在过去数年中,基于RGB-D 相机的实时三维场景重建得到极大发展,在许多实际场景中得到应用,但有几个方向值得关注:
(1)复杂情况下的三维重建。由于重建场景环境影响,基于RGB-D 的三维重建仍然困难,阴影、遮挡、光照等条件对重建效果有很大影响。
(2)计算复杂度、实时性。基于RGB-D 的三维场景重建实时性得益于现代计算机技术的发展,在较高的硬件条件(GPU)下才能实现。降低算法复杂度,在有限计算资源下实现实时重建是未来的一个重要发展方向。(3)目前,基于RGB-D 相机的三维重建在静态场景实时重建方面已经表现良好,但在动态场景重建方面仍有欠缺。(4)移动终端的移植、发展。智能手机的发展使相机集成度不断加强,如何实现移动智能终端高质量的实时三维场景重建是值得研究的课题。