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

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

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

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

双视图立体匹配

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

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

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

局部优化方法

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

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

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

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

全局优化方法

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

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

式中,N(x)N(x)N(x)表示像素xxx的邻域,数据项EdE_dEd​一般是基于匹配代价(如基于颜色一致性约束)来定义,例如两个匹配点的颜色差的绝对值;平滑项EsE_sEs​要求相邻像素之间的视差是光滑变化的。考虑到不连续边界的视差突变情况,平滑项一般可以被定义成截断函数的形式,如下面这个形式:
Es(x,y)=λ(x,y)⋅min{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η决定函数的上界,xxx和yyy是相邻像素,λ(x,y)\lambda(x,y)λ(x,y)通常定义为各向异性的方式,使得深度不连续性跟颜色或亮度的突变相吻合。D(x)−D(y)D(x)-D(y)D(x)−D(y)用来衡量临近像素的视差变化。一般用图割算法或置信度传播算法来求解目标函数。

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

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

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

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

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

多视图立体匹配

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

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

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

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

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

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

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

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

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

在引入几何一致性后,数据项EdE_dEd​定义如下:
Ed(Di;I^,D^∖Di)=∑i=1n(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=1∑n​(1−u(x)⋅L(x,D(x)))

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

集束优化模型的目标函数定义如下:
Ed(Di;I^)=∑i=1n(Ed(Di;I^,D^∖Di)+Es(Di))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=1∑n​(Ed​(Di​;I^,D^∖Di​)+Es​(Di​))

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

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

深度学习方法

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

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

基于监督学习的深度估计需要大量带有真实深度的图片数据作为训练样本,要预先获得场景深度一般需要用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)提出了一个基于非监督学习的深度估计方法,利用视差关系,先用左视图lll作为输入图像,然后经过卷积神经网络训练出一个深度图,再结合右视图得到相应的左视图l′l'l′,最后比较lll和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拍摄的室内数据集。

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

  1. 《算法导论》读书笔记(七)

    <算法导论>读书笔记之第16章 贪心算法-活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优 ...

  2. 机器视觉算法与应用读书笔记(算法)

    机器视觉算法与应用读书笔记(算法) 1.数据结构 2.图像增强 1. 灰度值变换 2. 辐射标定 3. 图像平滑 1. 时域去噪法 2. 空间域去噪法 均值滤波器 递归线性滤波器:将上次计算得到的值带 ...

  3. 《算法图解》读书笔记

    这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西. 粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!" <<算法图解>&g ...

  4. 《算法图解》读书笔记—像小说一样有趣的算法入门书

    前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...

  5. 《基于压缩传感的匹配追踪重建算法研究》读书笔记

    基于压缩传感的匹配追踪重建算法研究 1.压缩感知与传统数据获取和处理过程比较: 压缩感知理论表明,在对信号获取的同时,就对数据进行适当的压缩. 传统的数据获取和处理过程主要包括:采样.压缩.传输.解压 ...

  6. 《深度学习与图像识别原理与实践》—读书笔记

    机器视觉在行业中的应用 机器视觉的发展背景 人工智能 人工智能(Artificial Intelligence, AI)是计算机科学的一个分支,其意在了解智能的实质,并生产出一种新的能以人类智能相似的 ...

  7. 【 算法图解 】 读书笔记

    一.算法简介 二分查找的速度比简单查找快得多. O(logn)比O(n)快.需要搜索的元素越多,前者比后者就快得越多. 算法运行时间并不以秒为单位. 算法运行时间是从其增速地角度度量的. 算法运行时间 ...

  8. 《从paxos到zookeeper分布式一致性原理与实践》读书笔记--第二章一致性协议--二阶段提交

    在分布式系统中,每一台机器节点虽然能够知道自己在进行事务操作过程中的结果是成功还是失败但无法直接获取其他分布式系欸但的操作结果.因此,当一个事务需要跨越多个分布式节点的时候为了保持事务的ACID特性, ...

  9. 区块连原理设计与应用读书笔记

    区块链思想的诞生: 区块链技术具备去中心化.防篡改.可追溯等众多金融领域十分需要的特点. 实现多方场景下开放.扁平化的全新合作信任模型,而这些都为实现更高效的资源配置,更具体的说是金融交易,提供有效的 ...

最新文章

  1. ORA-**,oracle 12c操作问题
  2. 十分流行的自举法(Bootstrapping )为什么有效
  3. Ubuntu安装软件失败
  4. 常见Android Native崩溃及错误原因
  5. 2017阿里云代码管理服务公测上线
  6. kafka和flume进行整合的日志采集的confi文件编写
  7. Python 计算机视觉(十二)—— OpenCV 进行图像分割
  8. Python学习笔记:web开发2
  9. python中怎么表示整数的点称为整点_智慧职教云课堂APPPython程序设计基础答案公众号...
  10. 清华计算机自主招生试题,2017年清华大学自主招生笔试题
  11. 微信小程序开发学习笔记007--微信小程序项目01
  12. 网站的基本功能:RBAC
  13. java面试题 Arraylist 与 LinkedList比较
  14. [LeetCode]168. Excel Sheet Column Title
  15. python 东方财富接口_东方财富开放交易api,我只想要东方财富软件交易功能
  16. 保姆级教程,阿里云快速搭建个人网站
  17. windows日趋苹果化?win11到Win12,妥妥MacOS的复刻版
  18. 秒拍3月短视频榜单发布,MCN化是2017年的大势所趋?
  19. jQuery插件库链接
  20. QT5.1标准对话框按钮显示英文问题解决办法

热门文章

  1. DFIG matlab 建模,matlab怎么搭建dfig
  2. 联想RD650服务器主板维修,免工具设计 徒手拆解ThinkServer RD650
  3. 染色法判断无向图是否为二部图
  4. RH358管理DHCP和IP地址分配--配置分配IPv6地址
  5. 分布式锁,redisson是如何解决死锁问题
  6. 你的下一台电脑又何必是电脑?【电子爱穿搭】
  7. 云米冰箱能控制扫地机器人_在云米的大屏冰箱就能操控其他智能家电?一起到京东618了解更多...
  8. linux用什么剪辑视频教程,极简主义:Linux视频剪辑利器Viedo Trimmer
  9. 华为AI计算机,华为在人工智能行业的发展
  10. 【物联网】物联网安全---编辑中