改进型AD-Census变换在双目测距中的应用研究

2022-08-25 09:56闫小宇陆凡凡葛芦生
软件导刊 2022年8期
关键词:立体匹配视差改进型

闫小宇,陆凡凡,葛芦生

(安徽工业大学电气与信息工程学院,安徽马鞍山 243000)

0 引言

计算机视觉是通过二维图像认知三维世界的信息。立体视觉技术是计算机视觉中感知三维信息的重要技术,它可以模拟人类视觉对事物处理的方法,具有简单、可靠、灵活、使用范围广等特点,可以进行非接触性检测。立体匹配作为立体视觉技术的核心,其原理是针对于不同视角的图像寻找具有相同像素的点进行匹配,并计算视差。通过构建一个代价函数,对其最小化并估计像素点的视差,进而求取深度。近年来,立体匹配被广泛应用于无人机巡检、无人驾驶、虚拟现实和3D-SLAM 地图重建等领域[1-3]。立体匹配大致可以分为4 个过程:初始代价计算、代价聚合、扫描线优化、视差优化,其中初始代价计算作为最基础的步骤,对后续立体匹配和视差提取的精确性起到至关重要的作用。

立体匹配根据最优化理论方法可以分为全局立体匹配算法和局部立体匹配算法。全局立体匹配算法是通过全局优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。经典全局立体匹配算法有动态规划算法(Dynamic Programming,DP)[4]、置信传播算(Belief Propagation,BP)[5]、图割算法[6](Graph Cuts,GC)等,这些算法虽然能够获取图像的视差信息,生成视差图,但是基于全局的立体匹配算法计算代价耗时太大。

与全局立体匹配算法相比,基于局部立体匹配[7]算法计算代价耗时少、速度快、效率高,能够快速恢复丰富纹理区域的视差。局部立体匹配算法是对像素周围小区域进行约束,根据图像基元不同可分为区域匹配、特征匹配及相位匹配。常用的立体匹配算法有AD-Census 算法[8]、灰度差绝对值(AD)、跨尺度代价聚合算法[9]等。

在实际的测距应用中,光照强弱、噪声大小对代价计算会造成很大影响,一方面会使立体匹配和视差计算精度大幅度降低,另一方面会大幅度增加匹配时耗,这会影响测距准确性。

Lim 等[10]对于处于光照下的不同匹配代价计算进行研究发现,光照噪声对于census 变换的影响较小,且census变换对光照有较好的鲁棒性。光照对于计算像素灰度值匹配代价影响较大,如灰度差、绝对值之和(SAD)等。传统的census 变换由于过度依赖于中心像素点,对噪声的抗干扰能力较差。为解决这类问题,Hosni 等[11]将梯度信息与SAD 相结合,将匹配点与待匹配点的梯度和支持窗口内SAD 作为匹配代价。对于Census 变换算法,Chang 等[12]将中心像素点的像素值于其选取支持窗口内8 个点的像素值进行比较,产生一串比特值,虽然增强了匹配能力,但还是过度依赖于中心像素点。对于中心像素点的处理,吕倪祺等[13]通过将中心像素替换成支持窗口内像素值的加权平均值,并融合了AD 特征进行代价计算,对于单像素的匹配代价有很好的可靠性,但该算法比较复杂、计算量时耗较大。

鉴于双目测距系统立体匹配耗时和精度要求,本文提出一种基于改进型AD-Census 立体匹配算法,其中灰度差绝对值(AD)算法对于重复纹理区域效果比Census 效果好,Census 算法在弱纹理区域比AD 算法效果好。实验结果表明,本文提出的改进型AD-Census 立体匹配算法降低了对中心像素的依赖与算法计算量,提高了立体匹配速度,同时也满足测距精度。

1 改进型Census的代价计算

传统的Census 变换是基于一种局部窗口的非参数变换。其基本思想是:选定一个长宽为奇数的匹配窗口,通过将领域窗口内的像素灰度值q与窗口的中心像素p的灰度值进行比较,将比较得到的布尔值映射到一个比特串中,最后用比特串的值作为中心像素p的Census 变换值Ccen,如式(1)所示。ξ的运算则由式(2)定义。

