多视图三维重建

1. 算法概览

多视图重建是利用多张一个场景的不同视角图片来恢复出场景三维模型的方法,自然场景的多视图三维重建一直是计算机视觉领域的基本问题,有着广泛的应用。
我们首先来看下多视图三维重建得到的模型。如下图所示,通过用户提供的相机参数act文件,彩色图和深度图,我们可以得到如下重建模型:

图1

2. 知识点回顾

2.1 深度图恢复

视频序列的深度恢复是指利用摄像机跟踪得到的摄像机位姿参数通过匹配恢复每一帧图像的稠密深度信息,其表示可视化结果如下图所示:左边两幅图是视频序列中的两帧,右边为恢复得到的这两帧的深度信息(这里用灰度图表示,像素越亮表示距离越近),关于常用的深度恢复算法的分类可参考文献[4]和这个PPT。

图2

算法基本原理在课程中单视图与多视图重建一节有相应的讲述,论文[5]中也做了非常详细的介绍,建议仔细阅读论文[5],对算法的一些关键的细节进行理解。这里仅介绍一下算法主要流程。

1.构造总能量函数

如论文[5]所述,本实验是将深度恢复问题看作是一个马尔可夫随机场(MRF)上的能量优化问题。需要优化的能量函数为:
E(D^;I^)=t=1n(Ed(Dt;I^,D^\Dt)+Es(Dt))E(\hat{D};\hat{I})=\sum_{t=1}^n(E_d(D_t;\hat{I},\hat{D}\backslash D_t)+E_s(D_t))

其中能量下标d和s分别表示数据项(data term) 和平滑项( smooth term),关于这两项的定义和计算方法在论文[5]中都有非常详细的介绍,任务要求之一是按照论文的思路实现对应的能量表示。

2.使用Graph Cut / Belief Propagation优化能量

定义好上述的能量函数之后,我们的目标是优化(即最小化)上述的函数,从而求出最佳的解(在本实验中解即是每个像素的label)。这是一个MRF上的能量优化问题,可以用graph cut optimization或者belief propagation来进行优化求解。这两种算法分别在参考文献[2][3]中有详细的介绍并且都有源代码可以使用。任务要求之二就是修改利用已有的GC/BP源码以优化我们上述定义的能量。GCO下载

下载GCO后,请同学们先仔细阅读GCO_README.TXT,然后阅读example.cpp,大致了解这个库是怎么用的,怎样去求解MRF问题。正如上述提到的,这里最重要的概念是数据项和平滑项,而gco-v3.0正是需要同学们对数据项和平滑项进行定义。对此,同学们可以仔细阅读example.cpp里面的这几个函数:

void GridGraph_DfnSfn(int width,int height,int num_pixels,int num_labels);

int smoothFn(int p1, int p2, int l1, int l2); //这个函数定义了平滑项

int dataFn(int p, int l, void *data); //这个函数定义了数据项

了解了这个库是怎么用之后,同学们便可着手定义自己的smoothFn和dataFn,去优化2.1中所定义的总能量了

2.2. 深度图采样

得到深度图以后,首先对深度图进行非均匀采样以获得每帧的三维点集,非均匀采样主要根据局部区域深度是否平滑来确定采样半径,对于平滑的部分,我们认为细节较少,采样半径增大,反之,采样半径减小,这样可以在不损失细节的基础上减少采样点。接着我们对每个采样点进行多帧的深度一致性度量,剔除部分深度误差较大的三维点。采样效果如下图所示

图3

2.3. 多视图采样点融合

对得到的所有采样点,我们都计算一个对应的置信度信息,该置信度通过计算当前采样点的深度是否为其深度邻域内的最优深度来衡量的。计算公式如下:

F(P(x^t))=tN(t)Ftt(P(x^t))N(t)F(P(\hat{\mathrm{x}}_t))=\frac{\sum_{t'\in N(t)}F_{t\to t'}(P(\hat{\mathrm{x}}_t))}{N(t)}
其中F(P(x^t))F(P(\hat{\mathrm{x}}_t))统计三维点P(x^t)P(\hat{\mathrm{x}}_t)在相邻参考帧的置信度平均值, Ftt(P(x^t))F_{t\to t'}(P(\hat{\mathrm{x}}_t))表示 P(x^t)P(\hat{\mathrm{x}}_t)tt' 帧上计算的置信度。对于每一个参考帧上的置信度计算,我们对当前深度邻域内的多个深度,计算每个深度投影到参考帧上对应点的颜色误差,该颜色误差可以使用SSD来计算,然后将计算得到的最小颜色误差与采样点深度所对应的颜色误差的比值来作为该采样点的置信度,如果比值较大,则说明当前深度是局部最优的,因此置信度较高。利用置信度剔除掉错误的采样点,并按置信度由大到小的次序来进行多帧三维采样点的融合并剔除多帧之间重复冗余的三维点,从而获得整体场景的三维点云。得到的点云效果如下:
图4

2.4. 3D模型提取

利用融合后的三维点云使用Poisson表面重建的算法提取完整的场景几何模型,具体算法请参考文献1,该项目中可以直接使用泊松重建代码
重建得到的模型结果如下:
图5

3. 实验要求

选择一个RGBD数据集下载,通过参考框架代码,要求实现数据加载,深度图恢复,深度图采样,采样点融合,模型提取的功能.

不限制实现平台,可以使用给出的框架代码,输入的序列在100帧内,需要提供样例输入输出及点云采样和点云融合的中间结果,随代码一同上交。

单人完成Bonus项会酌情加分,多人组队则必做Bonus项。

推荐数据集: NYU Depth Dataset V2,ScanNet,TUM,SUN RGBD。

参考代码: 深度恢复框架代码(RAR) 深度图采样与融合框架代码(RAR)

必做:

  1. 通过输入的彩色图,深度图和相机位姿输出一个模型文件
  2. 设计深度图采样,采样点融合,程序能够输出这两个模块的中间结果,中间结果可以通过程序本身或meshlab查看。

Bonus:

深度图恢复:根据RGB图像和相机位姿参数恢复稠密深度信息,相机位姿参数可以通过重建工具(例如colmap)获取或用数据集中自带的参数。与深度重建模块合并,最终达到根据RGB图像和相机位姿参数生成稠密模型。
(根据实现的方法数和实现的方法效果,最多8分)

4. 参考文献

[1] Guofeng Zhang, Jiaya Jia, Tien-Tsin Wong, and Hujun Bao. Recovering Consistent Video Depth Maps via Bundle Optimization.IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2008.
[2] P. Felzenszwalb, D. Huttenlocher. Efficient Belief Propagation for Early Vision.
International Journal of Computer Vision, Vol. 70, No. 1, October 2006
[3] Vladimir Kolmogorov, Ramin Zabih:
What Energy Functions Can Be Minimized via Graph Cuts? IEEE Trans. Pattern Anal. Mach. Intell. 26(2): 147-159
[4] D. Scharstein and R. Szeliski. A taxonomy and evaluation of dense two-frame stereo correspondence algorithms. International Journal of Computer Vision, 47(1/2/3):7-42, April-June 2002.
[5]MICHAEL KAZHDAN, HUGUES HOPPE. Screened Poisson Surface Reconstruction. ToG, 2013.