武凯峰, 王晓飞
(黑龙江大学 电子工程学院, 哈尔滨 150080)
双目立体视觉是计算机视觉研究中的热点问题之一,为机器视觉中的重要分支[1],利用视差原理可以在矫正后的双目图像中估计3D场景中的深度信息。双目立体视觉在机器人视觉[2]、医学成像、航空测绘、3D重建[3]、自动驾驶[4]、深度测距[5]和工业检测上具有极其广泛的应用[6]。双目立体视觉最为关键的立体匹配算法研究面临巨大挑战[7],如受弱纹理区域影响,匹配过程中通常会出现匹配错误,无法找到同名点对等问题,加剧了匹配过程中的难度,对匹配结果产生不利的影响[8]。Census变换具有局部窗口运算的特性,每个像素进行独立运算,该特性可以设计多线程并行计算模型,为算法效率提供保障[9]。Census变换对光照的变化具有出色的抗干扰性[10],在实际情境中适用性很强。
2005年,Hirschmüller提出了半全局立体匹配算法(Semi-global matching, SGM),该算法结合了局部算法的高效率与全局算法匹配效果出众的优点,同时,避免了局部算法在窗口视差相同的假设不成立时而导致的匹配效果较差速度慢等问题[2]。同样优秀的算法还有PatchMatchStereo 算法和AD-Census算法[11]。PatchMatchStereo算法是Bleyer发表的双目立体匹配算法,打破了传统固定窗口匹配的桎梏[12],该方法使用倾斜支持窗的搜索模式,具有出色的数据泛化能力。2011年,AD-Census算法是Mei等提出的,算法从效率和效果上表现出色,其改进的十字交叉域代价聚合方式,针对弱纹理区域的处理令人满意[13]。这些方法通常不能适应低纹理和光照差异大的环境。取得突破的是利用学习的方法,通过神经网络,深度学习代替传统的方法计算匹配代价, 在代价聚合和视差细化等过程中利用学习的方法也取得了显著成果。Zbontar等利用卷积神经网络通过小图像块学习相似性度量,开创性地将深度学习技术引入到立体匹配之中,首次成功地利用卷积神经网络(Convolutional neural network, CNN)计算匹配代价成本,代替了传统方法中人工设计的代价计算指标[14]。Seki等提出的SGM-Net,该网络是基于代价聚合的非端到端网络,解决了代价聚合过程需要针对不同平滑项人工设计惩罚参数的问题[15]。Mayer等首次提出的端到端回归网络Disp-Net,采用编码器-译码器结构利用CNN回归得到视差图[16]。Zhou等提出GC-Net构建4D cost volume融合上下文信息,得到了很好的结果[17]。受到GC-Net网络的影响,Chang等在网络学习中加入了更多的信息以追求精度的提高,由此提出金字塔立体匹配网络PSMNet[18],Godard等在不使用真实深度的情况下,利用极线几何约束重建图像,通过训练网络生成视差图,同时构建新的损失函数反向传播进一步训练网络提高鲁棒性[19]。Zhou等以迭代的方式更新网络参数,将一个随机网络逐渐收敛到稳定状态[20]。Wen等提出端到端的实时立体匹配网络,此网络具有优秀的残差优化模块,可以准确地估计出图像高频区域的视差信息。但基于学习的方法需要大量实况数据以及训练和计算的硬件资源,并且在不同环境下适应性较差,所以传统匹配方法仍然具有重要研究价值[21]。Lu等提出基于Census 变换的Graph cut改进立体匹配算法,该算法对传统的GC方法的能量函数中的数据项进行优化[22],降低像素点本身对灰度值的依赖性。Yuan等采用灰度描述算子,在原始图像上进行Census变换将目标像素与邻域像素的距离加入考虑,得到在变换窗口内像素灰度和梯度的描述关系[23]。Ambrosh等提出融合基于梯度的Census变换和绝对差值之和的算法[24],通过使用 Altera Stratix FPGA 构建原型,在750×400立体图像分辨率下处理效果更好。Hou等使用圆形变换模板代替Census传统的方形变换模板,经过Census变换对所得的序列进行等长高斯权重序列加权,相比于传统Census,更好地处理了噪声[25]。高斯权重序列的加入虽然在一定程度上取得了较好的效果,但是不能满足匹配中邻域像素与中心像素在不同窗口下的动态关系[26]。受此启发,本文提出自适应权重分配的Census算法,在不同的搜索窗口下,为各邻域像素分配与中心像素相关联的动态自适应权重值,提高了匹配的准确率。
传统Census变换算法应用在极线矫正后的左、右图像对上,选取左图像上的像素点作为目标像素,以该目标像素为中心构建m×n的邻域窗口(n和m都为奇数),将窗口内的邻域像素与中心像素灰度值进行比较,若邻域像素大于中心像素,则标记为1,若邻域像素小于目标像素,则标记为0,全部比较结束后,结果以比特串形式体现,最后将比特串作为中心时像素的Census变换值Cs进行计算,公式为:
(1)
式中:p为中心目标像素点;q为所在窗口邻域像素点;⊕是比特位的逐位连接运算;ξ为定义的运算符号将邻域灰度值与中心灰度值进行比较,计算公式为:
(2)
计算左图像目标点p(x,y)的Census值后,在右图像上以同样方法计算视差范围内(x-d,y)位置像素的Census值,将两点Census值进行异或运算,汉明距离公式为:
C(x,y,d)=Hamming(Csl(x,y),Csr(x-d,y))
(3)
Hamming距离是两个比特串进行异或运算之后,对应位置不相同的数量,选用5×5搜索窗口,汉明距离的计算如图1所示。图中5×5方格内代表尺寸为5×5的搜索窗口在左图(x,y)为中心像素下的灰度值,与在极线约束下对应右图(x-d,y)处的同尺寸窗口灰度值,左右窗口邻域灰度值通过与中心像素比较生成各自对应比特串即窗口内中心像素所对应的Census值,通过异或运算得出左右比特串对应位置不同的个数为3,由此得到Hamming距离。
图1 汉明距离的计算
将计算所得的汉明距离作为视差d下的匹配代价存入三维代价空间。Census变换计算匹配代价的整体流程以极线校正后的左右图像作为输入,确定窗口大小比较窗口内中心像素与邻域像素计算Census值,通过Census值计算Hamming距离,将其作为匹配代价存入代价空间C,如图2所示。
图2 利用Census变换计算匹配代价
传统Census通过将目标像素与中心像素进行比较,大于目标像素灰度的点编码为1,小于编码为0,对所得二进制码串进行异或运算计算汉明距离。此过程中,Census变换默认窗口内的邻域像素对中心像素具有相同影响,然而实际上沿着极线搜索时,在不同视差下的搜索窗口内其邻域像素对中心像素的影响会随着搜索窗口的不同而改变,在搜索窗口变更的过程中各邻域像素对中心像素具有不同贡献,同时当中心像素与其邻域像素接近时,即中心像素值与邻域像素值相差1或相等的情况下易导致错误编码现象,基于这一角度,提出了动态自适应权重分配方法,在不同搜索窗口下根据中心像素的差异确定不同动态下的权重矩阵,对邻域像素自适应分配与其中心像素相关联的动态权重值。并且将加权重点应用于视差为d时,窗口内对中心像素具有明显影响的像素点上,具有明显影响的像素点即特异点是指左右图像代表中心像素的二进制码串异或运算得到的差异位所对应的邻域像素。在匹配代价计算过程中,依据Census变换方法,采取异或运算后,不再使用Hamming距离作为代价计算结果,如图3所示,通过将左右图像作为输入,分别计算Census值,与原有方法不同的是在图像输入阶段计算以(x,y)为中心像素窗口的邻域权重矩阵,并逐步将权重与异或运算得到的特异点加权求和,将求和后结果作为中心目标点(x,y)视差d下的匹配代价存入代价空间。
图3 自适应权重分配Census变换
利用邻域像素与中心像素灰度的差值构建邻域像素与中心像素的关联关系,当窗口内邻域像素与中心像素灰度值相差较大时,此时处理的像素点通常为图像的边缘像素点,应降低边缘像素点对中心像素的影响,因此为边缘像素分配较小的权重值。当窗口内邻域像素点与中心像素相接近时,搜索窗口通常在弱纹理区域,应放大搜索窗口内邻域像素对中心像素的影响,为其分配较大的权重值。依据该权重分配策略,在不同的搜索窗口自适应的为邻域像素分配权重,权重值的计算公式:
(4)
式中:Ip为中心像素灰度值;Iq为邻域像素灰度值;ρ为可调节参数,经过实验验证ρ的取值,经过实验本文取值0.9<ρ<1.0。
权重参数分配与匹配代价计算过程如图4所示。通过式(4)计算得到以灰度值18为中心像素窗口的权重矩阵,图中Census值通过比特串异或运算得出特异点,其权重分别对应权重矩阵中Weight[2]、Weight[13]、Weight[23],由此通过加权求和得出以(x,y)为中心像素视差d下新的匹配代价值C(x,y,d)。
图4 Census加权
经过自适应权重分配后Census变换,得到中心目标像素窗口内邻域像素点的权重值,并且经过左、右图像Census值异或运算得到窗口内两幅图像中对中心目标像素具有明显差异的像素点,经过加权运算再求和获得像素点视差d下匹配代价C(x,y,d), 计算每个像素点视差范围内的代价,将得到的代价存入三维代价空间,立体匹配算法在视差计算过程中通常采用赢家通吃(WTA,Winner-take-all)算法。把像素点视差范围内匹配代价最小的视差值直接作为该像素点(x,y)的视差。如果直接将未聚合后的视差值采用WTA算法,得到的视差图如图5所示,通常伴随模糊和大量的噪点视差图效果较差的问题。
(a) 经典Census (b) 自适应加权Census
为了达到更好的效果,采用4路径扫描线聚合方式,实现代价聚合,其能量函数为:
(5)
式中:第一项为数据项,即像素点p在视差d下所有匹配代价累加结果;第二项与第三项为平滑项,表示p的邻域内q点对中心目标像素p点的影响,P1为惩罚系数,对当邻域像素视差变化很小时做出惩罚,表示在该情况下的惩罚力度很小,由于视差与3D空间中对应点的深度成反比,每当视差增加1时所产生的变化并不会等量增加,而会以递增状态出现,因此P1对邻域像素视差为1时做出惩罚,而第三项为视差大于1时所做惩罚,P2的惩罚力度较大,小的惩罚力度可以应对视差变化小的区域,较大的惩罚力度可以解决当前景像素与背景交界时的非连续情况,P2往往会根据相邻的灰度值做出调整,当出现相邻视差大于1的情况时,如果像素点处在非连续区域,那么在区域内相应的惩罚力度减少,如果不在非连续区域,仍然视差大于1,那么判定为无效视差点,所以惩罚要加大,最直接的方法是比较相邻像素的灰度值,在连续区域相邻像素灰度值相差小,而非连续区域的灰度值差值变大。
根据灰度差调整公式为:
(6)
采用路径代价聚合的方式计算匹配代价值,对像素所在视差下的匹配代价在路径上与前一个像素的视差构建联系,依次迭代直到路径结束,以各个路径下的路径代价值相加作为最终的匹配代价。像素p沿某条路径的代价计算公式为:
(7)
式中:Lr(p-r,d)表示为在此路径下前一个像素p在视差d下的聚合代价值,第三项是为了保证路径代价值不超过一定上限。本文采取4路径聚合方式如图6所示。
图6 聚合路径Fig.6 Aggregation path
经过代价聚合后计算聚合代价获得比较理想的视差图,但是距离最终结果还需要经过视差细化,即对所得视差图进行子像素拟合、一致性检查、视差填充和加权中值滤波等过程:
(1) 子像素拟合思路基于其最终所得的视差值为整数在实际应用中无法满足对精度的要求,所以采用二次曲线拟合的方法得到新的视差值;
(2) 一致性检查通过对比左右视差图对应位置的视差值,剔除无效视差,并将像素分为非遮挡区域像素与遮挡区域像素;
(3) 视差填充对加权Census处理后的视差图在遮挡区域与非遮挡区域,按照不同的填充方式对无效值进行有效赋值,填补视差图空洞;
(4) 中值滤波对最终所得视差图进一步平滑与噪声剔除,由于传统的中值滤波在视差图处理中对边缘的维持效果较差,采用根据颜色信息加权中值滤波的方法对视差图进行处理,选用3×3滤波窗口,根据原图像彩色信息与窗口中心像素运算为窗口内每一个单元赋值,将权重值进行排列筛选出中间权值,将权值对应窗口的视差值作为滤波的结果,计算公式为:
(8)
对自适应权重分配后的Census值计算初始匹配代价进行了验证,在Inter(R) Core(TM)i7-7700HQ CPU @2.80GHz的Windows10系统下的Anaconda平台Python 3环境对Middlebury 2014 数据集中Training dense幅度为四分之一的Adirondack、Motorcycle、Piano、Pipes和Teddy进行实验验证算法效果,获取经算法运行后的视差图。在Linux系统下使用Middlebury官网提供的SDK工具与Cvkit工具包将实验所得视差图与真实视差图进行对比。在Middlebury中用于确定方法整体排名的默认指标[27]是全尺寸 Bad2.0,即视差误差 >2.0 像素的坏像素的百分比。这对应于四分之一分辨率下0.5倍像素的误差阈值。所以以Bad0.5作为定量分析标准,对应官网下的全幅图像Bad2的坏点率,收集终端下的实验数据,在Middlebury官网下与其他优秀算法进行对比验证自适应权值分配变换方法的可行性。
实验视差图与真实视差图对比数据如图7所示,图7(a)为左输入图像,图7 (b)为右输入图像,图7 (c)为实验所得视差图,图7(d)为左图像真实视差图。对视差图在遮挡区域与非遮挡区域,按照不同的填充方式对无效值进行有效赋值。经过加权后的Census变换在整体视差效果中,产生的噪点更少,视差图在弱纹理区域更加平滑,边缘清晰,验证了自适应加权Census变换算法的可行性。
选用Bad 0.5为阈值进行分析,该算法与其他立体匹配算法结果进行比较,其视差图对比如图8所示,从图中可以看出对比匹配方法的实验结果,其所得视差图带有大量的连通区域,伴有边缘模糊现象,并且在一些区域前景与背景的交界处出现过度平滑。
图8 实验视差图与其他算法视差图对比
评估算法性能如表1与表2所示,其中B为Bad0.5下的误匹率,N为Nonocc误匹率表示比较的匹配算法测量的区域为两个视图可见的非遮挡像素。A为All误匹率,表示全局误匹率,即比较的匹配算法测量的区域为全局,包含两个视图中遮挡与缺失的部分。AE为Avgerr平均绝对误差,Q指实验所用图像尺寸为四分之一图像,官方提供三种规格尺寸图像F、H和Q分别对应全尺寸、二分之一尺寸和四分之一尺寸。处理全尺寸画幅与二分之一画幅图像计算时间长,占用内存大需要配置较好的计算资源进行处理,而四分之一尺寸图像在满足实验要求的同时可以充分验证实验效果。因此,在硬件条件有限的情况下,实验选用四分之一尺寸图像进行实验。由表中数据可以看出,所提出的算法对比于其他匹配算法在遮挡区域与全局对比中误匹率更低,表明该算法达成了预期效果。
表1 非遮挡区域对比
表2 全局对比
提出了一种自适应加权的Census变换算法,解决了搜索窗口内中心像素与邻域像素接近的弱纹理区域所引起的不匹配或误匹配问题,通过在不同匹配窗口内计算邻域像素与中心像素的灰度差值,获得不同搜索窗口下邻域像素自适应的权重数组,并将权重数组与左右窗口异或运算所得特异点加权求和计算初始的匹配代价,经过一致性检查和子像素拟合等优化步骤后得到视差图。通过实验对比验证自适应加权Census变换算法的有效性。动态自适应加权Census变换与其他优秀匹配算法对比,通过构建动态权重矩阵,扩大弱纹理区域像素匹配代价值差异,由此所得视差图整体效果更加平滑且边缘清晰,在病态弱纹理区域适应能力更强,可以有效降低视差图中的误匹率,提高匹配的准确率。