A Taxonomy and Evaluation of Dense Two-Frame Stereo Correspondence Algorithms

A Taxonomy and Evaluation of Dense Two-Frame Stereo Correspondence Algorithms

Abstract: 
本文主要提出的是稠密的、两帧图像的立体匹配方法的分类方法。本分类法设计目的在于评估独立的立体匹配算法的不同组分及其设计方案。本平台对现有的多种立体匹配算法进行了比较和进行试验,收集了便于评估的数据集,建立了具有一般性的软件平台,设计了一种独立灵活地C++实现,该实现能评估独立组分并且能扩展至新的算法。同时我们加入了一些新的具有地面真值的多帧立体数据集,该数据集和代码都在网站中能找到。最后,对一些当今性能最好的立体算法进行了比较评估。 
1.Introduction(简介) 
立体算法难以测定其进展。且许多研究者都是定性评估其算法,更有甚者,有些算法已经严重过期,甚至可以追述至十年前。因而本文对该领域的现状进行了更新,尤其强调在立体匹配方法方面:(1)对于已知相机几何的两帧图像的操作;(2)产生稠密视差图,即对每一个像素的视差估计。 
本文两点目的: 
1.对已经存在的,对于其独立算法组件设计方案可以分割和比较的立体算法进行分类。 
2.为立体匹配算法提供定量测试平台。为实现该目的,在网站中放了测试数据以及一些匹配算法的样本执行及其执行结果。 
本文主要强调的是已标定的两帧图像的立体匹配方法,以期将核心放在对立立体匹配方法的基本组分的分析上。然而我们的方法很容易就被推广到多帧图像的立体匹配方法上,尤其是多基线立体方法及其平面扫描法的一般化。 
本文以对本研究的目标和作用范围的回顾来开始,本研究包含了相关分类的需求和深思熟虑的评估方法论。同时也回顾了视差空间表示,该内容在本文扮演重要角色。在第三部分,描述了本文的对于稠密的两帧图像立体匹配算法的分类。 
在第四部分,从主要的算法组分,组分的相互作用以及参数对于算法表现的控制等方面讨论了测试平台的执行。在第五部分,主要描述评估的方法论,包括我们如何得到已标定的、已知地面真值的数据集。第六部分,演示了评估不同算法组分的实验。第七部分,对20中当前的立体匹配算法进行了全局比较。第八部分,讨论所计划的未来工作。 
2.Motivation and scope(动机和适用范围) 
对一个已经存在的立体方法进行完整的研究,甚至是局限于稠密的、两帧图像的方法也十分困难,更何况每年有许多新方法产生。这一研究对于其他立体方法研究是否有价值,此外该研究是否称为覆盖全面的参考也还一直在争论。 
显然,很有必要有一个比较性的评估,来评价已有的和新的算法的性能,才能计量该领域的进度。Barron发表的在光流算法方面相似的研究[8]引起了关注。不单是使得研究者更好理解一般使用的算法的性能,还有就是新发布的算法需要在先前发布的技术[86]上在某些方面有所改善。Mitiche和Bouthemy所做的最近的研究[78]回顾了大量的图像刘计算方法并且回避了中心问题但没有提供任何实验结果。 
在立体匹配上,之前有两篇相当的文章[54,19]集中中稀疏特征匹配程序的性能上。两篇最近的文章[111,80],开发出了新的标准来评估基于图像的描绘和远程呈现应用的稠密立体匹配程序。我们的工作是由Szeliski和Zabih开始进行的工作[116]的继续,他们的工作比较了多种流行算法的性能,但并未给出详细的分类,或者是完成对各种算法的覆盖。这篇文章最初的版本是在2001年的CVPR关于立体和多基线视觉的研讨会上出现的[99]。 
如果每种办法都看成是一个黑箱而只把最终结果进行比较,那么像竞争的算法的评估有一定的局限性。而通过测试各个算法的独立组件能得到更多的见解。比如说,假设一个基于全局能量最小化的方法比其他方法好。那原因是因为有更好的能量函数还是更好的最小化方法呢?该最小化方法能否通过带入不同的匹配代价来改善? 
本文试图通过提供立体匹配算法的分类来回答上面的问题。该分类用于鉴定发布的算法独立组件和设计方案。希望该分类有助于组织该领域以及引导研究者发展新的更好的算法。 
2.1.Computational theory(计算理论) 
任何算法版本,明确地或隐性地假设物理世界和图像形成过程。换句话说,这是根本的计算理论[74,72]。比如,算法如何计算两幅图像上的点匹配?一种通用的假设是朗博表面,即该表面不随视角的变化而变化。一些算法也以特殊种类的相机噪声,偏差或者是增益的不同来进行建模。 
同样重要的是世界或场景几何的假设以及物体的视觉外观。从物理世界是由分段平滑的表面组成的这一事实出发,算法嵌入了平滑度的假设(通常是隐性的),如果没有该假设匹配问题将变得过少约束且病态的。在第三部分,为了对已经存在的立体方法进行分类,我们对匹配假设和平滑假设进行了测验。 
最后,大多数算法假设相机标定和对极几何。这是立体视觉能论证性地最好理解的部分;因而文中我们假设使用的是校正后的一对图像作为输入。对于立体相机标定和校正参考[130,70,131,52,39]。 
2.2. Representation(表示) 
理解一个算法的关键问题是其内部使用的表达以及外部输出。大部分立体匹配方法都是计算关于参考图像的单值视差函数d(x,y),该参考图像可能是输入图像,或者是一些图像中的“cyclopian” view堆积视觉。 
其他方法尤其是多视角立体方法,使用多值的[113],基于体的[101,67,34,33,24]或者层式的[125,5]表达。有些方法仍使用全3D表达,如可变性的模型[120,121],三角网格[43],或者是水平集方法[38]。 
由于我们的目标在于建立一个通用的平台来比较大量的方法,因而我们选择求一个单值的视差图d(x,y)作为输出。这一方法的中心在于视差空间(x,y,d)的概念。视差这一术语最先产生于人类视觉,用来描述左眼和右眼所看到的对应特征的定位差异[72]。水平视差是普遍研究情况,但是如果眼睛接近的话垂直视差也是可能的。 
在计算机视觉,视差长被当做深度的同义词[20,85]。最近,几个研究者将视差定义为三维空间(X,Y,Z)的三维映射变换(单应性)。在这样一个一般化的视差空间,能很容易通过平面扫描算法[30,113]列举出所有可能的匹配,对于每一个视差d,通过透视映射将所有图像映射到一个共同的平面。(注意这与计算机几何中的平面扫描的意义不同)。 
通常,我们更喜欢一般性的视差解释,因为这能是搜索空间适应输入相机的几何学[113,94];我们计划将这个扩展到将来的针对多图像的工作中。(平面扫面方法能推广到其他表面扫描上,如圆柱扫描)。 
本文中,所有图像都是通过光轴与相机移动平面垂直的线性轨迹得到的,传统的逆深度的解释已经足够[85]。深度空间的坐标(x,y)应该与输入数据集的参考图像的像素坐标空间相一致。图r中的像素坐标(x,y)与图m中的像素坐标(x’,y’)对应关系表示为。 
x’=x+s*d(x,y),y’=y (1) 
式中,s=1或s=-1,表示深度总是为正。注意到由于我们图像编号是从最左边到最右边的,那么像素式从最右边移到左边。 
指定视差空间后,来介绍视差空间图DSI[127,18]。通常,DSI是指任何的连续或离散版本的视差空间(x,y,d)的图像或者函数。实际上,DSI常代表的是d(x,y)隐含的一个特定匹配的置信或对数似然函数(即cost)。 
立体匹配算法的目的在于创建能正确描述场景形状的视差空间的单值函数。这可以看成是找一个嵌在具有最佳性能(如最低代价或最好的平滑度)[127]的视差空间图像里的表面。图1通过切开一个典型的视差空间图像展示了该例子。更多这类图像在[18]中能找到。 
3.A taxonomy of stereo algorithms(立体匹配算法分类) 
为了支持立体匹配算法的广泛比较,我们开为算法开发了分类表。我们提出了一些列的算法“构件”,在这些“构件”中,能创建大量的已存在的算法。我们的分类方法的依据是,立体匹配算法通常执行以下四步: 
1.匹配代价计算。 
2.代价(支撑)聚合。 
3.视差计算/优化。 
4.视差改善。 
真实地步骤序列还是取决于特定的算法。 
比如说,局部算法(基于窗口),对于其给定点视差计算,仅取决于所限定的窗口内的灰度值,常常通过聚合代价进行隐性的平滑假设。这些算法中,有些能被很干净地分解为1,2,3步。不如说,传统的平方差之和的算法能描述为以下: 
1.匹配代价是给定窗口的灰度值的平方差。 
2.在具有恒定视差的方形窗口内对匹配代价进行求和来实现代价聚合。 
3.通过选择每个像素的最小聚合值来计算视差。 
然而,一些局部算法结合第1步和第2步,使用基于支撑域的匹配代价,即归一化互相关[51,19]和秩变换[129]。(这也可认为是预处理步骤,见3.1) 
另一方面,全局算法进行显性平滑假设并且解决优化问题。这种算法显然不需要代价聚合这一步骤,而是寻找一个视差赋值,该赋值最小化了包含了数据和平滑项的全局代价函数。这些算法的主要区别在于所使用的最小化过程,即模拟降温[75,6],概率[平均场]扩散[97],或图像分割[23]。 
在这两个大类之中是一些迭代算法,这些迭代算法并不现实声明需要最小化的全局函数,但这一行为很像是模仿迭代优化算法[73,97,132]。分层(从粗糙到精密)算法类似于这种迭代算法,但典型的是表现为图像金字塔,其结果是以更粗糙的层级来限制更加精细层级的局部搜索[126,90,11]。 
3.1. Matching cost computation(匹配代价计算) 
最普通的基于像素的匹配代价包括灰度平方差[51,1,77,107]和灰度绝对差[58]。在视频处理领域,这些匹配标准被称为均方误差(MSE)和平均绝对差(MAD)方法;取代帧差异的项常常被用到[118]。 
更近的,鲁棒性方法,包含了截断二阶方法和污染高斯[15,16,97]。这些方法十分有用,因为他们限制了聚合时误匹配的影响。 
其他传统匹配代价包括标准化互相关[51,93,19],这与平方差之和很相似,还包括二值匹配代价(匹配/不匹配)[73],基于二值特征如边缘[4,50,27]或者是拉普拉斯迹象[82]。然而,二值匹配代价步长用在稠密立体方法中。 
一些代价对于相机的增益和偏差的差异并不敏感,比如说,基于梯度的方法[100,95]以及非参量变换方法如秩和统计变换[129]。当然,也可以通过针对偏执增益和直方图均衡化[48,32]的预处理步骤来纠正不同相机的特征。其他的匹配标准还包括相位和滤波组件的匹配响应[74,63,56,57]。最后,Birchfield和Tomasi提出一种对图像取样不敏感的匹配方法[12]。不仅仅是比较通过积分数值偏移来比较像素值(仅仅比较积分数值偏移会漏掉有效的匹配),他们将参考图像中的每一个像素与其他图像的线性插值函数进行比较。 
匹配带价值遍及所有像素并且所有视差组成了初始视察空间图像。 
我们的工作主要集中在两帧图像上,因为空间视差图像与一幅固定的参考图像τ相联系(等式(1)),因而对于视差空间图像,可以很容易地从两幅以上的图中整合信息,对于每幅图像m,进行简单的代价值求和。这是在多基线SSSD和SSAD后的方法[85,62,81]。如2.2中所提到的,使用平面扫描算法这一方法能扩展到任意相机配置中[30,113]。 
3.2 Aggregation of cost(代价聚合) 
局部和基于窗口的方法通过对视差空间图中的支撑域求和和求平均来聚合匹配代价。一个支撑域可以是一幅固定视差(主要是正面平行的)中的二维区域,也可以是一幅x-y-d空间(支撑斜面表面)中的三维区域。在二维中使用了方形窗口或者是高斯卷积来进行聚合,或者是多窗口锚点的方法(即窗口可变的方法[2.18]),或者是自适应窗口方法[84,60,124,61],以及基于恒定视差连接分量的窗口[22]。三维支撑函数中,提出了有限的视差差异[50],有限的视差梯度[88],以及相关性原则[89]。 
对于固定支撑域的聚合使用2D或者是3D卷积, 
或者当窗口是矩形的情况时,用高效的箱式滤波(移动平均数)。可变窗口也可以使用可分离的滑动最小滤波来高效执行(4.2部分)。一个不一样的聚合方法是迭代传播,即一种聚合(或者是求平均)操作,该操作通过重复将领域像素的代价加权值加到每一个像素的代价中去[113,103,97]。 
3.3 Disparity computation and optimization(视差计算和优 
化) 
局部方法. 在局部方法中主要强调的是匹配代价计算和代价聚合的步骤。计算最终的视差并不困难:简单地选择每个像素中与最小代价值相关的视差。然而这些方法的执行是一个局部的“赢家通吃”的过程。这些方法(亦或者是许多其他匹配算法)的局限性在于匹配的唯一性仅仅对一幅图像(参考图像)进行执行,然而其他图像中的点与许多点匹配。 
全局优化. 相比之下,全局方法几乎在整个视差计算阶段进行所有的工作并且略过了代价聚合这一步骤。许多全局方法都定制了能量最小化架构[119]。目的在于寻找使全局能量最小化的视差函数d。 
数据项测量的是视差函数d与输入图相对的一致性。使用视差空间公式化的方法, 
其中C是初始的或者聚合过后的匹配代价视差空间图。 
平滑项对由算法所做的平滑假设进行编码。为了进行便于计算操控的优化,评花香常常被限制在仅仅计算邻域像素的视差 
其中ρ是一个视差差异单调递增函数。(一个对于平滑函数的替代是使用一个更低维度的表示方法如样条曲线[112]) 
在基于正则化的视觉[87],ρ是一个二次函数,使得d变得平滑并且可能导致物体边缘的效果较差。不存在这种问题的能量函数称为连续性保护并且是基于鲁棒性的ρ函数的[119,16,97]。Geman及其衍生的文章[47]给出了对这种能量函数的贝叶斯解释[110]并提出了一种基于马尔科夫随机场(MRF)的非连续保护能量函数以及额外的西安国城。Black和rangarajan[16]展示了线过程如何能被鲁棒性正则化框架包括在内。 
平滑项也能依赖灰度差,即 
其中是单调递减的灰度差异函数,该函数降低高灰度梯度的平花代价。该想法[44,42,18,23]促使灰度不连续与灰度/颜色的边缘相一致,且恰好解释了一些全局优化方法的良好性能。 
全局能量被定义后,许多算法被用于寻找局部最小值。传统的与正则化和马尔科夫随机场相联系的方法包括有连续法[17],模拟退火法[47,75,6],最高置信度优先法[28],以及平均场法[45]。 
更近的,最大流法和图像分割方法被提出用以解决全局优化问题[92,55,23,123,65]的一个特殊类别。这种方法比模拟退火法更加高效并且产生了更好的结果。 
Dynamic programming. 全局优化算法中一个不同的类是指那些基于动态规划的。虽然对于平滑函数的普通种类等式(3)中的2D优化可能被显示为非确定性多项式困难问题[123],但是动态规划能在多项式时间为独立扫描线找到全局最小值。动态规划是首次用于稀疏的,基于边缘方法的立体视觉[3,83]。更近的方法主要集中在稠密(基于灰度)扫描线优化问题[10,9,46,31,18,13]。这些方法是通过从所有位于两条相应的扫描线之间的成对的匹配代价矩阵中计算最小代价路径来实现。通过将一幅图像中的一组像素赋值到另一方面图像中的一个像素上显式地解决了局部遮挡问题。图2展示了一个这样的例子。 
动态规划立体的问题包括了对于遮挡像素和强制内扫描一致性的正确代价的选择,尽管集中方法[83,9,31,18,13]中后者提出了寻址的方法。另外一个问题是动态规划方法需要强制单调性或者是时序约束[128]。这一约束要求在两个视图中同一扫描线的像素的相关时序保持一致,可能不会在场景中包含狭窄的前景对象。 
Cooperative algorithms. 最后是混合算法,是由人类立体视觉的计算模型而来,是最早提出的视差计算方法之一[36,73,76,114]。这种算法迭代地进行局部计算,但是使用导致总体行为与全局优化算法相似的非线性操作。事实上,在这些算法中,可能线性地描述了最小化全局函数[97]。近来,Marr和Poggio的混合算法正在发展[132]。 
3.4.Refinement of disparities(视差精炼) 
大多数立体匹配算法在离散空间计算一系列视差估计,即对于整数视差(异常包括连续优化技术如光流[11]或者样条曲线[112])。对于应用上如机器导航或者是人类追踪,这些要求精细视差。然而对于基于图像的绘制,这种量化的地图产生的综合结果并不精细(该场景看起来像是由许多剪切层组成的)。为了纠正这种现象,许多算法在初始的离散匹配阶段应用亚像素精细化步骤。(一种替代方式是简单地以更多离散视差层开始。) 
亚像素级视差估计有许多方法来计算,包括迭代的梯度递减方法和使曲线与匹配代价在离散视差平面拟合[93,71,122,77,60]。这样能很容易增加立体算法的分辨率而没有太多的附加计算。然而,如果需要有好的效果,待匹配的灰度必须平滑变化,待估计的区域需要在同一正确的表面。 
近来针对整数样本匹配代价提出了一些关于适应相关曲线可取性的问题[105]。当取样不灵敏差异方法使用后这一问题尤为明显[12]。我们在6.4中研究了这一问题。 
除了亚像素级计算,也有其他方式的后端处理来计算视差。遮挡区域能使用相互检验的方法(即比较左右图和右左图的视差图)[29,42]。一个中值滤波能用来清除假的不匹配点,由于遮挡产生的洞能通过表面拟合或通过表面分布的领域视差估计来填充[13,96]。在我们的实现中,由于打算测量原始算法组件的性能,因为没有清除这一步。 
3.5 Other methods 
并非所有稠密两帧立体匹配算法能根据我们的基础分类和表示来描述。在此我们简要提一些其他不在我们框架内的算法和表示。 
本文描述的算法首先列举了所有可能视差上可能的匹配,然后在一定程度上挑选出最好的匹配集合。在计算的视差中存在大量的歧义时,这是一个很有用的方法。一个替代方法是使用经典(无穷小)的光流计算。在此,图像相继地弯曲并且运动估计递增地更新直到得到一个满意的配准。这些技术最常用在一个从粗糙到精细的分级精细化框架内[90,11,8,112]。 
一个视差图的单值表示也并非高效。多值表示即能沿着每个视线表示多个深度值,多值表示当前被广泛研究,尤其是在大型多视点数据集上。许多这些技术使用的是基于立体像素的表示来对颜色和空间占用或者阻光度进行编码[113,101,67,23,33,24]。另一种更复杂的表示场景的方法是使用多层表示,每一层能通过一个面加上剩余视差来表示[5,13,117]。最后,多种多样的可变形的表面也已经用于进行3D模型重构[120,121,43,38]。 
3.6. Summary of methods(方法综述) 
表1给了一个一些有代表性立体匹配算法及其相应的分类的综述,即匹配代价,聚合,以及各自使用的优化技术。对方法进行了分组比较,比较其不同的匹配代价,聚合方法,以及优化技术,最后列出了一些不在框架内的文献。从表中可看出,许多可能的算法设计空间的子集已经被探索多年,虽然并不系统化。 
4.Implementation 
我们已经开发了一个多种立体算法的能独立运行且可移植的C++实现。该实现与第3部分中描述的分类紧紧联系在一起,同时现在包含了基于窗口的算法,传播算法以及使用动态规划的全局优化方法,模拟退火方法和图像分割方法。许多发布的算法包含了特殊特征以及后期处理步骤以改善结果,我们选择执行这些算法的基础版本来最直接评估他们各自优点。 
该实现是模块化并且能很容易扩展包含其他算法或其组件。我们计划在近期加入几种其他算法,并且希望其他作者也能贡献其方法至本框架。一旦一种新算法整合出来,就能很容易与其他使用本评估模型的算法进行比较,能够测量视差误差和重投影误差(5.1部分介绍)。该实现在说明参数值上包含了复杂的机制,支持在多样数据集上进行详细的性能比较的循环脚本。 
我们提供了代码的高级描述,使用相同的划分根据我们的分类划分为四部分。在代码中,这四部分依次执行,之后调用性能\质量鉴别器。最重要的算法参数表在表2中给出。 
4.1.Matching cost computation 
最简单可行的匹配代价就是对应像素的颜色/灰度的平方差或绝对值差。为了近似鲁棒匹配分数的影响[16,97],我们将匹配分数截至最大值match_max。当比较彩色图像时,在截断之前我们对每个通道的灰度平方差或者是灰度绝对值差进行求和,如果部分视差估计已经进行(disp_step<1),每条扫描线首先使用线性的或者是立体的插值滤波来进行插值(match_interp)[77]。我们也选择性地使用Birchfield和Tomasi的取样不敏感的基于区间的匹配准则(match_interval)[12],即我们取像素匹配分数的最大值且该分数在步长上位移,或者如果在两个间隔中存在符号变换的话则取0。我们将这一准则分别利用在每一个颜色通道上,在物理上貌似不合理(亚像素的漂移必定会跨越通道),但使得执行更加容易了。 
4.2. Aggregation 
本测试平台的聚合部分实现了一些普通的聚合方法(aggr_fn): 
l 箱式滤波器:使用一个可分离的移动平均滤波器(加入一个右边/底部的值,减去左边/上面的值)。这一执行技巧使得基于窗口的聚合方法从计算时间和在实时匹配器中看到的快速匹配性能的方面看,其对于窗口尺寸不敏感了[59,64]。 
l 二项式滤波器:使用一种可分离的FIR(有限脉冲响应)滤波器。我们使用系数,与Burt和Adelson的[26]中拉普拉斯金字塔中使用的一样。 
其他卷积核也能在后面被加进去,就像可以对IIR(无线脉冲响应)滤波器进行递归,这对于获得大窗口尺寸[35]是十分高效的方法。箱式和卷积核的宽度由aggr_window_size来控制。 
为了仿真可变换窗口[2,18,117]的效果,我们可以用一个可分离的最小二乘方滤波来遵循该聚合步骤。一个箱式滤波器和相等尺寸的最小滤波器的级联效应与估计一个完全集合的漂移窗口一样,由于漂移窗口的值与一个中心窗口在某些领域的像素一样(如图3)。这一步骤仅仅加入了很少的附加计算,由于移动一个1-D的最小滤波仅需通过在最小值离开窗口时计算最小值来高效计算。aggr_minfilter的值可能小于aggr_window_size的值,该值模拟了部分漂移小窗口的效果。(由于窗口不再包含参考像素,因而逆命题并没有太大意义)。 
我们执行了[97]提出的所有传播方法,除了局部停止的之外,即普通的传播如薄膜模型,贝叶斯模型传播。尽管这最后的算法能被作为优化方法,但我们仍然将其包含在聚合模块中,因为这与其他迭代聚合算法相似。聚合迭代的最大数量由aggr_iter控制。其他控制传播算法的参数在表2中列出。 
4.3.Optimizatin 
我们已经计算了(选择性聚合)代价,我们需要确定哪个离散视差集合最能表现场景表面。用于确定的算法由opt_fn来控制,用于确定的算法由如下: 
l Winner-takes-all(WTA); 赢家通吃 
l Dynamic programming(DP); 动态规划 
l Scanline optimization(SO); 扫描线优化 
l Simulated annealing(SA); 模拟退火 
l Graph cut(GC); 图像分割 
Winner-take-all方法在每个像素中简单挑选最低聚合的匹配代价最为选中的视差。其他方法除了匹配代价之外还需要平滑代价。在调用优化算法之前,我们建立了一个表格,该表格包含了等式6中的和预先计算的空间不同的权重。这些表格有参数opt_smoothness来控制,该参数控制所有平滑项规模(即等式(3)中的λ),参数opt_grad_thresh和opt_grad_penalty,控制由梯度决定的平滑代价。我们现在使用由Veksler定义的平滑项[123]:

