融合边缘特征的SAD立体匹配算法

2020-04-20 05:03张一飞李新福田学东
计算机工程 2020年4期
关键词:立体匹配视差像素点

张一飞,李新福,田学东

(河北大学 网络空间安全与计算机学院,河北 保定 071000)

0 概述

立体匹配就是找出同一视点在左右视图中的坐标位置,从而计算得到视差图的过程[1-2]。工业测量、无人驾驶、医疗诊断等领域都迫切需要立体匹配生成的3D信息来帮助计算机和机器人完成各项任务[3-5]。SAD算法是实时系统的典型算法,但其匹配精确度不高[6]。边缘是图像的重要特征,优秀的边缘提取结果可以提高匹配的精确度。

文献[7]对SAD算法进行改进,在其比较窗口上赋予不同的权值,并与Census算法相结合提出SAD-Census算法,该算法可较好地解决左右视图存在亮度差异的问题,但其对弱纹理区域的匹配效果不好。文献[8]在实验中将深度边缘和纹理边缘进行匹配,同时采用基于边缘线段的方法来提高算法的鲁棒性,该算法能准确检测到深度图的边缘失真并确定位置,但是对于层次复杂且颜色相近的物体,该算法的深度值准确率下降。文献[9]提出一种两阶段算法,第1个阶段进行特征提取和特征匹配,第2个阶段围绕特征区域的特殊邻域的差异增长计算视差,该算法能够较快较好地得到视差图,但其对特征选取的依赖性太强。文献[10]仅使用加减和乘法运算,而无占用计算资源较多的矩阵运算,提出递归边缘保持性双目立体匹配算法,该算法准确率高但递归的使用导致计算量增大。

本文为了保留SAD算法实现简单、实时性好等优点,同时提高匹配精度,提出将边缘特征与SAD算法相融合的立体匹配算法Edge-Gray。

1 SAD算法与边缘算子选取

1.1 SAD算法简介

SAD算法通常在左右图上分别创建一个W=[(2n+1)×(2n+1)]的窗口,n为正整数,固定左(或右)图窗口,滑动右(或左)图窗口,每次滑动后记录窗口上相同位置的差值和,直至滑动结束,差值和最小的点记为左右视图的匹配点[6]。其中,n的取值越大,时间消耗越长。以Cones为例,实验中窗口大小与时间的关系如图1所示。

图1 窗口大小与时间的关系

1.2 边缘算子的选取

Roberts、Prewitt、Sobel、Canny等算子都是计算图像边缘的有效方法[11-13],各个算子都有自己的特点。Roberts算子边缘定位较准,但对噪声敏感。Prewitt算子能去掉部分伪边缘并对噪声具有平滑作用,但是对边缘的定位不准确。Sobel算子能很好地消除噪声的影响[14-15],但主题与背景的区分不明确。Canny算子具有很好的信噪比和检测精度,定位性能良好,其边缘检测的标准较为严格,是一个具有滤波、增强、检测的多阶段的优化算子[16],但Canny算子相比其他3个算子计算过程更为复杂[17]。综上所述,Canny算子检测精度高,边缘刻画清晰。为了减少立体匹配中可能出现的错误匹配,本文选择使用Canny算子来计算边缘信息。

2 Edge-Gray算法

文献[18]将立体匹配算法分为4步,即匹配代价计算、代价聚合、视差计算与优化和视差后处理。本文在上述流程上做出了调整,如图2所示。

图2 本文立体匹配算法流程

2.1 预处理图像

预处理部分就是将彩色图像转化为灰度图像,灰度化后的图像一个像素由24位转化为8位,可减少后续处理中的内存消耗。图像灰度化过程所用到的公式如下:

IGray(i,j)=0.299R(i,j)+0.587G(i,j)+

0.114B(i,j)

(1)

其中,IGray为彩色图像计算转化为灰度图像后的灰度值。(i,j)为当前像素点在图片中的横纵坐标,R、G、B分别为24位真彩图像的红、绿、蓝的色值[19]。

2.2 边缘计算

本文采用Canny算子计算图像边缘信息,主要包括以下3个步骤:

1)使用高斯滤波器平滑图像,滤除噪声。

2)计算图像中每个像素点的梯度强度和方向。

