三维重建方法总结
1. 简介
- TSDF:Truncated Signed Distance Function (截断符号距离函数)
- 三维重建的定义
- 三维重建是指根据单视图或者多视图图像重建原始三维信息的过程。单视图缺少深度、多视角信息,基于单视图的三维重建效果较一般。基于多视角图像的三维重建,充分利用了多视角拍摄信息,其先对摄像机进行标定并计算出摄像机的图像坐标系与世界坐标系的关系,然后利用多个二维图像重建出三维信息
- 三维重建应用场景:
- 自动驾驶
- 虚拟现实
- 数字孪生
- 智慧城市
- 重建目标:
- 物体重建
- 场景重建
- 人体动态重建
- 目前(2023年)主流的三维重建方法主要分为以下两类:
- 基于深度相机(结构光、TOF、双目摄像头)的三维重建
- 基于图像的三维重建
1.1 传统的三维重建算法
1.2 三维重建领域主要的数据格式
- 深度图(depth map)
- 2D图片,每个像素记录从视点到物体的距离,以灰度图表示,越近越黑
- 体素(voxel)
- 体积像素概念,类似于2D之于像素定义
- 点云(point cloud)
- 每个点包含有三维坐标,乃至色彩、反射强度信息
- 网格(mesh)
- 即多边形网格,容易计算
2. 主流重建方法
- 基于图像的三维重建技术的实质就是利用照相设备或者录像设备采集的、对显示三维场景或者物体离散的二维图像作为基础数据,经过处理得到场景或者物体的三维数据信息,从而生成真实的场景或者物体,然后通过合适的空间模型把全景图像组织为虚拟的实景空间,用户在这个空间中可以前进、后退、环视、近看、远看等操作,实现用户全方位观察三维场景的效果,采用这种建模技术可以实现普通计算机上的真实感图形绘制。
- 当前(2023年)三维重建技术主要分成两大技术方向:
- 基于视觉几何的传统三维重建
- 这种三维重建方法研究时间较久远,技术相对成熟。其主要通过多视角图像对采集数据的相机位姿进行估计,再通过图像提取特征后进行比对拼接完成二维图像到三维模型的转换
- 基于深度学习的三维重建
- 这种方法主要使用了深度神经网络超级强大的学习和拟合能力,可以对RGB或RGBD等图像进行三维重建。这种方法多为监督学习方法,对数据集依赖程度很高。由于数据集的收集和标注问题,目前多在体积较小的物体重建方向上研究较多。
- 基于视觉几何的传统三维重建
2.1 多视几何三维重建
- 单目三维重建方法只使用一个相机重建三维物体。根据使用的图像数目,单目三维重建方法可以进一步分为两种。
2.1.1 SfM(Structure from Motion)方法
- 为了获取三维的信息,需要改变相机的位置或物体的角度,从而获取多个角度的图像来实现重建。
- 整体的流程包括:
- 第一步:对每张图片检测特征点(featurepoint)并提取特征点的特征描述子(如SIFT)
- 第二步:对每张图片中的特征点进行匹配,建立特征点在所有图像中的轨迹,并且去除不满足几何约束的匹配(例如通过八点法和RANSAC方法估计基本矩阵、移除异常点)
- 第三步:求取摄像机的内参(intrinsic parameter,包括焦距、像素长宽、相机主点坐标、畸变参数),和每张图的外部参数(extrinsic parameter,相机的旋转、平移参数),如下面两图所示;
- 第四步:通过特征点的坐标和相机的内、外部参数,通过三角化计算得到点的三维坐标,得到稀疏的重构;
- 第五步:使用Bundle Adjustment进行结果的优化,通过调整相机参数的估计值和三维点的坐标,使三维点反向投影回图像时的误差最小化。
2.2 基于双目/多目视觉
- 双目视觉主要利用左右相机得到的两幅校正图像找到左右图片的匹配点,然后根据几何原理恢复出环境的三维信息。但该方法难点在于左右相机图片的匹配,匹配地不精确都会影响最后算法成像的效果。多目视觉采用三个或三个以上摄像机来提高匹配的精度,缺点也很明显,需要消耗更多的时间,实时性也更差。
- 这两种方法理论上都可较精确恢复深度信息,但实际上受拍摄条件的影响,其精度往往无法得到保证。常见的有SGM和SGBM算法等,其中自动驾驶数据集KITTI中,排名前五十的算法几乎有一半都是对SGM的改进。
2.3 基于消费级RGB-D相机
- 最早,由帝国理工大学的Newcombe等人于2011年提出的Kinect Fusion开启了RGB-D相机实时三维重建的序幕。此后有 Dynamic Fusion和Bundle Fusion等算法。
- 这些方法它们各自有着各自的优点和缺点,同样有各自所适用的应用范围。
2.4 基于深度学习的三维重建
- 基于深度学习的三维重建方法依赖于大规模的标注数据集,而大场景数据的采集和标注工作量非常大,基于深度学习的三维重建方法多采用物体或人体标注数据集来实现。近几年该方向的一些经典方法包括:
- 基于单张RGB图像的三维重建
- 基于多视图的三维重建
- 基于点云数据的三维重建
2.4.1 基于单张RGB图像的三维重建
- 该算法可分成两个部分:
- 特征提取:全卷积神经网络
- Mesh表示:图卷积神经网络表征三维mesh,并对三维mesh不断进行形变,目标是得到最终的输出
- 该方法不需要借助点云、深度图等其他数据,直接从单张RGB图片直接重建出待重建物体的三维mesh
2.4.2 基于多视图的三维重建
- 采用深度学习实现二维图像到对应的三维Voxel模型的映射 (3D-R2N2):
- 标准CNN编码器网络对原始输入图像进行编码
- 标准Deconvolution解码器网络对其解码
- 网络中间层用LSTM进行连接。LSTM单元按3D网格结构进行组织,每个单元接收一个从编码器网络输出的特征向量,并将他们输送到解码器网络中。每个LSTM单元重构输出体素中的一部分
- 通过Encoder-3DLSTM-Decoder的网络结构,建立了二维图像到三维Voxel模型的映射
2.4.3 基于点云数据的三维重建
- 输入为给定的一张RGB或RGBD图像数据,通过PointOutNet网络实现完整的三维形状重建,并将最终输出的模型通过点云(Point cloud)的形式来表示。其中点云中点的个数为1024,对于小物体而言已经足够,但应用于大规模场景或物体三维重建时,该数值需要根据实现场景进行调整。
2.5 按数据源格式分类
- 依据处理的数据形式不同将研究简要分为三部分:1)基于体素;2)基于点云;3)基于网格。而基于深度图的三维重建算法暂时还没有,因为它更多的是用来在2D图像中可视化具体的三维信息而非处理数据。
2.5.1 基于体素
- 体素,作为最简单的形式,通过将2D卷积扩展到3D进行最简单的三维重建:
- Depth Map Prediction from a Single Image using a Multi-Scale Deep Network, 2014
- 该方法是用深度学习做三维重建的开山之作,基于体素形式,其直接用单张图像使用神经网络直接恢复深度图方法,将网络分为全局粗估计和局部精估计,并用一个尺度不变的损失函数进行回归。
- 3D-R2N2: A unified approach for single and multi-view 3d object reconstruction, 2016
- Christopher等人基于体素形式提出的3D-R2N2模型使用Encoder-3DLSTM-Decoder的网络结构建立2D图形到3D体素模型的映射,完成了基于体素的单视图/多视图三维重建(多视图的输入会被当做一个序列输入到LSTM中,并输出多个结果)。
- 但这种基于体素的方法存在一个问题,提升精度即需要提升分辨率,而分辨率的增加将大幅增加计算耗时(3D卷积,立次方的计算量)。
2.5.2 基于点云
- 相较而言,点云是一种更为简单,统一的结构,更容易学习,并且点云在几何变换和变形时更容易操作,因为其连接性不需要更新。但需要注意的是,点云中的点缺少连接性,因而会缺乏物体表面信息,而直观的感受就是重建后的表面不平整。
- A Point Set Generation Network for 3D Object Reconstruction From a Single Image, 2017
- 该方法是用点云做三维重建的开山之作,最大贡献在于解决了训练点云网络时候的损失问题,因为相同的几何形状可能在相同的近似程度上可以用不同的点云表示,如何用恰当的损失函数来进行衡量一直是基于深度学习用点云进行三维重建方法的难题。
- Point-Based Multi-View Stereo Network, 2019
- 该方法通过对场景的点云进行处理,融合三维深度和二维纹理信息,提高了点云的重建精度。
2.5.3 基于网格
- 前2种方法的缺点:
- 基于体素:计算量大,并且分辨率和精度难平衡
- 基于点云:点云的点之间缺少连接性,重建后物体表面不光滑
- 相较而言,网格的表示方法具有轻量、形状细节丰富的特点,重要是相邻点之间有连接关系。因而研究者基于网格来做三维重建。网格是由顶点,边,面来描述3D物体的,这正好对应于图卷积神经网络的M=(V,E,F)所对应。
- Pixel2Mesh
- 用三角网格来做单张RGB图像的三维重建,相应的算法流程如下:
- Step1:对于任意的输入图像都初始化一个椭球体作为初始三维形状。
- Step2:将网络分为两部分:一部分用全卷积神经网络来提取输入图像的特征,另一部分用图卷积网络来表示三维网格结构,
- Step3:对三维网格不断进行变形,最终输出物体的形状。
- 模型通过四种损失函数来约束形状,取得了很好的效果。贡献在于用端到端的神经网络实现了从单张彩色图直接生成用网格表示的物体三维信息。
- 用三角网格来做单张RGB图像的三维重建,相应的算法流程如下:
3. TSDF
- Truncated Signed Distance Function (截断符号距离函数)
- 是实时3D重建经典算法,简单可并行,极大推动了实时三维重建的发展。TSDF是SDF的改进,将取值限制在[-1,1]之间,同时仅在物体表面的限定的距离范围内进行计算,降低了计算量。
- 原理:用一个大的空间包围盒(volume)去包括进去待3D构建的场景,volume分成多个voxel(小立体方块):
3.1 定义
- TSDF(Truncated Signed Distance Function)是截断符号距离函数的缩写,各个体素的截断符号距离组成了 TSDF 场。理解 TSDF 首先要理解下符号距离 SDF。如下图所示:
- d s d_s ds:相机光心到表面的距离
- d v d_v dv:相机光心到到射线上体素 x ⃗ \vec x x的距离
- d ( x ⃗ ) d(\vec x) d(x):符号距离 S D F ( x ) = d ( x ⃗ ) SDF(x) = d(\vec x) SDF(x)=d(x)
- 当 d ( x ⃗ ) > 0 d(\vec x) > 0 d(x)>0时,表示体素在平面前方
- 当 d ( x ⃗ ) < 0 d(\vec x) < 0 d(x)<0时,表示体素在平面后方
- 体素的概率值是我们更新体素距离的方式。因为体素距离平面过远时,其数值对于平面影响过小;因此通常都会采用 TSDF 设定一个阈值
δ
\delta
δ来截断,类似下图:
- 用公式定义如下:
T S D F ( x ) = { 1 , if x > δ S D F ( x ) ∣ δ ∣ , if − δ ≤ x ≤ δ − 1 , if x < δ TSDF(x) = \begin{cases} 1, & \text{if $x > \delta$} \\ \frac{SDF(x)}{\left| \delta \right|},& \text{if $ -\delta \le x \le \delta$}\\ -1, & \text{if $x < \delta$} \end{cases} TSDF(x)=⎩ ⎨ ⎧1,∣δ∣SDF(x),−1,if x>δif −δ≤x≤δif x<δ - 在 2D 平面上,一个简单的 TSDF 场类似下面的样子:
3.2 融合
3.2.1 权重
- 有了上述 TSDF 的定义,想要对于多个不同帧的同一个体素观测进行更新,首先要定义体素的概率,考虑到一个显然的事实,对于一个深度传感器来说,测量数据的方差与角度有关:
- 一种基本的权重定义如下:
w ( p ) = c o s ( θ ) d i s t a n c e ( v ) w(p) = \frac{cos(\theta)}{distance(v)} w(p)=distance(v)cos(θ) - d i s t a n c e ( v ) = d v distance(v) = d_v distance(v)=dv
3.2.2 更新
-
对于同一个体素多次不同观测,我们采用如下方式更新:
-
初始化
{ T S D F 0 ( x ) = 0 W 0 ( x ) = 0 \begin{cases} TSDF_0(x) = 0 \\ W_0(x) = 0 \end{cases} {TSDF0(x)=0W0(x)=0 -
更新TSDF和W值
{ T S D F i ( x ) = W i − 1 ( x ) ⋅ T S D F i − 1 ( x ) + w i ( x ) ⋅ t s d f i ( x ) W i − 1 ( x ) + w i ( x ) W i ( x ) = W i − 1 ( x ) + w i ( x ) \begin{cases} TSDF_i(x) = \frac{W_{i-1}(x) \cdot TSDF_{i-1}(x) + w_i(x) \cdot tsdf_i(x)}{W_{i-1}(x) + w_i(x)} \\ W_i(x) = W_{i-1}(x) + w_i(x) \end{cases} {TSDFi(x)=Wi−1(x)+wi(x)Wi−1(x)⋅TSDFi−1(x)+wi(x)⋅tsdfi(x)Wi(x)=Wi−1(x)+wi(x) -
t s d f 和 w tsdf和w tsdf和w:表示更新之前的观测值 (对于相机视野外的情况 w = 0 w=0 w=0 ,对于视野内的情况 w = 1 w=1 w=1)
-
T S D F 和 W TSDF和W TSDF和W:表示更新之后的值
-
反复执行上述操作即可将新的帧融合到之前的帧上
NeuralRecon (2021)
- Real-Time Coherent 3D Reconstruction from Monocular Video
- NeuralRecon 网络结构
- I t {\mathbf I_t} It:一系列单目图像
- ξ ∈ S E ( 3 ) {\xi} \in \mathbb S \mathbb E(3) ξ∈SE(3):相机位姿轨迹,由一个SLAM系统提供
- S t g \mathbf S_t^g Stg:重构的全局TSDF Volume