《增强现实:原理、算法与应用》读书笔记(7)稠密深度估计

《增强现实:原理、算法与应用》读书笔记(7)稠密深度估计

增强现实技术除了要恢复相机参数和场景的稀疏结构,有时候为了更好地处理遮挡关系和合成阴影,还需要恢复出场景的稠密三维结构。因此,稠密深度估计也是增强现实技术中很重要的一环。

深度计算方法有很多种,常见的主要有立体匹配法、光度立体视觉法、色度成形法、散焦推断法以及基于深度学习的方法等,其中最常用的就是立体匹配的方法。

立体匹配是利用多视图几何原理,从不同视角拍摄的多幅图像,通过匹配恢复出场景的三维信息。

双视图立体匹配

利用相机模仿人类的双目视觉系统,从左右视图中找出匹配的点,通过三角几何关系计算出该点的深度。在相机参数已知的情况下,利用极线约束,可以将匹配点的搜索范围由二维降到一维,从而极大减少计算量。

为了匹配方便,一般会对左右视图进行校正,让两个视图朝向相同并且垂直于基线,从而只需要在水平扫描线上进行匹配搜索。

目前,基于双视图的深度恢复技术已经发展的比较成熟了,按优化方法不同,可以分为局部优化方法和全局优化方法。

局部优化方法

局部优化方法一般采用基于局部窗口的匹配方式,每个像素独立地通过比较局部窗口的颜色相似度来寻找匹配点并计算深度。常用的基于窗口的相似度比较方法有误差平方和算法、绝对误差和算法、归一化互相关算法等。

基于局部窗口的匹配方法,实际上假设窗口内的像素的深度值是相同的,但在深度不连续边界区域不满足这个条件,容易产生误匹配。从不同的视点观察深度不连续区域,还很容易产生不同的遮挡关系,影响匹配的准确性。

因此,窗口的大小很关键,窗口太小容易受噪声影响,窗口太大,计算的深度不准确,一些细小结构和不连续边界附近的深度会变得不准确。

为此一些学者提出了自适应窗口(Kanade et al., 1994)和自适应权重(Yoon et al., 2006)方法。

全局优化方法

全局优化方法除了考虑像素自身的颜色,还同时考虑它和相邻像素之间的深度平滑性,通过求解一个全局目标函数来实现整张图像的深度估计。

全局优化方法一般是构造并优化一个满足马尔科夫随机场(Markov random field,MRF)的目标函数:
E = ∑ x ( E d ( x ) + ∑ y ∈ N ( x ) E s ( x , y ) ) E=\sum_{x}(E_d(x)+\sum_{y\in N(x)}E_s(x,y)) E=x(Ed(x)+yN(x)Es(x,y))

式中, N ( x ) N(x) N(x)表示像素 x x x的邻域,数据项 E d E_d Ed一般是基于匹配代价(如基于颜色一致性约束)来定义,例如两个匹配点的颜色差的绝对值;平滑项 E s E_s Es要求相邻像素之间的视差是光滑变化的。考虑到不连续边界的视差突变情况,平滑项一般可以被定义成截断函数的形式,如下面这个形式:
E s ( x , y ) = λ ( x , y ) ⋅ m i n { D ( x ) − D ( y ) , η } E_s(x,y)=\lambda(x,y)\cdot min\left \{ D(x)-D(y), \eta\right \} Es(x,y)=λ(x,y)min{D(x)D(y),η}

式中, η \eta η决定函数的上界, x x x y y y是相邻像素, λ ( x , y ) \lambda(x,y) λ(x,y)通常定义为各向异性的方式,使得深度不连续性跟颜色或亮度的突变相吻合。 D ( x ) − D ( y ) D(x)-D(y) D(x)D(y)用来衡量临近像素的视差变化。一般用图割算法或置信度传播算法来求解目标函数。

全局优化方法一般比局部优化方法的结果要好,但是计算复杂度较高。