其中,因而平滑代价是被低灰度梯度的p乘后使得深度跳变至于灰度边缘相一致。所有的优化算法都是最小化同一个目标函数,进行一个更加有意义的性能比较。 
我们第一个全局优化技术,DP,是一种与Bobick和Intille[18]提出的算法相似的动态规划算法。该算法计算通过DSI(视差空间图间图2)中的每个薄片的最小代价轨迹。薄片中每一个点都可能是以下三种之一:M(match),L(left-visible only),R(right-visible only)。假设时序约束是强制的,一个有效的路径最多可以在一点接受三个方向,其中该点与一个确定的状态变化相联系。使用动态规划,一个点的所有路径的最小代价能够高效累积。在状态M的点在视差空间图中的该点只是简单地带有匹配代价。在状态L和R的点带有一个固定的遮挡代价(opt_occlusion_cost)。在估算最终视差图之前,我们使用同一扫描线中最近的背景视差值将所有遮挡像素点进行填充。 
DP立体算法对于参数(见第6部分)相当敏感。Bobick和Intille通过预先计算出GCPs(地面控制点)提出该问题,之后用于限制通过视差空间图薄片的路径。地面控制点通过SAD和可移动窗口计算而来的是高度可信的匹配点。在该点我们不在我们的执行程序中使用地面控制点,因为我们感兴趣的是比较不同算法的基础版本。然而,地面控制点在其他算法中可能很有用处,我们计划在未来将其加入本执行程序中。 
第二个全局优化技术Scanline optimization(SO),扫描线优化,是一种设计来评估不同平滑项的简单算法。就像之前的方法,该算法在独立的视差空间图薄片中运行,且在一个时间优化一个扫描线。然而,该方法是非对称的且不利用可视化和时序约束。d在每个点x都被赋值,以致沿着扫描线的总体代价是最小化的。(注意的是如果没有平滑项,这与winner-takes-all方式等价)全局最小化能在此使用动态规划来计算;然而,不像传统(对称地)的DP算法,时序约束不必强制执行,并且必须有非遮挡代价参数。因此,除了垂直平滑项被忽略之外,扫描线优化算法解决了下面要描述的图像分割算法一样的优化问题。 
DP和SO算法都遇到了众所周知的困难,即强制使得内部扫描线对应,导致在计算视差图时候出现垂直的“streak”(条纹)。Bobick和Intille解决这一问题的方法是在视差空间图薄片中检测边缘。这可以利用灰度边缘来对深度不连续性进行校准。在我们的实现中,我们通过使用一个依赖视差的平滑代价(等式(6))而达到了同样的目标,在我们的DP算法中,是进行所有的L-M和R-M状态的转换。 
我们的模拟退火的实现支持Metropolis变体(其中下坡时的步骤经常使用而上坡式步骤则偶尔使用),还有Gibbs取样器,即根据完全边际分布[47]在几个可能的状态中进行选择。对于后者,我们能任意选择一个新的状态(视差)来翻转,或者是在给定的像素中估计所有可能的视差。我们现在的退火程序是线性的,尽管我们计划在未来加入对数的退火程序。 
最后的全局优化方法是GC,图像分割,实现交换移动算法[23,123]。(未来计划实现)。我们在每个内部迭代中设法使配对随机化并且当无法更好地改善能量时停止算法执行。 
4.4.Refinement 
亚像素级的视差精细化由布尔变量refine_subpix控制。当该变量使能,围绕在获胜的视差周围的三个聚合匹配代价值将计算亚像素级的视差估计。(如果初始的视差空间图由分数视差步骤组成,这些是真正的亚像素中的亚像素值。一个更加近似的名字是浮点型视差值。)有一条抛物线与这三个值相对应(如果该胜出的视差值要么是disp_min或者是disp_max,这三个结束值将被使用。)如果如果曲率是正的且抛物线的最小值在该胜出视差的半步距(在搜索限制内),那么这个值将作为最终视差估计。 
在之后工作中,我们打算研究是否应该使用初始或者聚合匹配分数,或者是否该使用一些其他方法,如Lucas-Kanade,也许会产生更高质量的估计[122]。 
5.Evaluation methodology 
在本部分,描述了用于评估立体算法性能的度量以及我们用于获得图像数据集和地面真实视差估计的技术。 
5.1.Quality metrics 
为了评估立体算法的性能或者是改变一些参数时的影响,我们需要定量评估所计算的匹配。两个常用方法是计算相对于地面真实数据的误差统计[8],以及通过计算视差图来覆盖参考图或者隐藏图,以此来评估获得的综合图像[111]。 
当前软件的版本中我们计算了基于已知的地面真实数据的两种质量测量: 
1.结余计算的视差图和地面真实图之间的均方根误差(在视差集中计算),即 
其中N是总得像素数。

2.错误匹配像素概率百分比。 
其中(eval_bad_thresh)是视差误差容许度。本文的实验中取,因为这与一些过去公开的研究相一致[116.132.65]。

除了计算这些全图的统计数据外,我们也同时聚焦于三个不同的区域。这些区域通过对参考图像和地面真实视差图预处理来计算用以产生以下三个二值分割(图4): 
l 低纹理区域:该区域在一个给定尺寸(eval_textureless_width)的方形区域中计算平方的水平灰度梯度的平均值,该值小于给定的阈值(eval_textureless_thresh)。 
l 遮挡区域:在匹配图像中被遮挡的区域,即在该区域某一前向的图像视差在一个具有更大视差(更近)的地方。 
l 深度不连续区域D:这些像素的相邻视差相差大于eval_disp_gap,通过一个宽度eval_discont_width的窗口来膨胀。

这些区域被选来支撑在典型问题区域的匹配结果的分析。对于本文中的实验,我们所使用的值在表2中列出。 
上述的统计数据是为这三个区域及其相关补充而计算,即 
诸如此类,计算。 
表格3给出了我们所获得的数据的完整列表。对于低纹理,纹理和深度不连续数据,我们排除了遮挡区域,假设在遮挡区域算法通常不产生有意义的结果。同样的,由于许多算法不计算邻近图像边界的有意义视差,因而当计算所有统计数据时我们排除了边界像素eval_ignore_border。 
第二个主要的测定重建算法质量的方法是利用彩色图像和视差图来预测其他视图的表面[111]。在此也有两种主要的方法存在可能: 
1.通过计算视差图来将参考图像向前变形为一幅不同的视图(可能是看不见的)(图5),并且将其与新图像对比以获得一个向前预测误差。 
2.通过计算其视差图来反向变换一幅新的视图产生一幅新的稳定的图像(图6),将其与参考图像作比较以获得倒转的预测误差。 
对于两种方法都有个字的优点和缺点。 
前向变形算法需要解决图像撕裂的问题:如果使用单像素长条木板,即使在 
具有相似视差的邻像素点可能加大裂口。一种解决办法是使用双行程渲染器[102]。我们将每对邻域像素渲染输出为目标图像中的内插色线(即使用高氏着色)。如果相邻像素视差相差大于eval_disp_gap,那么在各自末端将使用单个像素来取代该部分,这将导致可见的撕裂(图5中浅色品红区域)。 
对于反转变形,不存在裂开的问题。但是当参考图像中的像素在源端实际上不可见的时候,我们会得到“ghosted(重影,假象)”区域。对于这种像素点我们首先检查其可见性(遮挡),然后用一种特殊颜色画出这些像素点(图6浅色品红区域)。我们发现着眼于基于地面真实视差图的反转变形序列图像是一个确定原始图像是否正确标定和校正的好办法。 
在计算预测误差时,我们应该确定如何处理这些裂口。当前,在计算这些统计数据和列出这些缺失像素的百分比时我们忽略这些被交际为裂口的像素。我们也能选择性地补偿小的错误配准[111]。为了达到这一目的,我们通过使用相邻像素的最大和最小值的某一分数来调和该像素值,从而将原始图像和预测图像中的每一像素转换到一个区间内。这一想法是取样不敏感相异度方法的一般化[12]以及置乱转换[66]。所报告的差异两个计算的区间的(有符号)距离。我们计划在将来研究这些以及其他的取样不敏感匹配代价。 
5.2.Test data 
为了量化评估我们的匹配算法,我们需要的数据集包括地面真实视差图和一组另外的能用来进行估计误差测试(或者二者皆可)的视图。 
我们已经开始搜集这样的图像数据库,建立[116]中所介绍的方法论。每一个图像序列有9幅图像组成,使用一个安装在水平位移平台上的相机在规则位移上得到,相机指向与位移方向垂直。我们使用数码高分辨率相机(Canon G1),设置人工曝光和对角模式,使用跟踪特征点校正。之后我们使用一个高质量的八阶滤波器将取样从2048*1536像素降低到512*384像素,最后裁剪图像以将背景物体的移动正则化至每帧几个像素。 
我们所得到的所有图像序列都是有分段平面对象构成的(典型的海报或者是绘画,有些带有轮廓边缘)。在进行缩减像素取样之前,我们人工目测每幅图像的分段平面组成(图7)。之后在每个平面区域使用直接的人工校准技术来估计每一块[5]的仿射移动。这些移动的水平组分之后用于计算地面真实视差。在未来工作中我们计划将我们的获取方法扩展到处理二次曲面场景中(即圆筒,椎体,和球体)。 
我们所获得的六个图像序列都能在我们的网页中找到,我们选择了两个(“Sawtooth”“Venus”)作为本文实现测试。我们也使用了Tsukuba大学“head and lamp”数据集[81],5*5阵列图像,对于中心图像带有人工标注的整型地面真实视差。最后我们使用由Szeliski和Zabih最先介绍的单色图像“Map”数据集[116],该数据由三目立体相机得到,其地面真实视差图使用上述的分段平面技术来计算。图7展示了这四个序列的每个参考图像和地面真实视差图。由于没有提供地面真实视差图,我们在图像Tsukuba中排除了一个18像素的边缘。对于所有其他图像,我们在本文中使用eval_ignore_border=10来进行实验。 
在未来,我们希望加入更多的数据集到我们所收集的“标准”测试图像。尤其是来自Tsukuba大学的其他图像序列,以及GRASP实验室的“Buffalo Bill”数据集,使用激光测距仪得到地面真实值。CMU Computer Vision Home Page中的数据集也十分合适。但不幸的是,我们不能将数据集使用在仅仅计算了一个系数特征匹配集算法上。 
需要注意的是,对于一个有意义的性能评估而言,高质量的地面真实数据是关键。然而精确的亚像素级的视差难以得到。比如说,Tsukuba图像的地面真实数据被强烈量化,因为它只提供了一个十分小视差范围的(d=5…14)整型视差估计。当图像使用地面真实数据来稳定并且在一个视频网络中观看时,这是清晰可见的。相比之下,我们的分段平面场景的地面真实视差具有高(亚像素级)精度,但是这是以限制场景复杂度为代价的。对于最好性能的立体方法,为了提供适当的挑战,很快将需要新的具有复杂场景和亚像素级地面真实值的立体测试图像。 
人造图像已经被广泛使用在立体方法的定性评估上,但他们经常被限制在简单的几何图形和纹理上(即随机点立体图)。此外,由于从未对真实相机进行建模,会产生一些问题,即图形失真,微量轴倾斜,噪声,透镜畸变,以及增益和偏差的波动。因此,人工图像得到的结果常常无法外推到真实相机图像中。我们使用了Bonn大学的“Corridor”数据集[41]来进行实验,但是发现干净、无噪声的图像不可能很容易得到,然而对于大部分场景中完全缺乏纹理的图像中,噪声污染图像过于难应付。对于人造的,逼真的测试图像而言,最清晰的需要是在提供精确的地面真实值的时候,正确地对真实世界的不完整性进行建模。 
6.Experiments and results 
本部分描述了用于评估立体算法独立模块的实验。使用本执行框架,我们对第3部分中所认可的四种主要算法组件(匹配代价,代价聚合,优化,亚像素级匹配)进行了测试。在第7部分,我们对一整套的立体算法进行了全面的比较,其中也与其他作者的实现进行了比较。在所有实验中我们使用Tsukuba,Sawtooth,Venus,Map数据集,并对这些图像的子集做出结果报告。结果的完整集合(在所有数据集下进行的所有实验)可在www.middlebury.edu/stereo中下载。 
使用5.1中展示的评估方法,我们聚焦在立体算法的一般性问题区域。在我们所搜集的12幅地面真实视差数据统计中(表3),我们选择了其中三个作为最重要的子集。首先,我们使用(非遮挡区域误匹配点的百分比)作为全局性能的度量。由于很少有算法显性地去研究遮挡模型,且大部分算法在这些区域性能都很不好,所以我们排除了遮挡区域。然而,由于[65]中算法在匹配遮挡区域中表现较好,所以我们今后可能会更加关注完整的匹配误差B。 
另外两个重要的度量是和,即在低纹理区域和靠近深度不连续区域误匹配像素点的比例。这些度量提供了算法在两个重要区域的性能这一重要信息。这三个度量的参数名称为:bad_pixels_nonocc,bad_pixels_textureless,bad_pixels_discont,他们出现在以下大部分情形中。与RMS(均方根)视差误差相比,我们比较喜欢使用误匹配像素百分比,因为这对于全局算法性能给出了一个较好的指示作用。比如说,一个算法如果在的时候表现良好。另一方面,均方根误差图被那些图像中不匹配的10%视差误差(可能很大)给污染了。当误匹配点下降到几个百分比的时候,均方根误差变得很重要,同时亚像素级匹配的的质量也需要进行计算(见6.4)。 
算法经常以两幅图像作为输入,即使当可以输入更多图像的时候。比如说,所欲我们的九帧序列,我们使用第三和第七帧作为输入对。(其他帧用来测量估计误差) 
6.1.Matching cost 
我们通过对比不同的匹配代价,包括绝对值差(AD),平方差(SD),或者是二者的截短版本,以及Birchfield和Tomasi的取样不敏感相异度测量(BT)[12]。 
一个当尝试着评估一个独立的算法组件时,一个很有趣的问题是如何确定控制其他组件的参数。我们通常基于评估其他算法组件的实验来选择好的值。(经过几轮实验,固有的开机问题得到了解决。)由于对于许多参数的最好设置变化范围取决于输入图相对,所以我们常常不得不折中地选择一个能在多个图相对中表现较好的值。 
实验1:在本试验中,我们比较了使用一个局部算法比较了匹配代价AD,SD和AD+SD。我们使用一个9*9的窗口进行聚合,然后使用winner-takes-all来最优化(即我们使用标准的SAD和SSD算法)。我们不计算亚像素级的估计。使用的截断值为1,2,5,10,20,50以及(无截短);当截短SD时,这些截短值需要平方。 
结果:图8显示了对于Tsukuba,Sawtooth和Venus中,四种匹配代价各自的三个评估度量,关于截短值的函数。总体而言,SD和AD差异很小。对于接近不连续的地方,截短值影响较大。原因在于对于包含混合群体的窗口(同时包含了前景和背景),截短匹配代价限制了误匹配点的影响。好的截短值从5到50,尤其是在20左右。当截短值掉到噪声级以下(即2和1),误差会变得非常大。使用BT方法能对这些小的截短值有所帮助,但是对于好的截短值几乎是没有任何改进的。在所有的数据集上,其结果都是一致的;然而,最好的截短值是不同的。我们也尝试了用21的窗口,得到了相似的结果。 
结论:截短对于AD和SD都有所帮助,但是最佳截短值取决于图像的信噪比,因为截短发生在当前噪声级的正上方(见[97]中的讨论)。

实验2:这一实验与前面的相同,不同处在于使用了9*9的最小滤波器(事实上,我们使用可移动窗口进行聚合)。 
结果:图9显示了本实验的结果图,使用的图像仍是Tsukuba,Sswtooth,Venus。和之前一样,AD和SD几乎没有差异。然而现在,非截短版本的情况是最好。特别地,对于接近不连续区的点,我们得到了最低的误差,且总的误差与实验1中最佳截短时的总误差有的一比。BT有助于降低更大的误差,但和前面一样,并不降低最好情况下(非截短情况下)降低误差。我们同样尝试了使用21的敞口,得到了相似的结果。 
结论:选择最好的截短值的问题能通过不去使用可移动滤波器(最小滤波器)来避免。这是一个很有趣的结果,因为鲁棒匹配代价(截短函数)和可移动窗口被提出是用以解决跨过物体边缘的窗口的异常值的。上述实验表明,通过移动窗口来避免异常值,以限制其对于使用截短代价函数的影响这一方法是可取的。

实验3:现在使用DP,SO,GC作为优化技术,评估匹配代价如何影响全局算法。最小化数据项和平滑项的加权和(等式(3))的全局技术的一个问题在于匹配代价值的范围影响的最优值,即平滑项的相对权重。例如,平方差比绝对值差需要更高的值。相似的,截短差异函数会导致更低的匹配代价并且需要更低的值。因此,在试图将匹配代价隔离开来的时候,我们面临着如何选择的问题。最彻底的解决该困难的方法也许就是对于各个匹配代价各自找一个最优的(不同的)值,然后得出那个匹配代价给出了最好的整体结果。然而对于最优的,不但在不同的匹配代价上会不同,在不同图像上也是不同的。由于在一个实用的匹配程序中,因而我们需要选择一个恒值,实际实验中我也是这么做的。我们选择(在后面6.3中有讨论其如何得到)并限制匹配代价为绝对值差(AD),由各种数值进行截短。对于DP算法,我们使用一个20固定的遮挡代价。 
结果:图10显示了对于Tsukuba,Sawtooth和Venus中,四种匹配代价各自的三个评估度量,关于截短值的函数。每幅图有6条曲线,对应了DP.DP+BT,SO,SO+BT,GC,GC+BT。能从图中看到,截短值影响了性能。当使用局部算法,如果截短值太小(在噪声范围内),误差会非常大。50到5之间的中间截短值有时候能改善性能,具体值需取决于算法和图像对。Birchfield-Tomasi的影响是混合的;当在实验1和实验2中使用局部算法时,如果截短值太小,BT会限制误差。然而,能看到BT对于SO算法是最有益的,那是因为SO算法需要一个更高的值来运行(见实验5),在这一情况中BT的积极效果不太明显。 
结论:使用鲁棒(截短的)匹配代价仅能稍微改善全局算法的性能。然而最好的截短值在不同的图相对中都不同。基于图像SNR(方均根)的一个估计来自动设置这个参数比较可能并且是后续研究的一个主题。Birchfield和Tomasi的匹配方法能稍微改善结果。直观地,对于非聚合匹配代价的全局算法不必截短,因为在一个窗口中异常值问题不存在。然而,对于全局算法,一个重要的问题是在数据项和平滑项之间找到一个正确地平衡(见实验5)。截短在本文中可能有用,因为其限制了可能代价值的范围。 
6.2.Aggregation(聚合) 
我们选择比较局部方法所使用的不同的聚合方法。当全局方法典型地使用在未加工的(未聚合的)代价上,聚合对这些方法也能有用,例如为迭代算法提供初始值,或者是一组高置信度的匹配或者是用来限制动态规划方法搜索的地面控制点[18]。 
在本部分,我们使用方形窗口,可移动窗口(最小滤波器),二项式滤波器,规则传播,膜传播[97]。贝叶斯传播的结果能在第7部分找到,其中包含了聚合和优化。

