Abstract
本文介绍了一种基于GPU的立体匹配系统,其精度和速度都很好。使用AD-Census度量初始化匹配成本量,在动态的基于交叉的区域中聚合,并在扫描线优化框架中更新以产生差异结果。 在多步骤细化过程中有效地处理视差结果中的各种误差。系统的每个阶段都设计有并行性考虑因素,以便可以使用CUDA实现加速计算。 实验结果证明了系统的准确性和效率:目前它是Middlebury基准测试中表现最好的,并且在0.1秒内在GPU上实现了结果。我们还提供了有关立体视频序列的额外示例,并讨论了系统的局限性。
1.Introduction
立体匹配是计算机视觉中研究最广泛的问题之一[11]。立体匹配算法设计中的两个主要问题是匹配精度和处理效率。尽管每年都会引入许多算法,但这两个问题在报告的结果中往往是矛盾的:准确的立体方法通常耗费时间[6,17,20],而基于GPU的方法实现了高处理速度和相对较低的视差精度[ 10,18,24]。据我们所知,大多数前10个Middlebury算法处理384×288图像对至少需要10秒,前20名中仅有的两种基于GPU的方法是CostFilter [9]和PlaneFitBP [19],具有接近实时的性能。
这种矛盾背后的原因很简单:精确立体算法采用的一些关键技术不适合并行GPU实现。仔细分析领先的Middlebury算法[6,17,20]表明这些算法在匹配过程中有几种常用技术:他们使用大型支持窗口来实现稳健的成本聚合[5,16,21];他们将差异计算步骤制定为能量最小化问题,并用慢收敛优化器解决[14]; 他们广泛使用分割图像区域作为匹配单元[17],表面约束[6,20]或后处理补丁[2]。这些技术以相当大的计算成本为代价显着提高了匹配质量。然而,直接将这些技术移植到GPU或其他多核平台是棘手和麻烦的[4,7,18,19]:大型聚合窗口需要对每个像素进行大量迭代;一些优化,分段和后处理方法需要复杂的数据结构和顺序处理。因此,简单的基于相关的技术在GPU和嵌入式立体声系统中更受欢迎。设计具有精确度和效率之间良好平衡的astereo匹配系统仍然是一个具有挑战性的问题。
在本文中,我们实现了接近实时性能的精确立体匹配系统。目前(2011年8月),我们的系统在Middlebury基准测试中表现最佳的系统。 简而言之,我们将几种技术集成到一个有效的立体框架中。 这些技术保证了高匹配质量,而不涉及昂贵的聚合或分段区域。此外,它们显示出适度的并行性,使得整个系统可以映射到GPU上以进行计算加速。 我们系统的关键技术包括:
AD-Census度量有效地结合了绝对差异(AD)测量和Census变换。和具有强大聚合方法的常见单独度量相比,此度量提供更准确的匹配结果。最近的立体算法采用了类似的措施[13]。
改进基于交叉的区域来实现有效的成本聚合。Zhang等人首先提出了基于交叉骨架的支撑区域。 [23],允许快速聚合中等级别的差异结果。我们通过更准确的交叉构建和成本聚合策略来增强此技术。
基于Hirschmuller的半全局匹配器[2]的扫描线优化器,来减小的路径方向。
一种系统的细化过程,利用迭代区域投票,插值,深度不连续调整和子像素增强来处理各种视差误差。这种多步骤过程证明对改善差异结果非常有效。
在GPU与CUDA系统上可以高效的实现。
2. Algorithm
遵循Scharstein和Szeliski的分类法[11],我们的系统包括四个步骤:成本初始化,成本聚合,差异计算和细化。我们提供了这些单独步骤的详细说明。
2.1. AD-Census 成本初始化
此步骤计算初始匹配成本量。由于可以在每个像素和每个视差水平同时执行计算,因此该步骤本质上是并行的。我们主要关注的是制定具有高匹配质量的成本措施。常见的成本指标包括绝对差异(AD),Birchfield和Tomasi's sampling-insensitive measure(BT),基于梯度的测量和非参数变换,如Census[22]。在Hirschmuller和Scharstein [3]最近的评估中, Census显示了本地和全球立体匹配方法的最佳总体结果。尽管将成本衡量标准相结合以提高准确性的想法似乎很简单,但相对较少的工作探索了这一主题。克劳斯等人。[6]提出线性组合SAD和基于梯度的测量用于成本计算。 他们的差异结果令人印象深刻,但这种组合的好处并没有明确阐述。
Census将局部图像结构编码为像素亮度的相对排序,而不是亮度值本身,因此容忍了辐射测量变化和图像噪声带来的异常值。然而,该资产还可以在具有重复或类似局部结构的图像区域中引入匹配的模糊。 为了解决这个问题,应该在措施中加入更详细的信息。 对于具有相似局部结构的图像区域,颜色(或亮度)信息可能有助于减轻匹配的模糊性;而对于具有相似颜色分布的区域,窗口上的Census变换比基于像素的亮度差异更稳健。 这种观察激发了综合措施。
给定一个像素P=(x,y)在左边的图像中和差异水平d,两个单独的成本值Ccensus(P,d)和(P,d)首先计算。对于Ccensus我们使用了9*7的窗口和64位字符串去编码每个像素。Ccensus(P,d)定义为代表像素p的两个字符串的汉明距离及其对应关系pd=(x-d,y)在右图中[22]。定义为RGB通道中p和pd的平均亮度差:
然后,AD-Census成本值C(p,d)计算如下:
其中是变量的鲁棒函数c:
该函数的目的有两个:首先,它将不同的成本度量映射到范围[0,1],使得等式(2)不会受到其中一个度量的严重偏差; 第二,它允许用参数容易地控制异常值的影响。
为了验证组合的效果,图1中显示了具有AD,Census和AD-Census的Middlebury数据集的一些特写差异结果。采用基于交叉的聚合。 人口普查在具有重复局部结构的区域中产生错误匹配,而基于像素的AD不能处理大的无纹理区域。 综合AD-Census措施成功地减少了由个别措施引起的错误。 对于定量比较,AD-Census分别将人口普查的非遮挡误差百分比降低1.96%(Tsukuba),0.4%(Venus),1.36%(Teddy)和1.52%(Cones)。 而这种改进来自于额外的计算成本。
图1. Tsukuba和Teddy图像对的一些特写差异结果,使用AD,Census,AD-Census成本度量和基于交叉的聚合计算。 AD-Census测量为重复结构和无纹理区域产生适当的视差结果。
2.2 基于交叉的成本汇总
此步骤将每个像素的匹配成本聚合在支持区域上,以减少初始成本量中的匹配模糊度和噪声。 对聚合的简单但有效的假设是具有相似颜色的相邻像素应具有相似的差异。 这种假设已被最近的聚合方法所采用,例如段支持[16],自适应权重[21]和测地线权重[5]。如引言中所述,这些聚合方法需要在每个像素上进行分段操作或昂贵的迭代,这对于高效的GPU实现是禁止的。 尽管已经针对GPU系统提出了具有1D聚合[13,18]和颜色平均[4,19]的简化自适应权重技术,但是聚合准确性通常退化。 最近,Rhemann等。 [9]将聚合步骤制定为成本过滤问题。 通过使用引导滤波器平滑每个成本切片[1],可以实现良好的视差结果。
我们专注于Zhang等人最近提出的基于交叉的聚合方法。[23]. 我们表明,通过改进支持区域构建和聚合策略,该方法可以产生与自适应权重方法相当的聚合结果,并且计算时间更短。相对于自适应加权方法的另一个优点是为每个像素构造显式支持区域,其可以在稍后的后处理步骤中使用。
图2.基于交叉的聚合:在第一步中,为每个像素构建一个直立的交叉。像素p的支撑区域通过合并位于像素p的垂直臂上的像素(例如,q)的水平臂来建模。 在第二步中,支撑区域中的成本沿水平和垂直方向在两次通过内聚合。
基于交叉的聚合通过两个步骤进行,如图2所示。在第一步(图2(a))中,为每个像素构造具有四个臂的直立十字架。给定像素p,当它找到违反以下两个规则之一的端点像素pl时,其左臂会停止:
是pl和p之间的色差,是预设的阈值。 色差表示为
2. 是pl和p之间的空间距离,L是预设的最大长度L(以像素为单位测量)。空间距离是
定义为
这两个规则对参数和L的颜色相似性和臂长构成限制.p的右臂,上臂和下臂以类似的方式构建。在交叉构造步骤之后,通过合并位于p的垂直臂(例如,q)上的所有像素的水平臂来对像素p的支撑区域进行建模。 在第二步(图2(b))中,计算所有像素的聚合成本两遍内:第一次通过横向总结匹配成本并存储中间结果;第二遍然后垂直聚合中间结果以获得最终成本。可以使用1D积分图像有效地计算两个通道。 为了获得稳定的成本量,聚合步骤通常运行2到4次迭代,这可以是被视为各向异性扩散过程。 关于该方法的更多细节可以在[23]中找到。
基于交叉的聚合的准确性与参数L和密切相关,因为它们用构造规则控制支撑区域的形状。大的无纹理区域可能需要大的L和值以包括足够的强度变化,但是简单地增加所有像素的这些参数将在暗区域或深度不连续处引入更多的误差。因此,我们建议使用以下增强规则构建每个像素的交叉(我们仍然使用像素p的左臂和端点像素pl作为示例)
规则1不仅限制了pl和p之间的色差,而且还限制了pl和它的前任p1 +(1,0)在同一臂上的色差,使得臂不会越过图像中的边缘。规则2和3允许更灵活地控制臂长。 我们使用较大的L1值来为无纹理区域包含足够的像素。但是当臂长超过预设值L2(L2
对于成本汇总步骤,我们还提出了不同的策略。我们仍然执行此步骤4次迭代以获得稳定的成本值。对于迭代1和3,我们遵循原始方法:成本首先是水平汇总,然后是纵向汇总。但是对于迭代2和4,我们切换聚合方向:成本首先垂直汇总,然后水平汇总。对于每个像素,这种新的聚合顺序导致基于交叉的支持区域与原始方法中的不同。通过改变聚合方向,在迭代过程中使用两个支持区域。我们发现这种聚合策略可以显着减少深度不连续处的误差。
通过原始的基于交叉的聚合方法和我们的改进方法计算的Tsukuba视差结果如图3所示,这表明增强的交叉构造规则和聚合策略可以在大的无纹理区域和近深度不连续处产生更准确的结果。
使用三种聚合方法(自适应权重,原始的基于交叉的聚合方法和我们的增强方法)评估WTA差异结果。 对于自适应权重,参数遵循[21]中的设置。对于原始的基于交叉的方法,L = 17,T = 20并且使用4次迭代。图4给出了四个数据集(非遮挡,不连续和所有区域)的平均误差百分比。我们的增强方法可以在各种区域产生最准确的结果,特别是在深度不连续处。我们在自适应加权方法上的实现通常需要超过1分钟的CPU才能产生聚合体积,而我们的方法只需要几秒钟。
图3.原始的基于交叉的聚合方法和我们在Tsukuba图像对上的改进方法的比较。我们的聚合方法可以更好地处理大的无纹理区域和深度不连续性
2.3 扫描线优化
该步骤接收聚合的匹配成本量(表示为C1)并计算中间视差结果。为了进一步减轻匹配的模糊性,应该采用具有平滑约束和适度并行性的优化器。我们采用基于Hirschmuller的半全局匹配方法的多方向扫描线优化器[2].
四个扫描线优化过程独立执行:2沿水平方向,2沿垂直方向。给定扫描线方向r,路径成本
图4.自适应权重的各个区域的平均差异误差百分比,原始的基于交叉的聚合方法和我们的增强方法。
在像素p和视差d处更新如下:
其中p-r是沿相同方向的前一个像素,P1,P2(P1≤P2)是用于惩罚相邻像素之间的视差变化的两个参数。实际上,P1,P2是根据左图中的色差D1 = Dc(p,p-r)和右图中的D2 = Dc(pd,pd-r)对称设置的[8]:
其中是常数,是色差的阈值。像素p和视差d的最终成本C2(p,d)是通过平均来自所有四个方向的路径成本获得的:
选择具有最小C2值的视差作为像素p的中间结果。
2.4 多步差异细化
由前三个步骤计算的两个图像(表示为DL和DR)的视差结果包含遮挡区域和深度不连续处的异常值。 在检测到这些异常值后,最简单的细化方法是用最接近的可靠差异填充它们[11],这只适用于小的遮挡区域。 相反,我们在多步骤过程中系统地处理差异错误。每个步骤都试图消除由各种因素引起的错误
异常值检测:首先使用左右一致性检查检测DL中的异常值:如果不成立,则像素p是异常值。异常值进一步分为遮挡点和不匹配点,因为它们需要不同的插值策略。我们遵循Hirschmuller [2]提出的方法:对于差异性的异常值DR,检查其核线和d的交点。 如果未检测到交叉点,则将p标记为“遮挡”,否则标记为“不匹配”。
迭代区域投票:检测到的异常值应填充可靠的相邻差异。最精确的立体算法采用分段区域进行异常值处理[2,20],这些区域不适合GPU实现。我们使用构建的交叉基础区域和强大的投票方案处理这些异常值。
对于异常像素p,收集其基于交叉的支持区域中的所有可靠差异以构建具有个区间的直方图。具有最高bin值(大多数投票)的差异表示为。并且可靠像素的总数表示为。如果在支持区域中找到足够可靠的像素和投票,则用更新p的差异:
其中是两个阈值。
为了处理尽可能多的异常值,投票过程运行5次迭代。填充的异常值被标记为“可靠”像素并且在下一次迭代中使用,使得有效视差信息可以逐渐传播到遮挡区域。适当的插值:剩余的异常值用插值策略填充,以不同方式处理遮挡和不匹配点。对于异常值p,我们在16个不同方向上找到最近的可靠像素。如果p是遮挡点,则选择具有最低视差值的像素用于插值,因为p很可能来自背景; 否则选择具有最相似颜色的像素进行插值。通过区域投票和插值,大多数异常值都可以从中有效地删除差异结果,如图5所示。
深度不连续性调整:在该步骤中,利用相邻像素信息进一步细化深度不连续性周围的差异。我们首先检测视差图像中的所有边缘。对于视差边缘上的每个像素p,收集来自边缘两侧的两个像素p1,p2。如果两个像素中的一个具有比更小的匹配成本,则被或代替。这种简单的方法有助于减少不连续性周围的小误差,如图6中的误差图所示。
图5. Teddy图像对的视差错误图。错误标记为灰色(遮挡)和黑色(非遮挡)。异常值处理过程中的差异误差显着减少。
图6.调整步骤后,深度不连续处的误差减小。
子像素增强:最后,执行基于二次多项式插值的子像素增强处理,以减少由离散视差水平引起的误差[20]。对于像素p,其内插视差计算如下:
其中,通过用3×3中值滤波器平滑内插视差结果来获得最终视差结果
为了验证细化过程的有效性,执行每个细化步骤后各个区域的平均误差百分比如图7所示。四个细化步骤成功地将所有区域的误差百分比降低了3.8%,但它们的贡献因不同而不同 区域:对于非遮挡区域,投票和子像素增强对于处理不匹配异常值最有效; 对于不连续区域,通过投票,不连续性调整和子像素增强显着减少误差; 通过投票和插值去除所有区域中的大多数异常值,并且通过调整和子像素增强来减少由于不连续性和量化引起的小误差。 这些步骤的系统集成保证了强大的后处理方法。
3. CUDA Implementation
计算统一设备架构(CUDA)是用于NVIDIA图形硬件上的并行计算任务的编程接口。计算任务被编码为内核函数,该函数同时执行多线程的数据元素。线程的分配由两个分层概念控制:网格和块。创建具有多个块的网格,每个块由多个线程组成。CUDA实现的性能与线程分配和内存访问密切相关,需要在各种计算任务和硬件平台中仔细调整。给定图像分辨率和视差范围D,我们简要描述了算法的实现问题。
成本初始化:此步骤与W_H线程并行化。线程被组织成2D网格,块大小设置为32×32。每个线程负责计算给定视差处的像素的成本值。对于人口普查变换,每个像素都需要一个方形窗口,这需要将更多数据加载到共享存储器中以便快速访问。
成本聚合:为聚合过程的两个步骤创建具有W_H线程的网格。对于交叉构造,我们将块大小设置为W或H,这样每个块都可以有效地处理扫描线。对于成本聚合,我们遵循Zhang等人提出的方法。 [24],其作用类似于第一步。 每个线程在两次传递中水平和垂直地汇总像素的成本值。 在两个步骤中都考虑使用共享内存进行数据重用。
扫描线优化:该步骤与前面的步骤不同,因为该过程在扫描线方向上是顺序的并且在正交方向上是平行的。根据扫描线方向创建具有W_D或H_D线程的网格。为每个扫描线分配D个线程,使得可以同时计算所有视差级别上的路径成本。需要D线程之间的同步以找到相同路径上的前一像素的最小成本。
视差细化:细化过程的每个步骤都适用于中间视差图像,可以使用_H线程有效地处理。
4. Experimental Results
我们用Middlebury基准测试我们的系统[12]。该测试平台是一台配备Core2Duo 2.20GHz CPU和NVIDIA GeForce GTX 480显卡的PC。表1中给出了参数,这些参数对于所有数据集保持不变。差异结果如图8所示。我们的系统在Middlebury评估中排名第一,如表2所示。我们的算法在所有数据集上都表现良好,并且在金星图像对上给出最佳结果,在非遮挡区域和近深度区域都具有最小误差不连续性。与诸如CoopRegion [17]之类的算法相比,Tsukuba图像对的结果并不具有竞争力。Tsukuba图像对包含灯和桌子附近的一些非常暗和嘈杂的区域,这导致不正确的基于交叉的支撑区域用于聚合和细化。
我们在CPU和图形硬件上运行算法。对于四个数据集(Tsukuba,Venus,Teddy和Cones),CPU实现分别需要2.5秒,4.5秒,15秒和15秒,而GPU实现分别仅需要0.016秒,0.032秒,0.095秒和0.094秒。GPU友好的系统设计在处理速度方面带来了令人印象深刻的140倍速度。四个计算步骤的GPU运行时间的平均比例分别为1%,70%,28%和1%。迭代成本聚合步骤和扫描线优化过程主导运行时间。
最后,我们在两个立体视频序列上测试我们的系统:来自HHI数据库的“书籍到达”场景(512×384,60个差异级别)和来自的“Ilkay”场景Microsoft i2i数据库(320×240,50个差异级别)。为了测试系统的泛化能力,我们使用与Middlebury数据集相同的参数集,并且在计算过程中不使用时间相干性信息。这两个示例的快照如图9所示,运行速度约为10FPS的视频演示可在http://xingmei.net/resource/video/adcensus.avi上找到。我们的系统在这些例子上表现得相当不错,但结果并不像Middlebury数据集那样令人信服:在深度边界和遮挡区域周围可见人工制品。
我们用视频示例简要讨论当前系统的局限性。差异误差来自几个方面:第一,支持区域由交叉骨架严重依赖于颜色和连接约束。对于实际场景,交叉构造过程很容易被暗区和图像噪声破坏。可以产生没有足够支撑区域的小区域,这为以后的计算步骤(例如成本计算和区域投票)带来了显着的错误。双边滤波可以用作预处理,以在保留图像边缘的同时降低噪声[1,15]。其次,精心设计的多阶段机制是一把双刃剑。它有助于我们以系统的方式逐步获得准确的结果并消除错误,但它也带来了大量参数。通过仔细调整各个参数,可以改善视差质量,但是这种方案对于各种现实世界的应用来说通常是费力且不切实际的。 一种可能的解决方案是用地面实况数据分析参数的鲁棒性,并用不同的视觉内容自适应地设置“不稳定”参数。迭代框架内的自动参数估计[25]也可用于避免棘手的参数调整过程。
5.结论
本文提出了一种具有精确视差结果的近实时立体声系统。 我们的系统基于几个关键技术:AD-Census成本测量,基于交叉的支持区域,扫描线优化和系统细化过程。 这些技术在不牺牲性能的情况下显着改善了视差质量并行性,适用于GPU实现。虽然我们的系统为Middlebury数据集提供了很好的结果,但在现实世界的应用程序中应用它仍然是如视频示例所示,这是一项具有挑战性的任务。 真实世界数据通常包含可能导致的显着图像噪声,整流误差和照明变化成本计算和支持区域的严重问题施工。 稳健的参数设定方法对于产生令人满意的结果也很重要。 我们想将来探讨这些话题。
承认
作者要感谢Daniel Scharstein的Middlebury试验台和个人通信。