3)应用非极大值抑制(Non-Maximum Suppression,NMS)消除边缘检测带来的杂散响应。

2.2.1 图像平滑

高斯滤波的主要作用是去除噪声。由于噪声集中于高频信号,很容易被识别为伪边缘,因此应用高斯模糊去除噪声,可降低伪边缘的识别。由于图像边缘信息也是高频信号,因此高斯模糊的半径选择很重要,窗口半径越大,对噪声的敏感度越低[19]。高斯核的生成方法如下:

(2)

其中,G(i,j)为输出结果,它是一个大小为(2k+1)×(2k+1)的方形矩阵,k为正整数。标准差σ取值一般为k的一半,即k/2。生成的高斯核如图3所示,其归一化后的结果如图4所示。

图3 k=2且σ=1时的高斯滤波核

图4 归一化后的高斯滤波核

将得到的高斯核与待处理的图像进行卷积运算,计算公式如下:

(3)

其中,Q(m,n)为输出结果,G(i,j)为高斯滤波核,F(m,n)为待处理图像,(m,n)为当前要处理的像素点的坐标值。5×5的高斯核与待处理图像卷积后的结果如图5所示。

图5 高斯滤波后的图像

2.2.2 梯度强度和方向计算

本文采用Sobel算子来计算水平和垂直方向的差分。在计算后返回水平和垂直方向的一阶导数值,由此便可以确定像素点的梯度Ggrad和角度θ。将水平方向记为X方向,将垂直方向记为Y方向,则X方向和Y方向的Sobel算子分别如图6、图7所示。

图6 X方向的Sobel算子

图7 Y方向的Sobel算子

分别将X和Y方向的Sobel算子与高斯滤波后的图像进行卷积运算,得到两组数据Gx与Gy。计算公式与式(2)类似,在此不再赘述。

在得到Gx和Gy后,就可以利用这两组数据来计算梯度,计算公式如下:

Ggrad=|Gx|+|Gy|

(4)

同时,每个像素点对应角θ也可以由Gx和Gy求出,计算公式如下:

θ=arctan(Gy/Gx)

(5)

通过以上步骤可以得到两组数据,即各个像素点的梯度值Ggrad和各个像素点的角度θ。

2.2.3 非极大值抑制

非极大值抑制是一种边缘稀疏技术,其作用在于“瘦边”[11]。为保证图像中给定的边缘应只被标记一次,并且在可能的情况下,使图像的噪声不产生假的边缘。

如图8所示,将P点的周围分为4个区域,分别标有0、1、2和3。将0°到180°分别对应到4个区域内。

图8 P点的八邻域图

应用非极大值抑制将局部最大值之外的所有梯度值抑制为0,计算结果如图9所示。

图9 边缘特征图

以θ在[0°,45°)范围内为例,计算过程描述如下:

1)将当前像素的梯度强度与沿正负梯度方向上的2个像素进行比较,梯度方向的点的像素计算方法如式(6),可得F(p1)和F(p2)。

F(p1)=(1-tanθ)E+tanθ×NE

F(p2)=(1-tanθ)W+tanθ×SW

(6)

2)如果当前像素的梯度强度大于另外2个像素的梯度强度,即F(p)>F(p1)且F(p)>F(p2),则当前像素点保留为边缘点,否则该像素点将被抑制。

2.3 视差计算

SAD算法速度快、效率高、实时性好,可以较好地满足大部分立体匹配系统的需求[5],但其匹配精度不高。为此,本文引入图像边缘特征来提高匹配结果的精确性。改进SAD算法后,Edge-Gray算法的流程如图10所示。

图10 Edge-Gray算法流程

将预处理图像得到的左右视图的灰度图和边缘特征图分别记为Lgray、Rgray和Ledge、Redge,Edge-Gray算法描述如下:

1)确定参考图(以左图为参考图,则右图为匹配图),在参考图对应的灰度图中构建参考窗口,窗口大小的取值W=[(2n+1)×(2n+1)],n为正整数。计算不同窗口大小下,窗口中所有值的标准差,对应标准差最大的W即为此次匹配的窗口大小。

2)在参考图和匹配图中构建大小为W的窗口,分别计算窗口中心点与各个邻域点的差值和,记作Sgray和Sedge。

