KinectFusion: Real-time 3D reconstruction and interaction using a moving depth camera
KinectFusion: Real-Time Dense Surface Mapping and Tracking
效果图
摘要
我们展现了系统对高精度实时地图复杂和任意室内场景在变化光照条件,使用仅仅一个移动低价深度相机和商用图形硬件。我们融合所有深度数据流从一个Kinect传感器到一个单个全局清晰表面模型的观察模型在实时情况。当前传感器姿态是同步获得通过跟踪深度帧相关到全局模型使用一个从粗到细迭代最近点(ICP)算法,使用所有观察深度数据。我们证明这个优势在跟踪针对增长的全表面模型对比逐帧跟踪,获得跟踪和图结果在连续时间在房间大小的场景受限下绘制和高精度。我们也展示了定性和定量结果分析,在各种方面我们的跟踪和地图系统。模型在自然场景,实时的只使用商用传感器和GPU硬件,允许一个存在的步骤对AR,尤其,它允许稠密的表面去重建实时的。在计算机视觉中,一个细致的、强健的方法远超当前的其它方法。
整体系统框架
该方法主要由四部分组成:
预处理:流程和公式如图2所示。先对原始深度图RkRk进行滤波降噪,这里选择双边滤波,目的是保持清晰的边界。一般的滤波是在空间域做加权平均,像素越靠近中心点,权重越高。双边滤波是在空间域加权平均的基础上再对值域加权平均,即像素灰度值越靠近中心像素的灰度值,权重越高。在边界附近,灰度值差异很大,所以虽然边界两边的像素在空间域靠在一起,但是由于灰度值差别非常大,对于互相的权重很低,所以可以保持清晰的边界,如图3所示。
图2:原始数据处理流程。
图3:双边滤波器
拿到降噪后的深度图DkDk之后,再根据相机内参KK,可以反投影出每个像素点的三维坐标,这就是Vertex map Vk。公式中u是像素坐标,u˙是对应的齐次坐标。每个vertex的法向量可以很方便的通过相邻vertex用叉乘得到。然后对深度图降采样,行数、列数各减一半。降采样使用的是均值降采样,即深度图上四个相邻像素的深度值被平均成一个值。构建三层金字塔的目的是为了从粗到细地计算相机位置姿态,有加速计算的效果。
表面重建更新:整个场景融合处理,给定姿态结果通过跟踪深度数据从一个新的传感器帧中,表面估计融入到场景模型中保持一个立体,截断有符号距离函数(TSDF)展示;
相机的位置姿态是用ICP (Iterative Closest Point) 求解的。ICP是处理点云的常规手段,通过最小化两块点云的差别,迭代求解出拍摄两块点云的相机之间的相对位置。有不同的方式来描述点云的差别,最常用的是point-to-point和point-to-plane两种。KinectFusion选择的是point-to-plane的方式,要把点到点的距离向法向量投影,如图4所示。2001年的一篇论文[3]详细比较了point-to-point和point-to-plane的效果,结论是point-to-plane要比point-to-point收敛速度快很多,而且更鲁棒。图5列出了[3]中的Figure15和16,比较了在两种点云形貌的情况下不同ICP的收敛速度和残差。
图4:Point-to-plane ICP.
表面预测:不像逐帧位姿估计展示在[15],我们关闭环在图和本地之间通过跟踪深度帧在整体融合模型。这个表现通过光线投影的有符号距离函数来估计帧,提供一个稠密表面预测对深度图对齐;
图6:TSDF的更新。
图7:TSDF的权重和相机观察方向的关系。
表面估计:传感器跟踪完成是使用一个多尺度的ICP对齐在表面预测和当前传感器测量,我们使用GPU进行处理。
更新完TSDF值之后,就可以用TSDF来估计voxel/normal map。这样估计出来的voxel/normal map比直接用RGBD相机得到的深度图有更少的噪音,更少的孔洞(RGBD相机会有一些无效的数据,点云上表现出来的就是黑色的孔洞)。估计出的voxel/normal map与新一帧的测量值一起可以估算相机的位置姿态。具体的表面估计方法叫Raycasting。这种方法模拟观测位置有一个相机,从每个像素按内参KK投射出一条射线,射线穿过一个个voxel,在射线击中表面时,必然穿过TSDF值为一正一负的两个紧邻的voxel(因为射线和表面的交点的TSDF值为0),表面就夹在这两个voxel里面。然后可以利用线性插值,根据两个voxel的位置和TSDF值求出精确的交点位置。这些交点的集合就呈现出三维模型的表面。
更多《计算机视觉与图形学》知识,可关注下方公众号: