基于边缘检测的视差图效果优化

2019-07-15 11:18王芳荣郭柏苍岳欣羽
计算机应用与软件 2019年7期
关键词:视差代价边缘

王 安 王芳荣 郭柏苍 岳欣羽

1(吉林大学中日联谊医院 吉林 长春 130022)2(吉林大学通信工程学院 吉林 长春 130022)3(吉林大学交通学院 吉林 长春 130022) 4(吉利汽车研究院(宁波)有限公司 浙江 宁波 315336)

0 引 言

随着社会自动化进程的加快,汽车已经融入到我们的日常生活中,成为了我们生活中不可或缺的代步工具,同时汽车的数量每年在不断提升。所以人、汽车、路之间的矛盾也日益突显出来,相应的智能辅助驾驶应运而生。双目立体视觉智能辅助驾驶可以检测车辆前方的景象的深度信息,包括前方一定距离内的障碍物及其距离和高度等,进行预警或者提醒驾驶员采取相应的安全措施。在双目立体视觉研究领域,立体匹配获取视差图是一项必不可少的步骤,同时也是立体视觉中核心问题。所以视差图质量的好坏直接影响了场景信息能否实时稳定有效地被获取出来,实现二维信息到三维信息的转换。基于以上背景,国内外很多学者在视差图获取算法上投入了大量的精力,取得了一定成绩。目前立体匹配算法主要分为局部立体匹配方法和全局立体匹配方法。

局部立体匹配方法通过选择支持窗口选择相似度最大的匹配像素。文献[1-2]对支持窗口的尺寸与形状估计视差值进行了研究,但是由于这种方法需要确定的参数众多,会增加计算匹配工作量。针对这一问题,使用局部匹配算法可以提高计算速度,在一定程度上可以改善匹配搜索问题。然而,上述算法的共同缺陷是局部支持窗口没有通用的尺寸。

全局匹配方法通过寻找全局函数的最小值得到能量函数的最优解。传统的动态规划立体匹配算法的实时性较差且匹配效果并不理想,文献[3-4]分别使用了金字塔双层动态规划立体匹配算法和马尔科夫网络进行全局立体匹配。其结果表明,全局立体匹配算法的效果比局部立体匹配方法更好,然而,较慢的匹配速度不能很好的用于实时立体匹配。

本文选择Canny算子、Sobel算子以及Scharr边缘检测算法分别对图像进行预处理,选取边缘特征为约束,通过利用BM立体匹配算法、SGBM立体匹配算法以及DP算法进行立体匹配,获取视差图。分别计算视差图的错误匹配率,选取使视差图优化效果最好的组合,评价该方法的可行性与可靠性。

1 立体匹配视差图获取

完成立体匹配前一般要完成匹配代价计算和匹配代价聚合[5-8]。常见的匹配代价计算就是Census变换,在目标图像中选取任意一点,以该点为中心构造3×3的矩形窗口,令窗口中除中心点之外的每个像素都与中心点进行比较,灰度值小于中心像素的记为1,大于的记为0,产生了由1和0构成的Census序列。经过Census变换后的图像通过汉明距离计算相似度,该值越小,相似度越高。匹配代价聚合主要应用支持窗口的聚合方法,将支持窗内像素的代价相加或平均作为中心像素的匹配代价。常用的支持窗口法有自适应窗口法和移动窗口法。支持窗包含二维和三维。二维支持窗口需要事先将视差固定,然后计算代价聚合。完成之后采用胜者为王算法即最小代价对应的视差作为所要求的视差。该算法主要应用与局部匹配算法。针对全局匹配算法,基于全局的立体匹配方法是同时优化所有像素的视差,聚焦在优化技术上面,该方法效果好但非常耗时,因此会跳过代价聚合的步骤。得到视差图之后,需要将视差图细化,该步骤在过去大部分的立体匹配研究都是被忽略的。传统的方法主要包括左右一致性检测和中值滤波方法[9]。文献[10]提出了基于双边滤波的加权中值滤波方法,该方法使得到的视差图变得更加清晰,但是由于该滤波器比较复杂,导致严重耗时,降低了局部聚合的速度。

2 匹配算法原理

2.1 SGBM算法原理

半全局匹配算法SGBM主要源于SGM算法[11-12]。SGM算法是由H.Hirschmuller提出的,该算法只考虑图像中非遮挡点,将每个像素点产生的视差,组成一个视差图。通过构建一个能量函数,优化得到最小值,从而得到每个像素视差的最优值。能量函数表示如下:

(1)

式中:D为视差图,E(D)为能量函数,p、q代表图像中的像素,Np代表像素P的8连通区域的相邻像素,C(p,Dp)表示当像素p的视差为Dp时的匹配代价。P1是相邻像素点视差增减1的惩罚系数,P2是相邻像素点视差变化大于1的惩罚系数,且P2要大于P1。对于函数T[·],如果函数内的值为真,返回1,否则返回0。