式中,ξ[·]为比较函数,(Ip)、(Iq)分别为像素点p和q点的灰度值,CCen(p)为p点的变换值,符号⊗为按位连接,Np表示p的领域。

根据式(1)、式(2)可知左右视场中各像素视场的Census 变换值,基于Census 变换的匹配代价计算方法是计算左右视场对应两个像素的Census 变换值的Hamming 距离,如式(3)所示,计算方法如图1所示。

Fig.1 Hamming distance diagram图1 Hamming距离示意图

从上述函数可以看出,传统的非参数Census 变换对中心像素过于依赖,由于光线强弱,会有噪声对中心像素产生干扰,因而得到的比特串发生很大改变,通过计算Hamming距离得到匹配代价的准确性将极大降低。

对于以上问题,本文提出一种改进型Census 变换算法,该算法以选定的正方形窗口呈现,窗口大小如式(4)所示。

建立X-Y 直角坐标系,将中心像素作为坐标原点,水平向右,竖向向上为X 轴和Y 轴的正方向。在窗口中选取8个参考点Mi,参考点的坐标表示为:

将选取的8 个像素参考点按坐标顺序构成一个新的正方形m,将左上角第一个m0开始按下标顺序排列,依次比较其像素点的灰度值。比较方式如图2 所示,若后一个像素灰度值大于前一个则记为1,否则记为0。这8 个比较后的值串联起来形成一个比特串,即为中心像素点p的变换码CCen,如式(6)所示。

最后根据式(3)可得到在视差范围[dmin,dmax]内不同d下的匹配代价。

Fig.2 Pixel comparison method图2 像素点比较方式

本文提出的改进型Census 算法对于大支持窗口的匹配速度提升较大,克服了传统算法对中心像素点的依赖,有助于测距场景的快速实现。

2 改进型Census与AD融合原理

本文提出的改进型Census 变换和AD 变换融合的代价计算,同样遵循立体匹配算法的4 个步骤,即代价计算[14]、代价聚合[15]、扫描线优化[16]、视差优化。

2.1 代价计算

AD(Absolute Differences)算法即亮度或颜色差的绝对值,其原理是左右视图像素点的3 个颜色分量之差的绝对值取平均,如果是灰度图像,则为灰度的亮度差。由于传统Census 对于重复纹理处理效果不理想,而AD 这类基于单像素亮度差的方法可在一定程度上缓解这种重复纹理的问题,因此选择AD 与Census 相结合。AD 计算代价如式(7)所示。

式中,CAD(p,d)为AD 变换的初始代价值,R、G、B 为图像的3个通道,Ii为像素点的灰度值。

将AD 算法和Census 算法对应的代价简单相加并不合理,由于这两种算法的结果尺度不一样,AD 算法结果表示为亮度差,范围为[0,255],而Census 算法是比特串对应位值不相同个数,范围为[0,N](N 为比特串的位数),因此定义归一化公式(8)将两者结果归一化到相同的[0,1]区间,这样可以将归一化后的AD 算法与Census 算法进行相加得到新的匹配代价如式(9)所示。

式中,ρ(c,λ)可以设置参数使函数值的区间为[0,1],c 为代价值,λ为控制参数,其中c 和λ都为正数。Ccen(p,d)为Census 变换后的代价,CAD(p,d)为AD 变换后的代价。

2.2 代价聚合

AD-Census 代价聚合是采用十字交叉域代价聚合的方式,十字交叉域是每个像素都会有一个十字臂,该像素的亮度和十字臂上的所有像素亮度值相近。十字臂构造是以该像素为中心往上下及左右延伸,当遇到亮度与该像素差别较大时延伸停止,且延伸是有限的。十字臂对中心像素上下左右4 个臂延伸到下一个点pl满足一定规则(以左臂为例),如式(10)—式(12)所示。

式中,Dc(pl,p)是pl和p像素点间的颜色差异,τ1、τ2、L1、L2是给定阈值,Ds(pl,p)是pl和p的空间长度。式(10)表明像素点pl和中心像素点p之间的颜色差异要小于阈值τ1,且像素点pl和它臂上的前一个像素pl+(1,0)的差异也要小于阈值τ1,防止臂延伸穿过边缘像素,式(11)、式(12)表明,为了让弱纹理区域包含更多像素,要求臂长阈值L1较大。而当臂长超过阈值L2时,设定一个更严格的颜色阈值才能使臂长延伸到L1。

