“近年来,随着AR,VR,虚拟试衣,自动驾驶等领域的兴起,三维重建技术得到了广泛的应用。今天分享一篇来自三维匠心的关于三维重建的综述文章。”
那么“基于RGB-D相机的三维重建"和传统的SFM和SLAM算法,到底有什么区别?
首先,输入数据流不同。在基于RGB-D相机的三维重建中,输入有深度信息和彩色信息,并且深度信息起主导作用,而在SLAM和SFM算法中输入的是主要是彩色信息,个别工作也有结合深度信息。
其次,侧重点不同。SLAM框架类算法中,定位还是主体。我们通常需要定位能实时响应,而稠密地图的构建通常规模和计算量都较大,因此地图的构建却不一定需要实时。当然,地图比较稀疏时,也能实时建图,但并不满足实际需求。另一种思路是以建图为主体,定位次之,旨在构建稠密准确的高质量地图,这种高质量地图可以提供给SLAM算法定位使用,而基于RGB-D相机的三维重建”便是满足上述需求的一种方法。
“基于RGB-D相机的三维重建”以及“基于深度相机的三维重建“和“基于fusion系列方法的三维重建”其实是三种等价的说法。由于该领域发表的大多数工作都在标题里带有“fusion”,业内也简称这些相关工作为“基于fusion系列方法”,所以本文中也使用“基于fusion系列方法”来描述。
基于fusion系列的三维重建其实可以大体分为两种,一种是对于静态场景的三维重建,以KinectFusion为典型代表,一种是对于动态场景的三维重建,以DynamicFusion为典型代表。而不论是静态场景亦或是动态场景的fusion系列重建,最大特点就是使用了TSDF模型(截断符号距离函数模型),当然也有个别工作使用了面元(Surfel)的表示方法(面元简单来讲就是点,法线,颜色,权重,半径以及时间戳等属性的集合)。值得一提的是,基于动态场景的三维重建的难度远大于基于静态场景的三维重建,当然,对于拓扑不会发生变化的重建(比如驱动一个三维网格模板模型),难度会下降很多。
为了更好的理解fusion系列方法,这里在介绍下TSDF模型。TSDF全称是Truncated Signed Distance Function缩写,译为截断符号距离函数。通常我们先选定要建模的三维空间,比如2m×2m×2m那么大,然后将这个三维空间分割成许多小块,分辨率通常为256×256×256或是128×128×128,每一个小块被称为体素。
TSDF模型中每个体素存储的是该小块与其最近的物体表面的距离。如果该小块在该物体表面的的前面,则它存储一个正值;如果该小块位于物体表面之后,那么就存储一个负值。进一步,通常认为物体表面是有厚度的,所以把值太大和值太小的都置为1或是-1,这样就得到了截断之后的距离,也就是所谓的TSDF模型。最后按照定义,TSDF为0的地方就是重建表面所在。换种说法就是TSDF数值由负数过渡到正数的地方。如下图中人脸就出现在TSDF值改变符号,即TSDF值为0的地方,如下图。
再来说说Surfel,如下图。
Surfel这种表示方法最早于2000年提出用于模型渲染,如下图所示,每一个Surfel可以理解成一个小面片,包含以下要素:
-
空间点坐标,即面片位置;
-
空间法向量,即面片方向;
-
颜色;
-
权重,即根据当前点到相机的距离进行初始化,距离越远,权重越小;
-
半径,即由当前表面到相机光心的距离决定,距离越大,半径越大;
-
时间戳;
下面分别介绍下代表性工作。
1
基于静态场景的三维重建
1.KinectFusion
KinectFusion是Richard A. Newcombe的经典之作。该系统仅需要一个移动的低成本深度相机,便可以重建任意并且较为复杂的室内场景。其核心思想将Kinect传感器采集的深度数据流实时融入到(fusion into)一个当前场景对应的全局的隐式表面模型(TSDF模型)中,并使用一个由粗到精的迭代最近点(ICP)算法跟踪当前采集的深度帧数据与上文的全局的隐式表面模型之间的相对关系,从而获得Kinect传感器的位姿变化。
同时这个系统也有着不足之处,该系统只能重建小于7立方米的体空间。主要原因有两点:由于该系统采用稠密的体积表示方式,因此需要消耗大量内存;另外在重建较大建筑时不断累积的误差会造成“飘移”现象。以上两点原因使得Kinectfusion无法重建较大建筑。
论文链接:https://www.microsoft.com/en-us/resea