实验4:在本实验中,我们使用(无截短)绝对值差作为匹配代价且在聚合步骤之后使用winner-takes-all优化(没有亚像素级估计)。我们比较了一下聚合方法: 
1.方形窗口,窗口大小3,5,7,…,29; 
2.可移动方形窗口(最小值滤波器),迭代次数3,5,7,…,29; 
3.迭代二项式(1-4-6-4-1)滤波器,迭代次数2,4,6…28; 
4.规律传播[97],迭代次数10,20,30…150; 
5.膜传播[97],迭代150次且。 
对于每一种方法,我们都设法使控制空间幅度的相关参数变化(即窗口大小是相等的)。特别的,在二项式滤波器和规律传播当中,这相当于是改变迭代次数。膜传播模型在进行足够多的迭代后会聚集于一点,其空间幅度受参数以及传播等式中原始代价值的权重的控制。 
结果:图11显示了对于Tsukuba,Sawtooth和Venus中,四种匹配代价各自的三个评估度量,关于聚合的空间幅度的函数。每个图都有5条曲线,对应于上面列出的五个聚合方法。这些曲线最显著地特征就是在低纹理区域()和接近间断区域()具有相反的趋势。毫不意外,更大的聚合(更大的窗口或者是更多的迭代次数)显然更有助于恢复低纹理区域(如在Venus中,该图包含了大量的无纹理区)。同时,太多的聚合会导致接近物体边缘地区(深度不连续地区)的误差。在非遮挡区域的总体误差展示了两个趋势的混合。根据图像,最好性能通常在聚合的中间值获得。在五个聚合方法中,可移动窗口显然性能最好,尤其是在不连续区域,总体而言也是如此。其他四种方法表现比较相似,除了曲线形状上的一些差异以外,而那些差异(一定程度上)是由于我们对于空间幅度的定义所导致的。然而,值得注意的是,即使是可移动窗口,在恢复不连续区域时候,其最优窗口也是很小的,而对于低纹理区域却需要大得多的窗口。 
讨论:这一实验揭露出了局部方法的一些基本局限性。在低纹理区域,需要大的窗口来避免误匹配,而在物体边缘(深度不连续区域),基于窗口的立体方法表现十分不好。原因在于这种方法隐性地假设了窗口中所有点具有相似的视差。如果一个窗口跨国深度边缘,窗口中的一些点在前景视差中匹配,一些点在背景视差中匹配。因此一个接近深度不连续区域的点的聚合代价函数在d方向上是双峰的,而这两个中更强的江北选择为获胜的(winning)视差。那么哪个将会胜出呢?这取决于两个区域中所呈现出的(水平)纹理的数量。 
考虑第一个纯粹的水平深度不连续边缘(图12中,前景空间中最上部的边缘)。这两个区域,不论哪个拥有更多的水平纹理,都将产生很强的模,所计算的视差也将在低纹理区域出现“bleed(边缘出血效应)”。对于非水平深度边缘,最突出的水平纹理通常是物体边缘本身,因为不同的物体通常来说会有不同的颜色和灰度。由于物体边缘处在前景边缘,那么对于接近边缘的点的前景视差将产生优先权,即使背景是纹理区域时候。这就是基于窗口的算法所表现出的“前景放大”现象的解释。这能在在图12前景的右边缘看到;左边缘是一个遮挡区域,任何情况下都无法恢复。 
自适应窗口的提出就是用于解决这一问题。在上面的实验中可以看到,最简单的可变的可移动窗口(最小滤波器)就有效果。只要窗口在前景物体中适合最为一个整体,如果前景和背景都是纹理区的话,那么可移动窗口能精确地恢复物体边缘。最小滤波器的尺寸应该选择与窗口尺寸想匹配。然而,就像所有的局部方法一样,可移动窗口在低纹理区域效果也很差。 
结论:聚合代价的局部算法效果很好,尤其是在纹理区域(即使是有倾斜的地方)。可移动窗口尤其在接近深度不连续区域效果很好。而对于低纹理区域尚需要很多算法。 
6.3.优化 
本部分我们比较了四个全局优化技术:动态规划(DP),扫描线优化(SO),图像分割(GC),模拟退火(SA)。 
实验5:本实验我们研究了opt_smoothness,等式(3)中的平滑权重。我们比较了DP,SO,GC,SA几个算法在时的性能。我们使用非聚合绝对值差作为匹配代价(平方差需要更高的值),且没有亚像素级的估计。对于模拟退火SA,迭代次数为500. 
结果:图13显示了对于Tsukuba,Venus,Map中(为了显示更多变得结果,我们使用Map图取代了Sawtooth),四种匹配代价各自的三个评估度量,关于的函数。由于动态规划(DP)算法具有一个额外的参数(遮挡代价),我们进行了三次运行,分别使ope_occlusion_cost=20,50,80。像前面一样,使用(bad_pixels_nonocc)作为我们全局性能的估量,其中图像分割(GC)方法始终表现最好,而其他三个方法(DP,SO,SA)稍微差,在这几种方法中并没有明显的等级区分。GC在低纹理区域和接近不连续区域都表现最好。然而,对于每个算法,其最佳性能对于的要求都不同,这还取决于图像对。例如,对于图像Map,较多纹理,仅仅包含了两个平面区域,需要较高的值(大约500),然而图Tsukuba包含了许多不同深度的物体,需要更小的值(20-200,同时也取决于算法)。DP算法的遮挡代价参数,虽然不会动态地改变性能,但也会影响最佳的值。虽然图像分割方法(GC)很显然胜出了,但是这确实最慢的算法:DP和SO独立地运行在每一条扫描线上,通常运行超于2秒,而GC和SA需要10-30分钟。 
结论:GC方法始终胜过其他优化方法,虽然是以远高于其他方法的运行时间为代价。GC方法显然比SA方法更好,这与其他公开发布的结果一致[23,116]。然而,当比较DP和SO时,由于垂直平滑项被忽略了,后者解决了一个不同的(更简单的)优化问题。虽然实验使用了高效的DP技术,但却对性能产生了负面影响,正如视差图中所显示的典型的“streaking(图像拖尾现象)”(见图17和18)。很多作者提出了针对DP方法的增加内部扫描线一致性的方法[9,31,13]。我们计划在未来工作中对这一方面进行研究。 
实验6:我们选择聚焦于图像分割(GC)优化方法来看看是否能改善结果。我们尝试了Birchfield-Tomasi的匹配代价和基于灰度梯度的平滑代价。 
结果:图14显示了对于Tsukuba,Sawtooth,Venus,Map中,进行四个不同的实验得到的性能度量集。除了图Map的平滑项权重外,其他都为。匹配代价为(非截短)绝对值差。由梯度决定的平滑代价参数为pot_grad_thresh=8(在所有实验中都一样),opt_grad_penalty=1,2或4(在图中标为p1,p2,p4)。如果灰度梯度小于opt_grad_thresh,则平滑代价乘以opt_grad_penalty使得视差跳到与灰度边缘相一致。图14中的每一个图都显示了四种情况:P1,P1+BT,P2+BT,P4+BT。在第一种情况中,惩罚值为1,即梯度相关性关闭。这与实验5给出了相同的结果。在第二种情况,我们加入了Birchfield-Tomasi,惩罚值不变。在后面两种情况中我们将其设为2和4。可以看到低梯度的惩罚对于帮助恢复不连续区域很有帮助,在其他区域也一样。两种惩罚那个工作得更好取决于图像对。BT对于结果也产生了一些改善。我们也尝试了一些其他的阈值,出现了混合效果。在未来工作中,我们计划用一个边缘检测器来取代简单地梯度阈值,使用检测器能改善边缘的定位。正确选择惩罚值的问题与选择正确的值紧密相关,因为影响着数据项和平滑项的整体关系。这也值得深入研究。 
结论:BT的匹配代价和基于梯度的平滑代价都改善了GC算法的性能。选择正确地参数(阈值和惩罚值)依然比较困难且需根据具体的图像。 
我们对基于扫描线优化方法(DP和SO)也进行了这些实验,得到了相似的结果。基于梯度的惩罚通常能增强性能,尤其是对于SO方法。BT似乎总是增强全局的性能,但是有时在低纹理区域又降低性能。像之前一样,算法对于平滑项权重和惩罚因素高度敏感。 
6.4.Sub-pixel estimation 
实验7:为了评估亚像素级精炼阶段的性能,同时评估匹配标准和视差取样的影响,我们从其中一个图像序列裁剪出了一小块平面区域(图15a,第二列图像)。图像本身就是一张安装在硬纸板上的新闻纸,上面有高频的文本和一些低频的白色和暗色区域。(这些低纹理区域从我们得到的统计数据中排除。)该区域中的视差大约0.8-3.8像素且同时在垂直和水平两个方向上是倾斜的。 
结果:我们首先运行一个简单地9*9SSD(平方差差之和)窗口。其中能清楚地看到所计算的离散视差层级。视差误差图(第二列图)显示了锯齿误差,视差直方图(第三列图)也显示了离散化。如果我们使用亚像素级的抛物线来拟合精炼的视差,视差图将变得更加平滑(注意图15c中方均根误差的下降),但还是能看到比较弱的锯齿化,这种锯齿化在视差误差图和直方图中都能看到。这些结果与Shimizu和Okutomi所报告的[105]相一致。 
在图15d中,我们研究了使用BT的取样不变方法[12]能否改善或者是削弱这种表现。对于积分采样,他们的方法稍微有点帮助,这能通过图15d中降低的方均根值和更平滑的直方图看到。在所有其他例子中,这导致了更差的性能(图16a中取样不不变的结果是更差的数据点)。 
在图15e中,我们调查了是否对输入图像进行轻微的模糊(使用1/4,1/2,1/4的核)会对于亚像素级的精炼有所帮助,因为对成像函数进行泰勒展开的第一阶变得更有效了。模糊化实际上稍微降低了锯齿效应(比较土15e和图15c),但是但是总体的(RMS)性能降低了,可能是因为高频细节的丢失。 
我们也同样尝试了在愿意匹配阶段进行1/2和1/4像素视差取样,加入或不加入后面的亚像素级精炼。亚像素级精炼常常有助于降低RMS视差误差,虽然对于反演的预测误差有一些微不足道的影响(图16b)。从这些预测误差图以及反向扭曲的(稳定的)图像序列的目测中可以得到,在任何原始的匹配方案之后使用亚像素级精炼都能将预测误差(抖动或者切变的表现)降低到可以忽略的水平。尽管亚像素级精炼的理论依据是基于对一个充分取样的二次能量函数的二次拟合。当前,我们依靠每一个要进行优化的像素代价来进行亚像素级视差估计。替代方法,如使用局部平面拟合[5,14,117,]也能得到亚像素级的估计。 
结论:为了消除所计算的视差图的锯齿以及消除投影系列中的切变,很有必要在小部分视差中进行匹配的初始评估(1/2像素步长刚好合适)。这应该在找到用来计算匹配代价的局部二次拟合的极小值之后。 
7.整体比较 
我们将以对20中不同的立体方法进行整体比较来结束本研究,其中包含了5种我们事先的算法以及15种其他作者实现的算法。我们使用我们熟悉的数据集合Tsukuba,Sawtooth,Venus和Map。所有算法都以恒定的参数对这四种图进行处理。在这里的比较中我们没有进行亚像素级的估计。 
在本实现框架的算法中,我们选择了以下五种算法: 
(1)SSD-21*21可移动窗口平方差之和; 
(2)DP-动态规划; 
(3)SO-扫描线优化; 
(4)GC-图像分割优化; 
(5)Bay-贝叶斯传播。 
我们选择可移动窗口的平方差之和作为所有局部算法(基于代价聚合的)的最佳性能代表。在此我们不包括模拟退火算法,因为GC能更好地解决模拟退火算法能解决的问题且更加高效。对于这五个算法的任意一个,我们选择了固定的参数,该参数能使得算法在各个图像中运行性能合理。 
我们将我们的实现所产生的结果与其他作者的以下算法所产生的结果进行比较。算法如下: 
(6)Max-flow/min-cut(最大流/最小分割)算法,Roy和Cox92,91 
(7)Pixel-to-pixel(点对点方法),Birchfield和Tomasi[13](使用 梯度可调的代价 的扫描线算法,该算法在垂直视差传播至不可靠区域之后)。 
(8)Multiway cut(多路分割)Birchfield和Tomasi14 
(9)Cooperative algorithm(协同算法),Zitnick和Kanade[132](Marr和Poggio的[73]算法的一种新的变体)。 
(10)Graph cuts(图像分割),Boykov[23](与我们的GC算法一样,但是实现速度更快) 
(11)Graph cuts with occlusions(图遮挡区像分割),Kolmogorov和Zabih[65](一种对图像遮挡区域进行显性建模的图像分割框架的扩展)。 
(12)Compact windows,Veksler[124](一种允许非矩形窗口的自适应窗口技术)。 
(13)Genetic algorithm(遗传算法),Gong和Yang49。 
(14)Realtime method(实时方法),Hirschmuller[53](9*9的可移动窗口的绝对值差之和,在一致性检查和不确定区域的插值之后) 
(15)Stochastic diffusion(随机传播),Lee[68](贝叶斯分布的一种变体)。 
(16)Fast correlation(快速相关算法),Muhlmann[79](一种基于相关性匹配的高效实现,高匹配具有一致性和单值性)。 
(17)Discontinuity-preserving regularization(不连续性存储正则化),Shao109 
(18)Maximum-surface technique(最大表面技术),Sun[108](一种使用矩形子区域的快速立体算法) 
(19)Belief propagation(置信传播),Sun[109](一种使用贝叶斯置传播的MRF(马尔科夫随机场)的构想)
(20)Layered stereo(分层立体),Lin 和Tomasi69