上臂、下臂、右臂延伸规则和左臂相同,十字交叉域的结果不但考虑到周围像素与中心像素之间的距离关系,而且能够使代价聚合效率提高。

当每个像素的十字臂构造成完成后,就可以构造像素的支持域如图3 所示。中心像素点p其支持域是包含垂直臂上所有像素的水平臂。图3 中q就是p垂直臂上的某个像素,p的支持域包含q及其水平臂上的像素集合。

Fig.3 Cross principle图3 十字交叉原理

对于p的代价聚合,先将所有水平臂上的像素代价值累加存储,再将每个像素的垂直臂进行累加迭代4 次,代价聚合方式如图4 所示。第1 次和第3 次顺序为先水平臂再垂直臂,第2 次和第4 次顺序为先垂直臂再水平臂。以这种方式进行迭代可降低非连续区域的视差匹配错误。

Fig.4 Cost aggregation method图4 代价聚合方式

2.3 扫描线与视差优化

扫描线优化是为了进一步降低误匹配并提高代价可靠性。扫描线优化在选择优化路径上可以是4 路径、8 路径、16 路径的方式,路径数越多效果越好,但是时耗也越多。综合考虑后选择使用左右上下4 路方向优化,最后对4 路优化代价取均值代替该像素点。视差优化将错误视差剔除掉,提高视差精度及填补视差图。对于误差较大的点和被遮挡区域[17],使用一致性检查[18]后进行剔除和视差填充,在提高视差精度方面可以采用子像素优化技术,即对最优视差代价值与其前后的代价值进行二次曲线拟合,将曲线极值对应的视差值作为子像素视差。经过以上4个步骤得到最终视差图。

3 实验结果分析

本文采用C++语言在Visual Studio2017 集成环境下进行开发实验,验证改进型AD-Census 变换算法的效果。在64 位的台式机上进行,硬件配置:AMD Ryzen 5 3600X 6-Core Processor @3.80 GHz 处理器,16G 内存,2060 显卡,显存6G。进行如下实验:①分别采用传统型AD-Census 立体匹配算法和改进型AD-Census 立体匹配算法对应代价计算耗时进行对比实验,使用Middlebury 数据集中的图像对进行验证;②将改进型AD-Census 立体匹配算法进行测距实验。

3.1 耗时比较实验

通过实验在Middlebury 数据集中使用Cones、Teddy、Venus、Tsukuba 图像对进行代价计算算法耗时实验比较。如图5 所示,使用9x9 支持窗口得到视差图,将本文提出的改进型AD-Census 算法得到的视差图和传统型AD-Census 算法以及真实的视差图作比较,4 组图像从上到下分别为Cones、Teddy、Jadeplant、Tsukuba,其中Cones 和Teddy 两组图像分辨率为450×375 像素,Jadeplant 和Tsukuba 的分辨率分别为1 318×994 像素、384×288 像素,视差搜索范围为0-64 像素。传统型AD-Census 立体匹配算法和改进型AD-Census 立体匹配算法代价计算耗时如图6所示。

Fig.5 Stereo matching result of test image pair图5 测试图像对的立体匹配结果

从视差图效果上看,本文算法得到的视差图与传统算法和真实视差很接近。仿真实验中,较低像素图片视差范围为[0-64],随着支持窗口的增大,基于传统的AD-Census 算法代价计算可达到0.6s 左右,而本文提出的改进型AD-Census 算法代价计算耗时稳定在0.2s左右。对于高质量像素图片,视差范围在[0-320],由于视差范围和图像像素的增加,随着支持窗口的增大,改进型AD-Census 算法代价计算耗时稳定在6.8s 左右,而传统的AD-Census 算法代价计算随着支持窗口的增大可达到16s 左右。由此可知本文提出的算法在速度上有很大优势。因此,对于连续视场支持大窗口进行匹配,本文提出的算法是一种速度相对较快的测距算法。

3.2 双目测距实验

由本文提出的算法得到视差图,并应用于双目测距,根据测距精度验证得到视差图的精度。根据得到的最终视差d,结合双目系统测量原理可知目标物深度Z 的表达式为:

