APP下载

基于改进Census变换的图像立体匹配算法研究

2021-05-19杨家琪杨谢柳

机械与电子 2021年5期
关键词:立体匹配视差代价

王 丹,杨家琪,杨谢柳

(沈阳建筑大学机械工程学院,辽宁 沈阳 110168)

0 引言

立体匹配作为计算机视觉研究的基础和热点之一,其主要任务是找到实际环境物体在双目或多目视图上的对应点,进而获得较为准确的三维位置信息,其在机器人导航、地图重构及人工智能等领域得到广泛应用。现有的立体匹配算法有很多种,大致可以分为局部立体匹配算法和全局立体匹配算法。全局立体匹配算法在全局范围内建立一个能量函数,利用优化函数求取最小值。目前,主要的算法有动态规划[1]、图割法[2]和基于遗传算法[3]等。全局立体匹配算法计算结果精度高,但是算法结构复杂,运算时间久,在实时匹配场景下有局限性。局部立体匹配算法以单像素为中心在其周围建立窗口,利用周围窗口信息计算单像素的视差。由于周围窗口信息的局限性,相较全局匹配算法匹配精度低,但是算法结构简单,计算复杂度低,运算时间短,易于实现。近年来,有大量的基于局部的算法被提出,使得局部匹配算法的精度大大提升,有利于获得精度较高的稠密视差图。

闫利等[4]将立体匹配分为匹配代价计算、匹配代价聚合、视差计算和视差精化4个部分。常用局部立体匹配代价计算[5-6]主要有以下几种:基于距离的代价计算函数有像素灰度差绝对值之和函数(SAD)、像素灰度差平方和函数(SSD)等;基于相关性的代价计算函数有归一化相关函数(NCC)、零均值归一化函数(ZNCC)等;基于非参数变换的代价计算函数有Rank和Census[7]等。近年来,研究者又提出了许多新的局部匹配代价计算方法。De-Maeztu等[8]对基于梯度的匹配代价进行了改进,Lee等[9]提出了三状态Census变换。Hirschmuller等[10]通过对比不同匹配代价算法,发现Census算法对角度、色彩、光照的敏感度较弱,鲁棒性较好。许金鑫等[11]发现Census变换减小了匹配结果中相机对图片引起的外部干扰,但是Census变换过分依赖窗口中心的单像素,导致该算法在噪声过多或者重复纹理区有较高的误匹配率。SAD变换对图像的灰度有很好的体现,在重复纹理区的边缘区域有较好的匹配效果,但SAD算法本身对噪声极其敏感,鲁棒性较差。Mei等[12]将SAD算法与Census算法结合,在重复纹理区域取得了较好的效果,很好地平衡了SAD和Census变换的优缺点。在之后的研究当中,Yoon等[13]、He等[14]在代价聚合阶段分别采用双边滤波和引导图滤波,保证了图像边缘效果的同时,也保证了计算效率。以上算法在进行代价聚合阶段之前,都完成了匹配代价的计算,而且匹配代价的计算准确性对代价聚合阶段有很大的影响。

针对以上问题,本文对于Census变换过分依赖窗口中心单像素信息的问题,添加了局部像素反差值对中心像素进行选择的策略,改进了Census变换算法,丰富了变换信息的计算方法,更充分地利用了待匹配点周围的像素信息,改善了算法对噪声的敏感。

1 算法描述

本文算法按照匹配代价计算、匹配代价聚合、视差计算和视差精化4个部分完成图像匹配。其中,匹配代价计算阶段采用改进Census和改进SSD结合的代价;在匹配代价聚合阶段采用多尺度空间下的引导图滤波算法,并通过正则化将多尺度空间下的信息进行统一;最后通过视差计算和视差精化得到最终的视差图。算法流程如图1所示。

图1 算法流程

1.1 改进的匹配代价计算

传统的Census变换的本质是选取图像中某一像素点为中心像素,在该中心像素周围建立一个矩形窗口W(p),然后遍历图像,以中心像素p的灰度值作为参考值与窗口中每个像素q的灰度值进行比较,当灰度值大于中心像素灰度值时,记为0;否则,记为1。这样就可以将窗口能的灰度信息变换成关于0/1的比特串。变换过程的表达式为

(1)

其中,I(p)为中心像素的灰度值;I(q)为窗口邻域内其他像素的灰度值;⊗为按位连接2个比较的结果;ξ[I(p),I(q)]为

(2)

由于传统的Census变换过分依赖中心像素点的灰度值,未能考虑到噪声对整个窗口的影响,而相机在实际获取图像时,噪声是不可避免的,这些噪声的引入必将影响最终匹配结果的精确程度。传统的Census变换并没有充分利用窗口内周围像素的灰度信息,存在较大的缺陷。