对于遮挡和弱纹理区域,即使采用了全局优化方法也依然难以恢复高质量的深度。一些方法专门针对这些问题提出了相应的改进。对于弱纹理区域,常采用基于分割的方法。基于分割的方法将颜色相似的像素进行聚类,从而将图像分为若干块区域,每块区域的三维表面用一个三维平面来近似。

基于分割的方法虽然可以有效解决纹理区域的深度恢复问题,但是平面近似会使得有些区域的深度恢复精度降低,而一旦分割有误差,必然也会导致错误分割区域的深度恢复错误。对于遮挡区域,直接进行匹配必然会导致结果不理想,因此一些全局优化方法引入可见性变量,对遮挡区域进行显式判断:

如果一个像素被判断为遮挡,就不用计算匹配代价,而是直接设定一个惩罚常量。由于难以同时求解出深度和可见性变量的值,一般采用迭代求解的策略:先固定可见性变量,求解出深度,然后固定深度变量,重新求解可见性变量,反复迭代直至收敛。

这类方法一定程度上可以提高深度恢复的可靠性,但增加了计算复杂度,而且迭代策略也极易陷入局部最优解。

多视图立体匹配

双视图立体匹配很容易受到噪声影响,尤其难以处理遮挡,如果有三章或更多图像,噪声和遮挡问题就能得到更好的解决,恢复的深度精度也就越高。

多视图情况下,相机的位置一般不会正好共线,所以难以将其矫正到像双视图那样的标准立体图配置在扫描线上寻找匹配点。

一般的做法是,对于每个给定的深度,根据相机参数将其投影到其他视图上计算匹配代价。由于多视图情况下,对应点的二维坐标偏移不再简单地跟深度成反比,为了更好的求解深度,一般用逆深度(即 d = 1 / z d=1/z d=1/z)来表达,比深度更能反映匹配的精度。一般将逆深度 d d d离散化成若干级,例如假定逆深度范围 [ d m i n , d m a x ] [d_{min},d_{max}] [dmin,dmax],将逆深度划分成 n + 1 n+1 n+1等份,生成 n + 1 n+1 n+1个深度候选值,第 k k k级深度为 d k = n − k n d m i n + k n d m a x , k = 0 , ⋯   , n d_k=\frac{n-k}{n}d_{min}+\frac{k}{n}d_{max},k=0,\cdots,n dk=nnkdmin+nkdmax,k=0,,n,如果采用全局优化方法,我们可以直接套用全局优化目标函数 E = ∑ x ( E d ( x ) + ∑ y ∈ N ( x ) E s ( x , y ) ) E=\sum_{x}(E_d(x)+\sum_{y\in N(x)}E_s(x,y)) E=x(Ed(x)+yN(x)Es(x,y)),一般只需要对数据项做一些修改。

在多视图情况下,可以将视图 i i i的每个像素 x x x投影到各个帧上,计算匹配代价并求和来定义数据项:
E d ( x , d ) = ∑ i ′ C ( x , d , I i , I i ′ ) E_d(x,d)=\sum_{i'}C(x,d,I_i,I_{i'}) Ed(x,d)=iC(x,d,Ii,Ii)

式中, C C C就是用来衡量视图 i i i中的像素 x x x与和它在视图 i ′ i' i上对应的像素 x ′ x' x(给定逆深度预测值)的匹配代价。最后,利用图割或BP算法优化目标函数,在 n + 1 n+1 n+1个逆深度候选值中选取最佳逆深度值。

如果每帧独立求解深度图,由于噪声、遮挡和优化不稳定等原因,恢复的深度图可能不理想,而且时空一致性欠佳。如果只是简单地在相邻帧的深度估计上施加平滑性约束,由于对应点难以完全准确建立,而且很容易受错误点影响,效果往往不理想,容易导致过平滑效应。

