安 耿,杨奋林,周梦园,窦信瑞
(1.吉首大学通信与电子工程学院,湖南 吉首 416000;2.吉首大学数学与统计学院,湖南 吉首 416000)
双目立体匹配技术利用双目图像可以得到物体世界坐标系下的信息.近年来,双目立体匹配技术广泛应用于智能驾驶、三维重建和机器人辅助等领域[1-3].立体匹配算法根据计算区域的不同,可大致分为全局匹配算法[4-5]与局部匹配算法.全局匹配算法采用全局最优化理论,可获得较高精度的视差图,但计算复杂度高,匹配速度慢;局部匹配算法的计算量小,实时性好,但受计算区域和噪声的影响较大,致使视差图存在深度不连续,形状模糊[6].为了兼顾匹配精度与实时性,笔者受文献[7-9]启发,选用双边滤波的模板值替代传统Census变换窗口中心点灰度值,以避免噪声影响而导致误匹配;为了提升匹配精度,加入Sobel算子,将其与灰度绝对误差和 (Sum of Absolute Differences,SAD)算法的匹配代价进行代价融合.
传统Census变换是一种利用局部窗口的非参数区域变换.首先对于校准好的左、右图像按照视差范围划分计算区域,局部窗口中心点p的灰度值I(p)和窗口邻域q的灰度值I(q)在区域内进行比较,邻域灰度值大于或等于中心点灰度值,就将该点设置为0,反之设置为1;然后依次按位串联生成2串二进制比特串;最后依次进行异或运算得到汉明距离,用汉明距离作为像素点的匹配代价.
传统Census变换表示为:
Ccen(p)=⊗ζ(I(p),I(q))q∈Np.
其中:⊗是按位串联符;Np为像素点P的邻域.像素点p的匹配代价为
C(p,d)=Hamming(CLcen(p),CRcen(p,d))d∈[dmin,dmax].
其中:CLcen(p)为左图的比特串;CRcen(p,d)为右图在视差为d的比特串;dmin,dmax分别为最小视差和最大视差.
传统Census变换利用窗口中心点灰度值和邻域点灰度值的相对关系来计算匹配代价,当中心点灰度值受到外界干扰时,会导致匹配代价较原来结果出现差别.笔者将采用双边滤波的模板值替代传统Census变换窗口中心点灰度值.
双边滤波由一个能反映像素点空间距离的空间域核和一个能反映像素值距离的值域核组成,可以在有效去除噪声影响的同时保留图像边缘信息.空间域核和值域核分别表示为
由于传统Census变换会导致像素点之间的纹理信息丢失,因此笔者选用Sobel算子补充视差图的纹理信息.
Sobel算子使用纵向梯度卷积核和横向梯度卷积核对每个像素点做卷积和运算:
传统Census变换具有灰度不变性,这使得传统Census变换能够容纳一定的光照变化和噪声,但会导致整体匹配精度降低.SAD算法能反映区域内灰度值的变化,有较好的整体匹配效果.该算法是在左图和右图分别选择1个窗口,2个窗口每个位置的灰度值对应相减求得差值,再将每个位置上的差值取绝对值后累加起来作为视差值.这个过程用公式表示为
其中w为匹配窗口大小,IL(x,y)和IR(x,y)分别为左、右图在(x,y)点的灰度值.
融合改进后的Census变换、Sobel算子和SAD算法三者的匹配代价为
Cf(p,d)=ρ(CRcensus(p,d),λRcensus)+ρ(CSobel(p,d),λSobel)+ρ(CSAD(p,d),λSAD).
(1)
其中:CRcensus(p,d)为改进后的Census变换的匹配代价;CSobel(p,d)为Sobel算子的匹配代价;CSAD(p,d)为SAD算法的匹配代价;λRcensus,λSobel和λSAD分别为改进后的Census变换、Sobel算子和SAD算法的权重[10];ρ是归一化函数.
Scharstein等[11]将立体匹配流程总结为匹配代价计算、匹配代价聚合、视差计算和视差后处理这4个步骤.
(1)匹配代价计算.通过(1)式得到初始的代价空间.
(2)匹配代价聚合.目的是建立相邻视差之间的联系.笔者使用动态十字交叉域代价聚合,以计算左臂长为例:
(2)
D(p,q) (3) (4) 方程组(2)表示臂长延伸时,要求I(p)和I(q)的差值要小于阈值τ1;(3)式限制臂长D(p,q)小于最大臂长l1;方程组(4)表示当臂长超过设定臂长l2,小于最大臂长l1时,取更加严格的阈值τ2. (3)视差计算.采用赢家通吃策略选择最优视差,表示为 dp=argminC(p,d)d∈[dmin,dmax]. (4)视差后处理.使用左右一致性检验和引导滤波对视差图进行优化.左右一致性检验可描述为 |dL-dR|≤Td,d(p)=min{d(pL),d(pR)}. 其中:dL和dR分别为左、右视差图的视差;Td为阈值,对于不满足阈值的像素点标记为异常点;d(pL)和d(pR)分别表示异常点p在左、右方向第1个非异常点的视差. 为了验证改进算法的可行性,选取Middlebury网站提供的Tsukuba,Teddy,Cones等3组标准双目图像进行测试,3组图像的原始图像及真实视差图像如图1所示.在Intel Core i5-7300HQ主频2.5 GHz、内存8 GB、Windows 10、Python3.7.2环境下运行,采用改进算法和传统Census变换分别对3组图像进行匹配,结果如图2所示. 图1 原始图像和真实视差图像Fig. 1 Original Image and True Parallax Image 图2 传统Census变换和改进算法的匹配结果Fig. 2 Matching Results of Traditional Census Transform and Improved Algorithm 由图2可见,相比传统Census变换,改进算法在无纹理和弱纹理区域的匹配效果更好,边缘更清晰,说明改进算法在不同场景下都具有较好的匹配精度. 设置误差阈值为1 pixel,表1展示了3组双目图像分别使用传统Census变换和改进算法的误匹配率.由表1可知,改进算法的平均误匹配率比传统Census变换的降低了约46%.为了验证改进算法的抗噪性能,给3组双目图像加入均值为0、方差为0.02的高斯噪声,实验结果见表2.由表2可知,在高斯噪声影响下,改进算法的平均误匹配率比传统Census变换的降低了约53%,说明改进算法对于噪声场景有良好的抗噪性. 表1 传统Census变换和改进算法的误匹配率Table 1 Mismatch Rate of Traditional Census Transform and Improved Algorithm % 表2 高斯噪声情况下的误匹配率Table 2 Mismatch Rate in Gaussian Noise % 针对传统Census变换窗口中心点值易受噪声影响等问题,笔者引入双边滤波模板值替代窗口中心点值,同时加入Sobel算子,将其与SAD算法的匹配代价进行代价融合,有效地利用了图像的灰度与梯度信息.实验结果表明,在无噪声和含噪声的情况下,改进算法的平均误匹配率比传统Census变换的分别降低了约46%和53%,改进算法具有更好的匹配精度和抗噪能力.未来考虑设计不同纹理场景下的动态十字交叉域,并加入子像素优化等视差后处理算法,以得到更高精度的视差图.4 实验部分
5 结语