在文献[15]中提出一种描述局部像素反差的值δ,该值在一定程度上对局部纹理像素变化进行了描述,是区别于像素均值等传统像素信息描述的数值,更好地利用了局部区域内的像素信息。针对以上传统Census变换的问题,本文将δ引入到传统的Census变换中,提出一种改进的Census算法,将δ替换传统评判标准中的像素I。首先计算中心像素点(x,y) 建立的局部窗口内像素均值IAVE(x,y),以IAVE(x,y)为标准挑选出较大和较小的像素值,对2个部分的像素值进行比较,得到1个数值,利用该数值结合传统Census变换对窗口内像素进行二进制数值编码。通过对δ的引入,不但增加了对窗口邻域内像素信息的利用率,而且更好地对不同窗口之间进行了有利的区分,使得变换结果不再依赖单一的中心像素值,减小了窗口内单个像素波动对匹配结果的影响,有更好的鲁棒性。δ定义为

(3)

将δ作为衡量标准引入Census变换中,则有

(4)

α为设定的阈值,用来衡量窗口区域内像素信息的复杂程度,α值选择过大会影响匹配精度,选择过小则起不到比较的作用,通过实验得出的α区间为[10,15],文中采取的阈值为13。形成二进制编码的定义式为

(5)

Iz(p)为阈值选择后的窗口中心像素值。

利用式(6)计算匹配点和待匹配点集的Hamming距,即对2个像素点进行变换后的二进制编码进行异或运算,得到最终的变换代价值。相同数值越多,Hamming距越小,匹配代价值越大。改进后的Census算法为Cncen(p,d),代价表达式为

Cncen(p,d)=Ham(T(p),T(pd))

(6)

本文将传统SSD函数与ρ(n)函数[16]结合,得到一种新的改进SSD算法。传统SSD函数为

CSSD(p,d)=

(7)

d为视差值;(x,y)为中心像素点p的坐标;CSSD(p,d)为左图像上点IL(x,y)和对应右图像上点IR(x+d,y)之间的SSD计算值;I为像素灰度值;W为左图像中某中心点(u,v)的邻域窗口。

ρ(n)函数表达式为

(8)

n的含义为n(x,y)=IL(x+i,y+j)-IR(x+i+d,y+j);d为视差值;σ为可变参数。

将ρ(n)函数与传统的SSD函数进行结合,改进成新的SSD函数,称为NSSD函数,改进后的函数形式为

(9)

改进的Census算法与改进的SSD算法归一化后的代价值Cag(p,d)为

Cag(p,d)=ρ(Cncen(p,d),μncen)+

ρ(CNSSD(p,d),μNSSD)

(10)

μNSSD和μncen分别为控制改进NSSD算法和改进Census算法权重的可变参数;ρ(c,μ)为基于可变参数c和μ的函数。其中,μncen和μNSSD为经验值,对于不同的图像需要多次实验计算求取。μncen一般取15,μNSSD取6。

1.2 匹配代价集合

在完成匹配代价计算后,考虑到单个像素间联系性差,易受干扰,为了加强像素间的联系,需要对周围像素进行代价聚合。故采用符合人类视觉系统的多尺度代价聚合模型,即高斯金字塔结构[17]和引导图滤波算法[18]完成代价聚合。

先将待匹配图像高斯下采样,将图像分层,每层图像采用引导图滤波算法进行聚合,为增强各层之间的联系,再对每层图像进行代价聚合,将多尺度空间下得到的代价聚合值作为最终的匹配代价。具体过程见文献[17],这里只给出多尺度代价聚合公式和引导图滤波公式。

引导图滤波核函数为

Wi,j(I)=

(11)

(12)

1.3 视差计算

在完成代价聚合后,采用传统的win-take-all算法进行视差选择,获得的初始视差值为

(13)

1.4 视差精化

由于采集的图像存在遮挡区域和视察不连续区域,所以在完成代价聚合后,还需通过一系列优化处理方法对初始视差值进行视差优化。本文首先采用区域投票方法[4],选取区域内出现频率最高的视差点作为该区域中心点的视差值;采用左右一致性检测[12]检测遮挡点。设dL(p)和dR(p)为左、右视差图对应点p的左、右视差值,如果dL(p)与dR(p)不相等,则认为p点为遮挡点,需要扫描与p点一条水平线上的视差值,找出p点左右离p点最近的非遮挡点作为视差值;最后进行1次中值滤波作为最终的视差图像。

2 实验验证