与SGM方法相比,SGBM算法是半全局块匹配算法,在计算匹配代价函数时,采用块匹配方法(SAD算法)。SGBM算法没有采用基于互熵信息的匹配代价方法,增加了预处理算法。BM算法和SGBM算法都采用SAD(sum of absolute differences)方法进行匹配代价聚合。SAD方法可表示如下:

SAD(u,v)=Sum{|left(u,v)-right(u,v)|}

(2)

SAD窗口的大小,决定了误匹配的大小和匹配效率,在完成以上步骤时,就可以获取视差图了。在选定的范围内选取代价聚合的最小值的点作为对应匹配点。

2.2 BM算法原理

BM算法在进行匹配时, 采用坏字符算法和好后缀算法即从右向左比较的方法,同时引入两种启发式跳转规则决定模板向右移动的步长[13]。其基本原理可以表述为:设文本串P为待匹配的图像灰度数据,文本Q为用于去匹配的模版,将P与Q对齐,从右至左依次比较,如图1所示。

图1 文本串P与模版串Q进行匹配

若是两者比较不匹配时,BM算法就采用好后缀与坏字符算法计算Q的移动步长,直至匹配结束,如图2所示。

图2 坏字符与好后缀匹配

可以看出由箭头连接的B和E均为坏字符,加大字部分CAB为好后缀。

2.3 DP算法原理

动态规划最初是优化决策过程的数学方法,核心思想就是将整体分割成若干个子任务,求解全局最优。当前阶段的最优决策与前面阶段无关,仅是基于当前状态。通过将整体复杂问题分解成若干单一简单的问题,降低复杂度[14]。传统的动态规划方法是在水平方向进行扫描从而寻找最优路径,以图像的水平方向为横坐标,视差值为纵坐标,将立体匹配分解为若干阶段,每个x坐标点对应一个阶段,之后再将各个阶段用不同的状态表示且状态的选择要满足无后向性。在同一极线上按照从左至右的顺序依次计算,求取相似性度量函数和平滑函数的最小值,最后找出使全局能量函数最小的匹配路径。

全局能量函数表示如下:

E(d)=E(data)+E(smooth)

(3)

(4)

(5)

式中:E(data)为图像数据约束项,表示匹配点的相似性。E(smooth)为相邻像素点间的平滑约束项,表示相邻点之间的连续性。m(px,y,d)表示左像素点与视差d的右像素点的匹配代价函数。N是相邻像素对的集合,dp、dq分别表示像素p和q的视差,平滑项S(dp,dq)为相邻像素p和q间的平滑约束。

2.4 本文算法具体步骤

(1) 分别使用Canny边缘检测算子、Sobel边缘检测算子和Scharr滤波器对图像对进行边缘检测。

(2) 将执行步骤(1)得到的图像以边缘特征为约束,分别使用BM算法、DP算法、SGBM算法进行立体匹配。

(3) 设定误差阈值,然后对每组方法得到的视差图进行误匹配率计算,同时计算匹配时间。

(4) 通过对比不同边缘检测算法与不同立体匹配算法组合的结果,选取一种精度与速度相对最优的组合算法。

3 实验对比分析

Middlebury提供了很多标准测试库,本文在该库中选择了几组校正后的图像对参与实验。本文整体是在Opencv和Matlab软件环境下进行试验,利用Opencv对图像进行立体匹配,利用Matlab编写计算误匹配率程序,计算误匹配率。本文采用三种立体匹配算法求取视差图,通过在不同匹配算法下对比不同的边缘检测方法,找出精度与速度俱佳的搭配方法。针对匹配质量,利用误匹配率P进行评价,表达式如下:

(6)

式中:N代表图像像素数,dc(x,y)是计算得到的视差图,dt(x,y)是真实视差图,δd是误差阈值,通常取1。该指标反映在一定误差阈值内,两幅图像匹配所得视差图的误差占整幅图像的比重,可以客观地反映出立体匹配质量的好坏。

图3-图5分别是cones图、teddy图和venus图经过Scharr边缘检测、Sobel边缘检测以及Canny边缘检测得到的效果图,其中Sobel算子选用内核大小为3。

(a) Scharr检测 (b) Sobel检测 (c) Canny检测图3 三种检测方法在cones图应用

(a) Scharr检测 (b) Sobel检测 (c) Canny检测图4 三种检测方法在teddy图应用

(a) Scharr检测 (b) Sobel检测 (c) Canny检测图5 三种检测方法在venus图应用

图6为标准视差图,图7-图9为基于BM算法、DP算法、SGBM算法得到的原图视差图。通过误差匹配率计算各组图片的匹配质量,结果如表1-表6所示。

(a) cones (b) teddy (c) venus图6 标准视差图