这些算法中,并非所有都有计算每点的视差,尤其是那些对遮挡区域进行显性建模的算法(3和11),还有就是算法(16)还留着低置信区域没有匹配。在这些情况下,我们采用4.3中DP算法中所采用的方法那样去填充这些点。 
表5概括了算有算法的结果。想在之前的部分一样,我们使用(bad_pixels_nonocc)作为整体性能度量,同时也使用(bad_pixels_textureless)和(bad_pixels_discont)。但是我们不报告图Map的,因为几乎所有地方都是纹理区。算法按照整体性能的顺序列了出来。 
这些结果中,我们能得出几个关于算法整体性能的结论。 
第一,基于2-D的马尔科夫随机场的全局优化方法在图像的所有区域(包括整体的,低纹理的和不连续区域)普遍表现最好。这些技术中,大部分是基于图像分割优化的(方法4,8,10,11,20),但是置信传播方法(19)也表现良好。对平面表面进行显性建模的方法(方法8,20)在分段的平面场景中(如Swatooth,Venus)效果尤其好。 
第二,协同和基于分布的方法(方法5,9,15)表现很好,但是常常在边缘地区出现错误,尤其是在更加复杂的Tsukuba图像中。在高纹理和相对简单地图像序列Map序列,他们却能够胜过一些全局优化方法。Map图像序列也比其他图像由更多的噪声,这对与那些对内部参数设置敏感的算法而言十分不利。(在这些实验中,我们让所有人对四个数据集都使用同一组参数) 
最后,局部方法(方法1,12,14,16)和扫描线方法(方法2,3,7)表现没那么好,尽管(方法14)进行了额外的一致性检测和进行了表现良好的清理步骤,就像使用了复杂的自适应窗口的紧密窗口方法一样。 更简单地局部方法,如SSD+MF(1)方法,通常在低纹理区域表现不好(如果其窗口尺寸小的话),而在接近不连续区域表现不好(如果窗口尺寸大)。由基于扫描线的算法(DP和SO)所得到的视差图很有希望且显示了很多细节,但是更大的定量错误显然是“streaking(图像拖尾)”的结果,因为缺乏内部扫面线一致性。 
为了展示参数设置的重要性,表6比较了算法1-5的所有结果(),其中算法中使用的固定参数在表4中列出,当各幅图像的参数允许变化的时候,这些参数能得到最好的结果。注意,我们并没有在所有参数值上进行真正意义上的优化,而是在我们所做的整个实验集中简单地选择整体最好的结果。能够看出,一些算法的性能能通过改变参数而大幅提升。全局优化算法对于参数尤其敏感,DP也对遮挡代价参数很敏感。这与我们在6.3中所观察的一致。注意到,Map图相对实际上能通过使用GC,Bay或者SSD来“解决”,因为该图像描述了一个简单地几何结构且纹理清晰。在未来,这一方面的研究中,可能需要更多的有挑战性的数据集,这些数据集有许多遮挡区域和低纹理区域。 
最后,我们简单看看不同方法的效率。表7列出了图像尺寸和每个图相对视差级别的编号以及所选出的9中算法的执行时间。毫不意外的,速度优化的方法(方法14,16)最快,接下来是局部和基于扫描线的方法(1-SSD,2-DP,3-SO)。我们的图像分割(4)和贝叶斯传播(5)的实现更慢好几个数量级。而作者的图像分割方法的实现(10和11)比我们的快很多。这是因为Boykov和Kolmorogov的新的最大光流代码[21],该代码能在网站上下载。www.cs.cornell.edu/people/vnk/software.html. 
总之,如果效率是一个问题,那么一个简单地可移动窗口方法会是一个很好的选择。Hirschmuller的方法14[53]是最快的且产生了很好的结果。新的图像分割方法的实现给出了很好的结果以及可接受的运行时间。后续的研究需要更全面地在不牺牲其效率的情况下利用扫描线方法的潜力。