但是,对于视频序列来说,遮挡和估计错误很像是一个时序上的噪声,基于这一观察,提出了一个集束优化模型(Zhang et al., 2009b),通过引入几何一致性,以多帧统计的方法,将整个视频序列的深度图关联起来。不同于传统的方法在时域上施加平滑性约束,而是在数据项中将几何一致性和颜色一致性结合起来,定义如下逆深度似然概率:
L ( x , d ) = ∑ i ′ p c ( x , d , I i , I i ′ ) ⋅ p ν ( x , d , D i ′ ) L(x,d)=\sum_{i'}p_c(x,d,I_i,I_{i'})\cdot p_\nu(x,d,D_{i'}) L(x,d)=ipc(x,d,Ii,Ii)pν(x,d,Di)

式中, p c p_c pc是颜色一致性因子, p ν p_\nu pν是几何一致性因子,用来衡量 x x x x i ′ → i x^{i'\rightarrow i} xii在图像位置上的接近程度。理想情况下,当把 x ′ x' x i ′ i' i帧投影回到 i i i帧,投影像素 x i ′ → i x^{i'\rightarrow i} xii应该满足 x i ′ → i = x x^{i'\rightarrow i}=x xii=x。但是,由于匹配误差, x i ′ → i x^{i'\rightarrow i} xii x x x可能是两个不同的位置,几何一致性就是要使得这个差异性尽可能小。

逆深度概率,本质上要求一个正确地逆深度需要同时满足两个条件,即对应的像素之间既有很高的颜色相似性,又有很高的几何一致性。一个正确的逆深度会使得 L ( x , d ) L(x,d) L(x,d)的值比较大,而其他错误的逆深度值,则很难同时满足颜色一致性和几何一致性约束,输出的值往往很小。在多帧统计的情况下,逆深度概率能够很好的将正确逆深度值和其他错误逆深度值区分开。

在引入几何一致性后,数据项 E d E_d Ed定义如下:
E d ( D i ; I ^ , D ^ ∖ D i ) = ∑ i = 1 n ( 1 − u ( x ) ⋅ L ( x , D ( x ) ) ) E_d(D_i;\hat I,\hat D\setminus D_i)=\sum_{i=1}^{n} (1-u(x)\cdot L(x,D(x))) Ed(Di;I^,D^Di)=i=1n(1u(x)L(x,D(x)))

式中, I ^ = { I i ∣ i = 1 , ⋯   , n } \hat I=\left \{ I_i|i=1,\cdots,n \right \} I^={Iii=1,,n}表示整个图像序列, D ^ = { I i ∣ i = 1 , ⋯   , n } \hat D=\left \{ I_i|i=1,\cdots,n \right \} D^={Iii=1,,n}表示对应的图像序列, u ( x ) u(x) u(x)是一个自适应的归一化因子,即 u ( x ) = 1 / m a x D i ( x ) L ( x , D i ( x ) ) u(x)=1/\underset{D_i(x)}{max}L(x,D_i(x)) u(x)=1/Di(x)maxL(x,Di(x))

集束优化模型的目标函数定义如下:
E d ( D i ; I ^ ) = ∑ i = 1 n ( E d ( D i ; I ^ , D ^ ∖ D i ) + E s ( D i ) ) E_d(D_i;\hat I)=\sum_{i=1}^{n} (E_d(D_i;\hat I,\hat D\setminus D_i)+E_s(D_i)) Ed(Di;I^)=i=1n(Ed(Di;I^,D^Di)+Es(Di))

式中, E s E_s Es是平滑项。在求解之前,我们需要对深度图进行初始化才能计算数据项。初始化方法就相当于传统的立体匹配方法,也就是将几何一致性去掉,这样可以每帧独立地估计深度。

另外,可以采用mean-shift分割技术将图像分割成若干块,并对每个块进行平面拟合来改善弱纹理区域的深度估计结果。在完成初始化之后,可以以迭代的方式优化目标函数:从第1帧开始,依次优化到最后一帧;在优化逆深度图像 D i D_i Di的时候,其他逆深度图像固定不变。一般这样迭代优化两遍就能收敛到比较好的结果。

深度学习方法

深度学习也是近年来用于进行深度估计的一种方法,我们可以将图像看作输入,深度图看作对应的输出,中间的处理过程当成求一个函数变换。因此,深度估计的任务就是找到这个函数。

近几年利用深度学习来估计的研究越来越多,根据训练的样本性质,可以大致将这些方法分为基于监督学习和基于非监督学习两类。

基于监督学习的深度估计需要大量带有真实深度的图片数据作为训练样本,要预先获得场景深度一般需要用RGB-D摄像头(如Kinect)或者激光雷达来扫描。利用这些带有深度的训练样本对神经网络进行反向传播,从而训练神经网络对相似场景深度的预测。

Eigen等(2014)提出了一个基于卷积神经网络的单张图像的深度估计方法。该工作提出了一个多尺度的神经网络,由粗网络和精细网络两部分构成,粗网络是一个AlexNet网络,利用输入图像做一个全局的场景深度预测,作为精细网络的一部分输入,然后精细网络在整体预测上进行局部区域的优化。

之后,Eigen等(2015)对这个工作进行了改进,提出了一个多任务的多尺度神经网络,该网络不仅可以预测深度,还可以预测法线以及分割。在网络结构上,之前的AlexNet被换成了VGG网络,而且尺度数目从2增加到了3。

基于深度学习的单目深度恢复虽然可以在跟训练数据类似的场景中可以得到不错的结果,但是,由于深度学习方法不像传统的基于多视图几何原理的方法有精确的数学模型和几何原理支持,容易在泛化性上出问题。而传统的多视图几何方法在弱纹理区域的深度估计上容易出现问题。

随着深度学习的发展,也有很多传统深度恢复方法和深度学习相结合的研究,其中比较经典的有文献(Zbontar et al., 2016)。根据文献(Scharstein et al., 2002)的总结,一个传统的立体匹配算法大致分为四步:(1)匹配代价计算;(2)代价聚合;(3)视差计算;(4)视差优化。LeCun等采用深度学习的方法来训练和计算匹配代价,之后的步骤采用已有方法。

还有一些工作提出利用条件随机场(conditional random field,CRF)来进行基于监督学习的深度估计。

以上介绍的方法都是基于监督学习的深度估计方法,训练样本需要带有真实值。Garg等(2016)提出了一个基于非监督学习的深度估计方法,利用视差关系,先用左视图 l l l作为输入图像,然后经过卷积神经网络训练出一个深度图,再结合右视图得到相应的左视图 l ′ l' l,最后比较 l l l l ′ l' l的误差作为目标函数反向训练模型。基于训练好的模型就能直接预测出输入的单目图像的深度图。

不过利用视差关系求深度,一般首先需要知道相机参数。Zhou等(2017)提出在相机参数未知情况下,同时用网络训练得到相机的参数和图像深度,算得上是彻底的无监督学习方法了。

数据集和测评网站

无论是传统的深度估计方法还是基于深度学习的方法,都需要大量全面的数据来测试训练。这里介绍几个常用的数据集和测评网站。

(1)Middlebury数据集( https://vision.middlebury.edu/stereo/)该网站提供了立体匹配的标准测试集,包含各种纹理、光照、阴影的数据。该网站还提供直接对算法进行测评的工具,并且有当前各种算法的性能排名。

(2)KITTI数据集( https://www.cvlibs.net/datasets/kitti/eval_object.php)是目前最大的自动驾驶场景下的计算机视觉算法评测数据集,包含丰富的街景数据,而且深度真实值是用激光雷达获取的,比较准确可信。

(3)CVonline网站( https://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htm

(4)NYU数据集( https://cs.nyu.edu/~silberman/datasets/nyu_depth/v2.html)是用Kinect拍摄的室内数据集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值