(a) cones (b) teddy (c) venus图7 基于BM算法的得到原图视差图

(a) cones (b) teddy (c) venus图8 基于DP算法得到原图视差图

(a) cones (b) teddy (c) venus图9 基于SGBM算法得到原图视差图

%

表2 基于BM算法匹配时间 s

表3 基于DP算法匹配误差率 %

表4 基于DP算法匹配时间 s

表5 基于SGBM算法匹配误差率 %

表6 基于SGBM算法匹配时间 s

表1、表3、表5分别记录了在BM算法、DP算法、SGBM算法下,经过边缘提取的图像对立体匹配后视差图的误匹配率。从误匹配率方面观察,三种方法经过边缘检测后视差图的误匹配率均在一定程度上有所降低。

表2、表4、表6分别显示了基于以上三种算法立体匹配算法进行立体匹配所消耗时间。时间数据显示BM算法和SGBM算法经过边缘特征提取之后,匹配时间都缩短了很多,然而DP算法时间却在处理部分图像时增加了少许。我们可以得到结论,速度上,BM算法最好,SGBM算法一般,DP算法最慢。精度上,SGBM算法最好,DP算法较好,BM算法最差。

对比三种边缘检测算子,通过三种立体匹配算法的实验可以得出,采用BM立体匹配算法,速度和精度上,Canny算法最好,Scharr算法一般,Sobel算法最差。采用DP立体匹配算法,速度上,Canny算法最快,Sobel算法一般,Scharr算法最慢,精度上,Canny算法最好,Scharr算法一般,Sobel算法最差。采用SGBM立体匹配算法,速度和精度上Canny算法最快,Scharr算法和Sobel算法效果相似。通过六组试验,我们可以总结得出在精度和速度上,Canny边缘检测与其他两种边缘检测算法相比存在明显优势。Scharr滤波器在性能上略强于Sobel检测算子。

基于以上分析,以边缘信息为匹配基元进行立体匹配可以大幅度提高匹配的精度和速度,在一定程度上可以改善视差图的匹配质量,为后续场景重建与还原有着至关重要的辅助作用。

针对三种匹配算法,我们得出了如下结论:传统的DP算法在匹配精度和速度方面介于BM算法和SGBM算法之间,在大多是情景中可以使用的,但是得到视差图会存在条纹;SGBM算法适用于效果好和实时性要求相对较高的情景,如零部件生产线实时检测和医学图像处理等领域;BM算法速度快但是精度较差,适用于精度要求不是特别高同时要满足很高实时性的情景,如目标实时跟踪和监控等。通过上文分析得出,SGBM算法搭配Canny边缘检测算子在处理速度和精度上存在明显优势。

本文利用KITTI数据库中选取几幅道路场景下的代表性图片,进行测试与验证。通过对比匹配误差率和匹配时间,判断在不同边缘检测方法下获取视差图的好坏程度,选取一种处理效果相对好的方法,为接下来的研究奠定基础。图10为选取四幅真实场景图。表7-表10分别记录了四幅图片经过三种边缘检测算法后基于SGBM算法得到视差图需要的匹配时间和误匹配率。

(a) (b)

(c) (d)图10 KITTI数据库中不同场景图

图像匹配误差率/%匹配时间/ms原图20.53738.233Scharr19.98740.721Sobel20.60751.504Canny11.77715.801

表8 图10(b)基于SGBM算法的视差图误匹配率和匹配时间

表9 图10(c)基于SGBM算法的视差图误匹配率和匹配时间

表10 图10(d)基于SGBM算法的视差图误匹配率和匹配时间

结合以上试验,可以得出在三种检测方法中,与Canny检测算法结合后得到的视差图匹配质量最高,同时花费的匹配时间较短。对于其他两种检测方法来说,效果不是特别稳定,匹配质量与匹配时间不一定同时都得到了优化,有的是以牺牲实时性来提高精度或者以牺牲匹配质量来加快匹配的速度。

4 结 语

本文利用Canny检测算法、Scharr检测算法和Sobel算法对图像进行边缘提取,分别使用BM、SGBM和DP立体匹配算法对图像进行立体匹配,同时记录匹配时间和视差图误匹配率。经分析,经过以边缘特征为基元的立体匹配较未经过任何处理的图片在速度和精度都有所提高,该方法剔除了大量不相关的信息,提高了立体匹配的可靠性。通过真实场景图进行验证,选择Canny检测算法结合SGBM立体匹配算法优化视差图效果最好,提高了视差图的质量。

猜你喜欢
视差代价边缘
基于归一化互相关的半透明遮挡视差估计
基于自适应窗的立体相机视差图优化方法研究
视差边缘优化的SGM 密集深度估计算法∗
爱的代价
幸灾乐祸的代价
代价
一张图看懂边缘计算
基于单应性矩阵的图像拼接方法的对比分析
代价
在边缘寻找自我