版权声明:本文为博主原创文章,未经博主允许不得转载。
纯视觉的三维重建(不考虑用结构光的那一类)常用的有两大类方法:一类是SfM,缺点是计算量比较大,做不到实时运行;另一类是KinectFusion为代表的用深度相机做实时重建,缺点是一般只能在室内小范围运行。REMODE(REgularized MOnocular Depth Estimation)[1]是用单目RGB相机实现三维重建的不错的工作,可以像SfM一样实现大范围的三维重建(比如配合无人机),又可以像KinectFusion一样实时运行。第一作者Matia Pizzoli从2012年11月到2014年4月(LinkedIn上的资料)在苏黎世大学Davide Scaramuzza的实验室做博士后,REMODE就是在此期间完成的。第二作者Christian Forster从2012年到2016年跟着Davide Scaramuzza读博士,有两个比较重要的工作,一是SVO(Matia Pizzoli是第二作者),二是IMU预积分。两个人现在都在Oculus做计算机视觉算法工程师。
整体来看,REMODE并没有特别的学术创新,更像是融合现有技术挖掘新的应用场景,就像是搭配几个不错的食材炒了一盘新的菜。REMODE主要借鉴了以下四种技术:
- 1)深度滤波器[2]。这是最核心的技术,可以从概率分布的角度融合多帧观测估计出像素的深度信息。论文[2]本身已经可以做稠密三维重建,作者的个人网站上有四个demo视频(http://george-vogiatzis.org/real_time_mvs/)。REMODE在实验评估部分也是和论文[2]做比较。
- 2)论文[4]和DTAM[5]的正则化损失函数(regularized cost),目的是平滑表面。由于深度滤波器是单独计算每个像素的深度,没有考虑像素与像素之间的约束关系,所以重建出的表面会有很多毛刺、噪声。对正则化损失函数优化求解后,可以得到更好的重建效果。
- 3)SVO[3]。论文[2]中,作者在物体周围贴了很多marker来辅助估计相机的位置姿态。而REMODE直接用了SVO,不需要贴marker。
- 4)凸优化[6],加速求解正则化损失函数。
本文主要解读深度滤波器和正则化损失函数,这两部分内容是REMODE的核心,解决了估计深度的问题。SVO可以参考之前的文章。凸优化那篇论文很有影响力,2011年到现在已经有2000多的引用量,但是是纯数学推导,就没细看。按REMODE中的描述,该方法根据原损失函数构造了一个新的函数(primal dual formulation),优化时交替地对prima variable和dual variable分别执行梯度下降和梯度上升,可以达到加速优化求解的作用。
1. 深度滤波器
深度滤波器的本质是贝叶斯估计:已知先验概率分布,根据新的测量值求出后验概率分布。所以可以很方便地一步一步迭代求解,计算效率高。深度的观测值是沿极线找到匹配然后三角化得出的,这一过程很容易产生误匹配导致“坏测量”。所以深度滤波器把观测值的分布看成正态分布和均匀分布的叠加,“好测量”(内点)服从围绕真值的正态分布,“坏测量”(外点)服从区间$[d_{min},d_{max}]$内的均匀分布,具体公式如下:
$$p(d_k|\hat{d},\rho)={\rho}{N}(d_k|\hat{d},\tau_k^2)+(1-\rho){U}(d_k|d_{min}, d_{max})$$
其中,$\rho$和$\tau_k^2$分别是内点的概