Fig.6 Cost calculation time-consuming comparison图6 代价计算耗时比较

其中,B为双目摄像机的基线长度,f为双目摄像机焦距,Z为目标物深度信息。

本次测距实验所用的双目摄像机型号为zed,采集图像分辨率为1 280×720(像素)。标定图案由8 列6 行方块组成,每个方块实际大小为20mm×20mm,角点数为7×5。两摄像机平行放置,基线距离约为120mm,焦距2.1mm,图像分辨率为1 280×720像素。

双目测距系统实现可划分为:图像采集、立体标定、立体校正、立体匹配和测距。采集16 张不同角度的图片采用[19]实现标定,将采集到的16 张图片对导入MATLAB 工具箱[20]中可以得到摄像机结果。下面给出了得到的左、右摄像机和双目摄像机外部参数的场景模拟图。图7 为摄像机外部参数场景图,图7(a)为左摄像机外部参数场景图,7(b)为右摄像机外部参数场景图。图7(c)为左右摄像机外部参数场景图。摄像机标定结果如表1所示。

Fig.7 External parameter scene graph图7 外部参数场景图

Table 1 Camera calibration result表1 摄像机标定结果

由得到的内外参数可以看出外参数T 第一个元素绝对值为119.360 与摄像机实际基线120mm 很接近,说明得到的参数是准确的。再根据标定得到的参数通过对采集到的图像对进行校正,图8(a)是校正之前采集的左右图像,图片背景墙有弯曲的现象。图8(b)是校正之后左右图像对,图片背景墙弯曲现象消失,左右视图的极线都相互平行,对应点的纵坐标一致。

通过本文提出的改进型AD-Census 立体匹配算法得到视差图并计算视差,根据双目测距模型,目标物的深度Z等于基线长度B 与摄像机焦距f乘积与视差d的比值。

Fig.8 Effect of picture before and after correction图8 校正前后效果

在测距实验中,将被目标物分别置于离光心800mm 到3 000mm 处。根据摄像机标定的各项参数和式(10)可得到被测目标物的深度。实验结果如表2所示。

Table 2 Experimental results表2 实验结果

由表2 可知,根据本文提出的改进型AD-census 立体匹配算法在测距实验结果中测量距离800mm 到3 000mm以内相对误差小于5%,满足实验要求,随着测量距离的增加,相对误差呈现增长趋势。

4 结语

本文提出改进型AD-Census 立体匹配算法,通过采用经典的AD-Census 匹配和改进型AD-Census 匹配算法的速度进行对比实验,使用Middlebury 数据集中的图像对进行验证,再将改进型AD-Census 匹配算法进行测距实验以验证算法的精确性。由实验可知,传统的AD-Census 算法随着支持窗口的不断增大其代价计算时耗也在不断增大,而本文提出的改进型AD-Census 算法,对于低像素图形,随着支持窗口的增加,其代价计算时耗稳定在0.2S 左右,对于高像素图形,其代价计算时耗稳定在6.8S 左右而不会随着支持窗口的增加而增加。因此,对于大窗口进行匹配,效果比传统算法更有优势。

通过将本文算法计算得到的视差用于测距实验,由于摄像机本身的工艺限制如基线和焦距的长度有限可得到被测目标物距离光心800mm 到3 000mm 以内相对误差小于5%,满足实验精度要求。由此证明,本文提出的算法不仅在速度上得到了提升,而且得到了有效的视差,能够满足测距系统的要求。

光照和弱纹理等因素的存在给目标匹配精度带来了很大影响,虽然极大提高了匹配速度,但像素点的误匹配率较高。为了得到更高的测距精度,可以将算法作进一步优化并选择合适的目标匹配区域进行细划分匹配。

猜你喜欢
立体匹配视差改进型
基于自适应窗的立体相机视差图优化方法研究
Cr5改进型支承辊探伤无底波原因分析
改进型CKF算法及其在GNSS/INS中的应用
基于梯度域引导滤波的视差精炼迭代算法
影像立体匹配中的凸优化理论研究
基于互补不变特征的倾斜影像高精度立体匹配
基于分割树的视差图修复算法研究
改进导向滤波器立体匹配算法
立体视差对瞳孔直径影响的研究
改进型逆变器无效开关死区消除方法