8.Conclusion(结论) 
本文中,我们提出了针对稠密两帧立体匹配算法的分类。我们使用该分类强调了现今存在的立体匹配算法的最重要的特征并且研究了重要算法的独立组件。我们执行了一系列的立体匹配算法组件并且构建了一个能够用来整合这些组件的测试工具,能以可控的方式改变算法参数,能在有趣的数据集上对算法进行性能测试。我们也拿出了一些标定的多视图立体数据集,这些数据集具有人工标注的地面真实值。为了评估不同算法组件的性能,我们也进行了大量的实验研究。这里所报告的实验已展示了局部方法的局限性,并且评估了不同全局技术的价值及其对关键参数敏感性。 
我们希望通过公开这一研究以及我们的取样代码和数据集来孤立其他立体研究者将他们的算法运行在我们的数据上并且报告他们的比较结果。由于公开本文的初始版本作为一个技术报告[98],我们已经接到了来自15个研究组的实验结果(视差图),同时我们希望得到更多的实验结果。我们正打算提出表5的在线版本,该表列出了现在性能最好的算法的整体结果。我们也希望一些研究者能花些时间来将他们的算法加入到我们的框架中来,使得其他研究者也能使用或在此基础上改进。从长远来看,我们希望我们的努力将得到一些数据集并且本测试的思想可以变成立体匹配领域中可接受的标准,使得新的算法将不得不通过一个“litmus test”来证实他们所做的改进。 
还有许多我们希望解决的公开研究问题。在全局优化算法中设计一个正确地代价函数(即拥有更好的基于梯度的平滑项)有多重要?寻找一个全局最小值多重要?最好的匹配度量是什么?那种自适应/可移动窗口最好?是否可能使得参数自动适应不同的图像?预测误差是否是一个测量立体算法的有效度量?我们也想要尝试其他存在的数据集并且创造一些并非所有线性平面的带标签的数据集。 
结束这个研究后,我们计划进行任意相机几何的多帧立体匹配的研究。对着这个问题,有许多技术解决方案,包括立体像素表示,层表示以及多视角表示。这一更加普遍的匹配问题的版本对已基于图像绘制作业应该更加有用。 
本文中发展分类和实现算法框架描述给了我们一个对于立体匹配算法如何工作的有了更深的理解。我们希望其他研究者也能花时间认真计算分析他们自己的算法在本框架和方法中的表现,这将对于立体匹配算法的复杂行为有一个更加深刻的理解。

Acknowledgements 
……

你可能感兴趣的:(立体视觉)