为验证本文算法的有效性,使用C++语言在Visual Studio 2019平台下对Middlebury的素材进行处理,实验硬件配置为:Intel Core i7-4720HQ CPU@2.60 GHz和8 GB内存。处理素材为Middlebury平台下的Tsukuda、Venus、Teddy、Cones标准数据集,对误差等评价标准进行实验分析,并 和其他算法的实验结果进行对比,对本文改进算法的实验效果进行验证。实验过程中相关参数设置为{s,δ,ε,λ,Rd,W}={5,0.1,0.000 1,0.3,35,3×3}。

2.1 匹配代价评估

为验证本文改进Census算法在代价匹配阶段的可行性与优越性,选用Middlebury平台下的Tsukuda、Venus、Teddy、Cones等4组图像,在只使用改进Census算法的情况下与传统的Census算法进行实验对比,得到如图2所示的实验结果,从左到右依次为Tsukuda、Venus、Teddy、Cones。匹配代价误匹配率对比数据如表1所示。

图2 匹配代价算法对比

表1 匹配代价误匹配率对比

由图2可以看出,传统Census算法可以还原场景中物体的基本轮廓,但整体的视差图中有较多的噪点,改进Census算法明显减少了噪点的存在;再结合表1可以看出,传统Census算法由于窗口像素信息单一,导致在图像平坦区域有较高的误匹配率;相比于传统Census算法,改进Census算法减小了平坦区域的孔洞现象,提高了算法的匹配精度,有较高的鲁棒性。但同时因为改进算法中加入了对中心像素选择的一步计算,导致计算时间要比传统算法长。

2.2 抗噪性验证

为了进一步验证本文算法抗噪性,对Middlebury平台下的Tsukuda图像分别添加5%、10%、15%、20%、25%的椒盐噪声进行实验。图3为Tsukuda图像在噪声为5%时的匹配效果对比图。5%椒盐噪声下误匹配率如表2所示。

图3 5%椒盐噪声下匹配代价对比

表2 5%椒盐噪声下的误匹配率 %

通过图3可以看出,对相同噪声干扰下的图像进行处理,传统Census算法的匹配代价图中虽然可以基本还原物体轮廓,但存在大量的黑白椒盐噪声;改进的Census算法在还原物体轮廓的基础上,并没有受到太大的噪声干扰,匹配代价图中只有少量的噪声。结合表2,改进Census算法在存在噪声干扰的情况下,整体的误匹配率均低于传统Census算法。可以看出,改进Census算法有良好的抗噪性能。

2.3 改进算法整体性能验证

为了进一步全面客观地验证本文算法的可行性以及总体性能,选用几种改进Census算法进行比较,这些算法包括ADCensus[12]、AdaptWeight[13]、RTCCensus[19]、RINCensus[20]和SAD-IGMCT[21]。不同算法误匹配率数据如表3所示。从表3中可以看出,本文算法平均误匹配率高于ADCensus算法平均误匹配率,低于大部分改进Census算法误匹配率,表现出较好的整体性能。

为了更直观展示本文算法的效果,图4为本文改进算法对Tsukuda、Venus、Teddy、Cones图片处理得到的视差图和误匹配像素图(白色区域为匹配正确区域,黑色为匹配错误区域),从左到右依次为Tsukuda、Venus、Teddy、Cones。

图4 本文算法测试效果示意

表3 不同算法误匹配率 %

通过图4c中Venus(存在大块平坦区域)可以看出本文算法对于平坦区域有较好的匹配效果,没有较大的孔洞现象,这说明改进的Census算法更加充分地利用了窗口邻域信息,使得图像平坦区域也有很好的区分,同时多尺度代价聚合模型更近一步的加强不同层图像之间的联系,使相邻区域有更好的区分度;从图4c可以看出边界区域贴合实际场景,能很好地显示场景中物体轮廓,这说明采用的引导图滤波算法加强了图像边缘的区分度。

3 结束语

本文通过添加中心像素判断策略,改进了传统Census算法,提出了一种基于改进Census变换的图像立体匹配算法。在传统Census变换单一地选取中心像素作为参考的基础上,引入局部像素反差值作为中心像素选取的评判标准,更好地利用了窗口内的像素信息,改善了传统Census变换抗噪性差的特点。在视差聚合阶段,引入多尺度代价聚合模型——高斯金字塔结构,并将引导图滤波算法融入模型中,加强了邻域像素的区分度,进一步提高了匹配精度。

猜你喜欢

立体匹配视差代价
基于自适应窗的立体相机视差图优化方法研究
基于梯度域引导滤波的视差精炼迭代算法
爱的代价
影像立体匹配中的凸优化理论研究
基于互补不变特征的倾斜影像高精度立体匹配
代价
基于分割树的视差图修复算法研究
改进导向滤波器立体匹配算法
立体视差对瞳孔直径影响的研究
成熟的代价