畅雅雯,赵冬青,单彦虎
中北大学 仪器与电子学院,太原 030051
立体视觉是计算机视觉的重要研究领域,立体匹配是立体视觉的核心步骤,通过寻找左右两幅图像的匹配点来计算视差,获取场景深度信息。相对传统的接触式测量,立体视觉测量技术可以满足水下、火场等非接触式场景下的测量需求,具有效率高、系统结构简单、成本低等优点,近年来被广泛应用到三维重建、无人驾驶、医学成像等领域[1]。Scharstein等[2]将立体匹配分为匹配代价计算、代价聚合、视差计算和视差精细四个步骤。其中匹配代价计算和代价聚合对获取高精度的视差信息,进行精确三维重建至关重要。
立体匹配中,选取的匹配代价计算方法在不同应用条件中产生的匹配精度不同。常见匹配代价计算方法有:灰度变化差AD算法、非参数Census变换、梯度Gradient及互信息MI等[3]。基于图像的颜色和几何信息算法在纹理丰富区域匹配效果较好,但受光照失真影响较大;非参数变换和梯度对幅度失真不敏感,但在重复结构区域处理效果并不理想。综合考虑颜色、梯度、非参数变换等信息,融合两种或多种代价计算方法通常能够更加准确地描述像素点包含的信息,如Census+MI+Gradient[4]、AD+Census+Gradient[5]、AD+Census[6]等。图像的光照、噪声以及其自身的纹理条件都会影响匹配效果,针对特定测试环境设计相应匹配算法对于准确获得视差信息有着重要的意义。
对于代价聚合,聚合窗口的尺寸影响着匹配结果的可靠性,窗口过小易在弱纹理区域出现误匹配,过大易在深度不连续区域匹配错误。Zhang等[7]利用颜色和空间距离双阈值,自适应地构造十字交叉域进行代价聚合。Qu等[8]基于Census变换中心像素与邻域像素的差异性构建自适应支持窗。Hosni等[9]提出利用引导滤波器进行代价聚合,可以很好地保持边缘,但是窗口大小是固定的。如何针对图像的纹理、颜色、空间结构有效调整聚合窗尺寸是个亟待解决的问题。
为提高立体匹配算法在弱纹理区域的匹配精度以及增强光照失真条件下的稳健性,本文融合多种匹配代价计算方法和改进的自适应十字窗口聚合进行算法实现。在匹配代价计算阶段引入对光照失真更稳定的HSV颜色空间,使用高斯加权后的Census变换,排除传统Census变换受噪声产生的中心异常值影响,有效抑制噪声干扰,并结合梯度信息提高对图像边界的匹配精度。代价聚合阶段利用梯度划分弱纹理与纹理丰富区域,根据像素点区域特征提出基于梯度和可变颜色阈值的新型自适应窗口构建方法,提高了匹配精度,并利用多步骤视差精细优化视差效果。
本文所提算法的整体流程如图1所示,首先,以校正后的左右图像为输入,融合H通道信息、梯度信息和改进的Census变换作为代价计算方法。其次,引入梯度信息和可变颜色阈值对每个像素构建自适应的十字交叉聚合窗口。最后,采用胜者为王(Winner-Take-All,WTA)策略进行初始视差计算,通过左右一致性检测、迭代局部区域投票、视差填充和非连续区域调整等步骤进行视差精细,得到最终视差图结果。
图1 算法流程图Fig.1 Diagram of proposed algorithm
代价计算通过相似度量函数选取左右图像视差搜索范围内最高相似度的像素点作为匹配点。根据亮度/色彩一致性假设,匹配点通常具有相似的灰度、颜色等,常引入RGB颜色空间作为匹配代价,可以提高在纹理丰富区域的匹配精度[9]。
本文引入HSV颜色空间[10],从色调、饱和度和亮度3个方面提取图像信息。H分量通常反映图像的色彩变化,可以有效提取前、后景信息;S分量反映图像饱和度,突出图像细节;V分量反映图像亮度。选取Middlebury数据集中的Plastic图像,针对光照条件相同但曝光时间不同、光照条件不同但曝光时间相同、以及光照条件和曝光时间均不同三种条件情况,以同一场景同一个像素点(225,195)为测试对象,统计该点在RGB、HSV各通道及其灰度图的数值,取值范围都是[0,255]。表1记录像素点在上述三种情况下的B、G、R、H、S、V各通道及灰度值的变化情况。
表1 不同光照曝光下Plastic图像各通道数值Table 1 Value of each channels of Plastic image under different illumination and exposure conditions
对同一图像在不同曝光条件下选取多个测试点进行分析发现,R、G、B分量在数值变化上具有一致性,彼此相关,且取值与物体本身光照亮度有关,由RGB得到的灰度值也受此影响,在光照曝光不同时,无法准确描述像素。在HSV空间中,三通道相对独立,但是S和V通道受光照影响也比较大。通过比较光照曝光不同时各分量的标准差,观察到H通道最稳定,波动远远小于其他几个通道。因此,选取左右图像对应像素H通道的绝对差值作为匹配代价,既能表征色度信息又能有效改善光照失真的影响,提高匹配精度。H通道匹配代价定义如下:
传统Census变换通过逐位比较像素p与其邻域窗口像素的灰度大小,来构建二进制Census变换码。Census变换的匹配代价定义为左右图像对应像素点Census变换码的汉明距离[11]。表述如下:
式中,I(p)和I(q)分别是像素点p和q的灰度值;N(p)是p的邻域窗口;B[·]为比较函数;⊗表示按位连接;BT(p)和BT(pd)分别为左图像素p和右图匹配点pd的Census变换码。
传统的Census变换能在一定程度上抑制幅度失真,但它忽略了像素之间的位置关系,也过于依赖中心像素,一旦中心像素由于噪声干扰发生突变,Census变换码将发生很大变化[12]。针对上述缺陷,本文进一步考虑邻域像素与中心像素的距离关系,提出用邻域高斯加权灰度平均值作为参考值,将其与中心像素的灰度值进行对比,并设置灰度差值阈值T作为替换条件。当原中心像素与参考值的灰度差值超过设定阈值,则认为该中心像素点发生突变,用参考值代替原中心像素值,否则,仍然使用原中心像素的灰度值。表达式如下:
式中,Iwm(p)是高斯加权平均后的参考像素灰度值;Wpq为高斯加权值,是窗口内的权值之和;x和y是窗口中像素到中心像素p的位置偏移;Icen(p)为最终Census代价计算时像素p的灰度值;σ是设定的标准差;T为灰度差值阈值,此处取18。
图2以邻域3×3的窗口为例,展示了本文改进Census变换的计算过程。当中心像素受到噪声干扰,从65突变到100,传统Census算法变换码发生明显变化,而通过改进的Census变换,将邻域加权平均值73作为参考值替换得到的变换码保持不变,提高了Census变换的抗干扰性。
图像梯度能有效反映待匹配点附近的轮廓和结构信息,对光照失真和噪声有很好的稳健性。梯度匹配代价定义如下:
式中,∇x和∇y分别为水平和竖直方向的Sobel加权梯度算子,I(p)和I(pd)分别为左图像素点p和右图对应视差为d的匹配点pd的灰度值。
本文将H通道颜色信息、改进的Census变换和水平、竖直方向的梯度信息进行归一化融合[13],最终将立体匹配代价计算定义为:
图2 改进Census变换计算过程Fig.2 Improving calculation process of Census transform
式中,α、δ和γ是不同代价组成的权重,调整三个参数对总代价计算的贡献,可以获得较好的匹配效果,考虑到色度信息在弱纹理区域的低鲁棒性以及Census变换对光照失真的不敏感性,此处取值分别为{0.3,1,0.1};λH、λcen、λg分别为H通道、Census变换和梯度代价对总代价的影响参数[14]。
图3显示了多特征融合策略的效果,实验的局部图像选自Middlebury官网立体数据集中的Teddy图像对,对比图3(c)和图3(d),融合AD算法、传统Census变换和梯度的方法在边界区出现较多误匹配,而基于H通道、高斯加权后的Census变换和梯度的方法能明显减少在边界区的错误数量,证明了所改进多特征融合策略的有效性。
图3 不同的代价组合方法获得的视差图Fig.3 Disparity maps obtained by different cost combination methods
由于单个像素的匹配代价区分度低,获取的视差往往并不可靠,将局部窗口相邻像素的初始匹配代价求和或取平均可以提高匹配可靠性,窗口的形状和大小直接决定了聚合效果。
本文根据相似强度的像素可能来自相似结构具有相近的视差值这一假设[15],基于Mei等的自适应十字交叉窗口骨架,在代价聚合阶段提出了基于梯度信息和可变颜色阈值的窗口臂长构建方法[16]。首先设置梯度阈值,划定该像素点处于弱纹理区域还是边缘区域,针对不同的区域特点设置不同的约束条件,在弱纹理区域设置较宽松的颜色和距离阈值,在边缘区域通过缩小最大颜色和距离阈值加强限制。臂长的构造规则不仅考虑中心像素与臂上像素的颜色差异,还考虑它们的梯度值之差,确保臂长只在相似区域内部延伸。梯度值采用3×3的加权Sobel算子计算。改进后弱纹理区域的臂长约束条件如下:
式中,βmax是判断弱纹理和边缘区域的梯度阈值;β1是中心像素与臂上像素梯度差值阈值;Dg(pi,p)、Dc(pi,p)、Dd(pi,p)分别是像素p和pi之间的梯度差值、颜色差值和空间距离;τmax和τ2是两个不同的颜色阈值;Lmax和L2是两个不同的距离阈值。其中,τ2为可变颜色阈值,它随当前臂长线性变化,臂长越长,颜色阈值限定越严格。Lp=0时,颜色阈值取最大值τ2=τmax。Lp=Lmax时,颜色阈值取最小值τ2=0。定义如下:
对于边缘和不连续区域,仅需要对最大颜色阈值和距离阈值进行适当减小,避免边缘区域臂长的过度延伸,增加错误匹配,其余条件仍不变。
通过本文的臂长约束条件,以像素p为中心逐像素直线延伸可确定左、右、上、下四个臂长,分别是,以此构造由水平线段H(p)和垂直线段V(p)组成的十字交叉骨架作为聚合的局部窗口,并采用四个方向的扫描线优化方法进一步减少匹配误差。在不满足上述任意条件时,停止臂长的延伸[17]。
代价聚合后采用赢家通吃策略(WTA)算法,即选取聚合后的最小代价值对应的视差作为初始视差值[18]。后处理优化时,采用左右一致性检测选出异常值,左图中像素p(x,y)的视差d1与右图对应的匹配点p(x-d1,y)的视差d2的差值,若满足表达式:
则认为p(x,y)的视差不满足一致性检测,将其作为异常值作后续处理,否则满足一致性检测,将其保留,Th为设定的视差阈值,一般取1。利用迭代局部投票统计异常像素p支持域内所有有效像素的视差值,多次迭代后将满足占比条件得票概率最多的视差值赋值给p,作为该像素的视差。异常像素包括遮挡点和误匹配点,对于遮挡点,选择邻域16方向最小视差值插值填充;对于误匹配点,选择与p颜色最接近的邻域像素视差进行插值。非连续区域调整针对边缘像素采用左右两边代价更小的视差值替代原视差。
实验硬件配置为64位Windows10系统,Intel®Core™i5-6200U的CPU处理器,运行内存为4 GB。利用C++语言在VS2019软件下使用公认立体匹配评估平台Middlebury官方提供的数据集对所提算法进行匹配精度的测试验证,将本文视差结果与真实视差相差1.0像素以上的点定义为误匹配点,用误匹配点数除以总体有效视差点数得到误匹配率[19],实验对图像的非遮挡区域和全部区域进行误匹配率的计算,实验所用参数如表2所示。Lmax、L2和τmax沿用文献[6]的原始参数,可以获得较稳定的峰值信噪比,β1和βmax由动态双阈值Canny边缘提取算法确定,灰度差值阈值T的选取过大会对发生突变的像素不敏感,过小会增加不必要的运算成本,通过计算不同阈值下的误匹配率,选取区间设置在[15,22]为宜,此处T取值18。
表2 实验所用参数Table 2 Parameters Used in Experiment
为了验证算法在光照失真时的性能以及弱纹理区域的匹配精度,选取Middlebury中的立体匹配图像对Aloe、Baby1、Lampshade1、Plastic、Bowling2进行算法测试,其中,Lampshade1和Plastic是典型弱纹理丰富的图像。在无光照失真和不同光照失真条件下分别进行算法的实现,并将本文算法与CG-GF算法[7(]Census+梯度+引导滤波代价聚合)、CG-NL算法[16(]Census+梯度+非局部代价聚合)和AD-Census算法[6(]AD+Census+十字交叉域代价聚合)的视差图进行对比。图4为无光照失真条件下视差误匹配像素的对比图,错误匹配的点已标为红色。表3为无光照失真条件下的非遮挡区域和全部区域的误匹配率。
从图4视差对比图中可以看出,在无光照失真条件下,本文算法视差图中的误匹配像素点明显较其他算法少,在边界和弱纹理区域尤其明显。结合表3结果分析,由于Lampshade1和Plastic中的弱纹理区域丰富,CG-NL算法在Plastic中未遮挡区域的误匹配率高达35%,而本文算法针对每个像素基于梯度和颜色阈值进行自适应聚合窗的构建,增强了邻域匹配代价的可靠性,提高了弱纹理区域的匹配精度,Plastic图像误匹配率只有15.87%,四幅图像的平均误匹配率为14.29%,匹配精度远远优于其他算法,视差效果较好。
光照和曝光差异会引起左右图像亮度的急剧变化,为进一步测试所提算法对于光照失真的稳健性,将四种算法在不同光照不同曝光程度下进行测试比较。图5可以看到前三种算法对于由于光照和曝光差异产生的幅度失真非常敏感,视差图中错误匹配较多,这是因为CG-GF和CG-NL算法融合了Census变换和梯度进行代价计算,对光照失真不敏感,但在重复纹理结构区域易发生误匹配;AD-Census算法基于图像亮度灰度进行代价计算,在光照失真情况下难以取得较好效果。而本文算法采用对光照亮度信息不敏感的HSV颜色空间H通道,同时融合改进的Census变换作匹配代价,以解决中心像素突变带来的误匹配问题,增强光照失真稳健性的同时提高了算法的抗干扰能力。在物体边界即视差不连续区域,本文算法能更好地反映出物体轮廓,平坦区域也有更少的错误匹配出现,进一步说明了所提自适应聚合方法的优越性。
图4 图像对(Aloe、Baby1、Lampshade1、Plastic)在无光照失真条件下不同匹配算法的视差图Fig.4 Disparity map of image pair(Aloe,Baby1,Lampshade1,Plastic)under same illumination and exposure conditions using different matching algorithms
表3 图像对在无光照失真条件下的误匹配率Table 3 Error match rate of different matching algorithms under same illumination and exposure conditions %
图6为四种算法的运行时间对比图,所提算法在处理弱纹理图像时耗时较长。主要时间差距在代价聚合阶段,CG-NL算法基于最小生成树聚合,只需两次遍历即可得到结果,运行效率较快。AD-Census算法采用并行结构进行自适应窗聚合,加快了运行速度。CG-GF算法对图像进行多层采样处理,增加了运算复杂度。而本文算法由于对每个像素进行弱纹理与深度不连续区的判断,基于不同约束条件构建聚合窗,提升了弱纹理区域精度但也增加了运算复杂度。虽然算法还未达到实时性要求,但由于本文算法基于各像素点可独立进行运算处理,利用多线程共享数据内存进行并行结构设计,能进一步提高算法效率。
图5 图像对(Bowling2)在不同程度光照失真条件下不同匹配算法的视差图Fig.5 Disparity map of image pair(Bowling2)under different degree of illumination distortion using different matching algorithms
图6 各算法运行时间Fig.6 Running time of algorithms
图7记录在Baby1图像中添加不同密度椒盐噪声后四种算法的误匹配率,本文算法在不同密度的椒盐噪声下都具有最低的误匹配率,原因为改进Census变换对受到干扰的像素可根据邻域像素重新选值,确保了匹配代价值的准确性,可以有效抑制噪声干扰。
图7 各算法在椒盐噪声下的误匹配率Fig.7 Error match rate of algorithms in salt and pepper noise
定的H通道、对噪声干扰有效抑制的高斯加权平均的Census变换和梯度作为匹配代价。利用梯度信息和可变颜色阈值实现新型的自适应十字交叉聚合方法。与AD-Census算法相比,本文算法的匹配误差减少了3.24%。实验结果表明,本文算法能有效减少边界处的错误匹配,提高对弱纹理区域的匹配精度,增强了对光照失真的稳健性和噪声抗干扰性。未来工作将围绕实际场景中的三维重建而展开,优化算法减少实测中的测量误差,并利用并行结构设计以满足实时性要求。