3)若Sgray>Sedge则选Lgray和Rgray为匹配源图,反之则选Ledge和Redge为匹配源图。然后采用经典的SAD算法计算出当前点的视差值,计算公式如下:

(7)

其中,L(x,y)和R(x,y)代表左右图像中(x,y)点的灰度值。用i和j遍历匹配窗口中的每一个像素点,每次计算d加1直到遍历完W。当CSAD最小时所得点即为匹配点,d即为所求视差。

4)逐一取出参考图中的每一个点进行上述步骤,得到左图的视差图。

5)将左视图作为匹配图,右视图作为参考图,重复步骤2~步骤4得到右图的视差图。

2.4 视差后处理

视差后处理专为除去视差图中的错误点而设计。该过程包含左右一致性检测、奇异点填充和平滑滤波3个步骤。

在左右视图中,存在某些区域在其中一幅图中可见,而在另一幅图中被遮挡,视差图中的错误点主要来源于图片中的遮挡区域,这些区域往往会造成深度图的不连续。左右一致性检测所采用的公式如下:

DL(x,y)=DR(x-DL(x,y),y)

(8)

其中,DL和DR分别为左右视图的视差图,(x,y)为当前点的坐标,不能满足式(8)的点为奇异点。以奇异点为中心,向左右搜寻距离最近的非遮挡点中较小的值来填充。

在平滑滤波过程中,本文采用中值滤波[20]的方法对像素点进行检测与恢复。具体操作为取出中心点周围8邻域或24邻域的灰度值,将这些深度值排序,取排序后中间位置的值为当前像素点的深度值。

3 实验结果与分析

本文实验参数如下:操作系统为64位Windows10专业版,CPU为Intel(R)Core(TM)i7-6700,CPU主频为3.40 GHz(3 408 MHz),内存8 GB,显卡AMD Radeon(TM) R5 340X(2 048 MB)。

将本文所得的实验结果图与理想视差计算所得深度图进行比较,将同一位置的像素值作差,超出阈值的点记为误匹配点,遍历所有点即可得到实验的误匹配率。所得的实验结果如图11所示。

图11 3种算法的匹配结果对比

图11(a)~图11(c)分别为传统SAD算法(记为Gray)、单纯使用边缘增强图(记为Edge)和本文算法(记为Edge-Gray)的匹配结果。可以看出,Edge算法在纹理较多的区域的匹配结果要优于Gray算法,但在纹理较弱、纯色区域较多的区域,Gray算法要优于Edge算法。总体而言,本文算法虽然在弱纹理的纯色区域提升效果不明显,但在边缘较多、纹理较丰富的区域有较好的匹配结果。具体数据如表1和表2所示。

表1 4种算法的误匹配率对比

表2 4种算法的时间消耗对比

由表1和表2可知,本文提出的融合边缘特征的SAD立体匹配算法精确度较好,该算法既能提高传统算法在边缘丰富区域的匹配精确度,又改善了该算法在纯色和边缘较少的区域匹配精度较低的特点。同时,从时间上看,本文算法与传统SAD算法的时间消耗相近,具有较好的实时性。

4 结束语

本文对传统的SAD算法进行改进,提出一种融合边缘特征的立体匹配算法。通过预处理得到边缘特征图,根据匹配窗口中像素点的标准差对自适应窗口大小进行处理。在匹配过程中,不同于传统的立体匹配算法只利用灰度图进行匹配,而是融合了边缘特征图和灰度图。实验结果表明,与传统SAD算法相比,该算法的耗时与其相近,但误匹配率普遍降低,对于边缘较多的Cones效果最为明显,该算法的误匹配率可降低10.52%。然而,在弱纹理和纯色区域较多的部分,本文算法的匹配准确率不高,针对该问题进行改进将是下一步的研究方向。

猜你喜欢
立体匹配视差像素点
基于自适应窗的立体相机视差图优化方法研究
基于局部相似性的特征匹配筛选算法
夏泽洋团队提出一种基于分割的立体匹配视差优化方法
基于5×5邻域像素点相关性的划痕修复算法
基于梯度域引导滤波的视差精炼迭代算法
基于canvas的前端数据加密
基于逐像素点深度卷积网络分割模型的上皮和间质组织分割
基于分割树的视差图修复算法研究
基于SIFT算法的图像匹配技术在测量系统中的应用
改进导向滤波器立体匹配算法