李一能,曾庆化,2,3,张月圆,刘建业,2,3,张逸舟
(1.南京航空航天大学导航研究中心,南京 211106;2.南京航空航天大学先进飞行器导航、控制与健康管理工业和信息化部重点实验室,南京 211106;3. 南京航空航天大学江苏省物联网与控制技术重点实验室,南京 211106)
双目立体视觉技术是根据仿生学原理仿生人眼感知周围环境中深度信息的方法,实现双目相机对深度信息的测量。该技术在工业测量、目标识别和无人驾驶等领域得到了广泛的应用,特别是在视觉同步定位与建图 (Simultaneous Localization and Mapping,SLAM)和三维重建领域,双目立体视觉在三维点云获取方面较单目视觉有着天然的优势,硬件成本较低、运算速度快且精度高,因而受到了极大的关注。立体匹配算法的效果决定了视觉系统的精度,也是双目视觉系统的重要组成部分[1-2]。
立体匹配算法分为全局匹配算法、局部匹配算法和半全局匹配算法三种[3]。局部匹配算法运算速度快,能够满足实时性要求,但该算法在匹配图像为弱纹理与纯色图像时匹配精度较低,难以得到该区域的准确深度信息。
针对上述问题,很多学者尝试通过增加灰度以外的特征或者将图像分割算法融合到立体匹配过程中来解决这一问题。邹进贵等[4]提出了一种基于自适应权重绝对值之和(Sum of Absolute Diffe-rences,SAD)与Census融合的匹配算法,通过引入图像的光照亮度特征,并结合Census算法对图像的光照亮度特征进行描述,一定程度上提高了匹配精度。杨艳等[5]提出了一种新的基于图像分割的循环置信传播(Loopy Belief Propagation,LBP)立体匹配算法,利用镜头阴影校正(Lens Shade Correction,LSC)超像素分割算法进行图像分割,并结合LBP算法优化视差平面,能够较好地处理低纹理区域和遮挡区域,但是算法的运算时间较长。张一飞等[6]提出了融合边缘特征的Edge-Gray算法,首先利用边缘计算得到边缘特征图,结合边缘特征与灰度特征对图像的视差进行求解,该算法在一定程度上提高了纹理较多区域的匹配准确性,但是在弱纹理区域的匹配效果不佳。Y.Chai等[7]提出了融合Census变换的SAD算法,通过构造自适应权值的加权匹配代价算法,有效提高了匹配精度。T.T.San等[8]基于爬山算法和尺度不变特征变换(Scale Invar-iant Feature Transform,SIFT)特征描述子对参考图像进行分割,使用SAD算法进行局部立体匹配,一定程度上提高了匹配精度,但是在弱纹理与纯色部分的匹配效果不理想。
本文针对传统SAD算法在弱纹理与纯色图像区域难以得到准确视差信息的问题,提出了融合明度特征与SAD算法的立体匹配算法——V-SAD(Sum of Absolute Differences in Value)算法。本文算法将图像的明度信息引入SAD算法,结合颜色分割与边缘生长法对图像的视差进行恢复,最后使用左右一致性检测(Left-Right Consistency Check)方法[9]对视差图进行优化,有效提高了SAD算法在弱纹理和纯色区域的匹配效果。
SAD局部匹配算法是目前立体匹配算法中最常用的匹配算法,该算法通过设置合理尺寸的匹配窗口,固定左(或右)匹配窗口,滑动右(或左)图上的匹配窗口,求解左右2个视图的窗口内对应位置像素的灰度值差的绝对值之和,绝对值之和最小的两点即为左右视图的匹配点。SAD匹配代价计算函数如式(1)
(1)
其中,CSAD(x,y)表示点(x,y)的SAD算法的匹配代价;N为匹配窗;i、j为匹配窗口中元素的位置;d为视差,使CSAD最小的视差值d就是所求视差;IL(x,y)与IR(x,y)分别表示在左右视图中(x,y)位置的像素点的灰度。
SAD算法通过对图像灰度信息进行比较,找出左右视图中对应的匹配点。当图像为弱纹理区域与纯色区域时,由RGB(Red,Green,Blue)空间得到的图像的灰度呈现出图1所示的特点:右视图匹配窗在可选区域(红色方框)内计算灰度值的匹配代价,所得大小均相同,难以确定对应的匹配点,因此SAD算法难以在弱纹理区域与纯色区域进行准确匹配,存在严重的缺陷。
图1 纯色区域匹配示意图Fig.1 Schematic diagram of the matching effect of the solid color area
图像中纯色与弱纹理部分难以使用RGB空间得到的灰度信息进行匹配。然而,HSV(Hue,Satura-tion,Value)空间中明度分量与图像的彩色信息无关,常用于特征描述及图像分割等领域。因此,V-SAD算法在计算匹配代价时,同时考虑图像的纹理特征和纯色区域的明度特征,结合图像灰度信息和HSV空间的明度信息作为匹配代价来衡量匹配相似度。
在视差后处理中,如果在全局大小上直接对视差图进行恢复,会忽略单个物体的特征,造成边缘模糊、噪声过多。考虑同一个物体在视图中往往会拥有相同的颜色,利用颜色对图像进行分割[10-12],可以近似得到语义级别效果的分割信息。所以根据颜色信息对图像进行分割,并对分割区域中每一个独立的连通域进行视差恢复。V-SAD算法主要步骤包括融合明度特征的SAD算法匹配代价计算、基于HSV空间颜色信息的图像分割、分割区块的视差生长和视差优化。
与人眼感知周围环境方式相近的是色调(H)、饱和度(S)和明度(V)的HSV空间[13]。其中色调表示色彩信息,即所处的光谱颜色位置;饱和度表示所选颜色的纯度和该颜色最大纯度之间的比率;明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关,对于物体色,此值和物体的透射比或反射比有关[14]。
明度信息与图像的彩色信息无关,使用明度值进行匹配受到图像色彩的影响较小,从而可以通过比较匹配框中的明度值来确定左右视图的对应点。图像中对应点的颜色种类是否相同也可以辅助判断当前对应点能否成功匹配,因此,将颜色种类信息加入算法辅助匹配。
首先将RGB空间的图像转换为HSV空间的图像,变换后得到对应像素点的色调、饱和度和明度。利用表1[15]所示区间值,将图像中所有像素点按照10种颜色进行转化,为了便于计算,将黑至紫10种颜色分别标记为1~10的数值,得到每一个像素点的Col值,Col值代表该像素点所属的颜色种类。利用式(2)可以计算基于明度的匹配算法的匹配代价
(2)
其中,CV(x,y)表示点(x,y)利用明度特征计算的匹配代价;N为匹配窗;i、j为匹配窗口中元素的位置;d为视差,使CV最小的视差值d就是所求视差;VL(x,y)和VR(x,y)分别表示在左右视图中(x,y)位置的像素点的明度;ColL(x,y)和ColR(x,y)分别表示在左右视图中(x,y)位置的像素点的颜色种类。
V-SAD匹配算法的匹配代价就是结合HSV空间的匹配代价与SAD的匹配代价,计算公式如式(3)
CV-SAD(x,y)=min(CV(x,y),CSAD(x,y))
(3)
其中,CV(x,y)是利用明度特征计算的匹配代价;CSAD(x,y)是SAD算法的匹配代价;CV与CSAD中较小的数对应的视差值d即为所求视差。
根据式(3)可知,V-SAD算法是在灰度的测度上增加明度的测度进行匹配,当CV较小时,选择明度特征图作为匹配源图进行匹配;当CSAD较小时,选择灰度特征图作为匹配源图进行匹配。虽然SAD算法对纹理较多区域的匹配成功率较高,但是对于大面积缺乏纹理特征的区域难以有效匹配;而基于明度的匹配算法比较的是明度信息,在缺乏纹理特征的区域可以有效匹配。因而在图像不同区域使用不同的特征图作为匹配源图进行匹配,可以在纹理较少与纯色区域充分利用明度特征进行匹配,在纹理较丰富区域充分利用灰度特征进行匹配,从而可以在SAD算法的基础上提高原算法在弱纹理与纯色区域的匹配效果。
表 1 HSV空间颜色信息
本文使用的图像是经过校正的数据集,因此匹配图像只存在水平方向的视差,根据2.2节方法计算图像的匹配代价。对于每一个像素点,找出最小的匹配代价,并根据左右视图中对应像素点的水平坐标之差,得到对应的视差。
原始视差图不可避免地存在无法匹配的区域,利用颜色对图像进行分割,并对分割区域中每一个独立的连通域进行视差恢复,可以提高视差图的准确性。
将图像利用设定的Col值进行分割后,图像分割效果如图2所示,图2(a)为原图像,图2(b)为根据表1颜色信息得到的图像分割效果图。
(a)原图像
(b)分割效果图图2 基于HSV通道的图像分割效果图Fig.2 Diagram of image segmentation based on HSV channel
为了提高视差图的准确性,求解分割后区块的连通域,并对每一块连通域进行视差填补。然而利用单一颜色信息进行图像分割会受到光线和反射等影响,不可避免检测出很多零散、细小区块,对连通域检测带来干扰。使用数学形态学法[16]可以检测图中自定义形状的图像,并过滤背景产生的干扰图像。首先选择合适的结构元进行一次开运算,腐蚀掉图像上的细小区块,过滤部分噪声的干扰;再进行一次闭运算,消除物体内部的间隙,使图像形成独立连通域。
本文在V-SAD算法求解视差的基础上,对每一块独立连通域进行视差恢复。由于连通域的形状不规则,且各连通域上的有效视差值分布各异,传统的线性插值[17]和双线性差值等方法难以适用,本文受区域生长法[18]启发,提出了边缘生长法,运算流程如下:
1)求解当前连通域中边缘点与生长点:边缘点为当前连通域中以该像素点为中心、周围8个像素点中深度为0的点,如图3所示红色矩形框中的点;边缘点周围8个像素点深度为0,且在当前独立连通域中的点记为生长点,如图3所示灰色格子中的点。
2)求解当前独立连通域中生长点的深度:生长点深度为生长点周围8个像素点中包含的边缘点深度和的均值。
3)重复步骤1)与步骤2),直至当前连通域中不含有深度为0的点。
图3 边缘生长法示意图Fig.3 Schematic diagram of the edge growth method
基于边缘生长法的优点可以利用有限数据达到数据外推的效果,从而对无法匹配的纯色区域进行视差估计。但是,由于边缘生长法中数据生长具有先后性,数据的大小有时会呈现递增的趋势,从而使部分区域出现条状纹路,导致匹配误差。使用边缘生长法前后的图像视差如图4所示,图4(a)为原始视差图,图4(b)为利用边缘生长法优化后的视差图。图4(b)对图4(a)中的空洞进行填充,并对图像中物体的边缘进行滤波,使得视差图像更加层次分明,物体边缘清晰明了。
(a)原视差图
由于左右视图中部分区域会受到视角的局限导致无法进行匹配,因而需要对视差生长后的视差图进行优化。左右一致性检测能够有效地滤除无效视差,具体方法为:分别以左视图与右视图为基准图进行立体匹配,求解对应的视差图DL与DR,如果点(x,y)满足式(4),则可以得到点(x,y)在左视图上的视差与在右视图(x-DL(x,y),y)处的视差是相等的。可以认为,点(x,y)的视差在以左右视图为基准图得到的左右视差图上的视差是一致的,点(x,y)视差求解正确。对于视差求解正确的点,视差值为对应匹配点的视差;对于视差求解不正确的点,以该点为中心向左右搜寻距离最近的正确匹配点,并从中选取较小的值来填充。
DL(x,y)=DR(x-DL(x,y),y)
(4)
V-SAD算法的视差图求解总流程如图5所示。
图5 V-SAD算法检测流程图Fig.5 Flowchart of V-SAD algorithm detection
本文的实验平台为Intel四核I7-2.59GHz CPU,8.0Gb RAM的笔记本电脑,Windows XP环境下Matlab2014平台。图6所示为4个标准测试数据下的实验结果。
图6(b)为文献[4]算法的匹配结果,图6(c)为文献[6]算法的匹配结果,图6(d)为本文算法的匹配结果。对比图6(b)、(c)、(d)三种方法的匹配结果可以发现,文献[4]算法利用Census变换,将光照亮度信息引入SAD算法,一定程度上提高了算法在弱纹理区域的匹配性能,但是未能有效区分图像中各物体的边界,使得物体边界模糊,存在大量的毛刺状凸起;文献[6]算法将边缘信息引入SAD算法,有效提高了算法在纹理较多区域的匹配性能,但是在弱纹理区域与纯色区域的匹配性能较差;本文算法将图像的明度信息引入SAD算法,并利用边缘生长法对图像的深度进行恢复,由于图像的明度信息与图像的纹理、彩色信息无关,因此使用明度信息可以有效地衡量纯色与弱纹理区域匹配点的相似度,所以本文算法较为准确地恢复了纯色区域与弱纹理区域的视差。除此之外,基于HSV空间颜色分割的边缘生长法有效控制了物体的边缘与视差生长的范围,使得图像中物体边缘清晰分明。由于本文算法对于HSV空间只进行了10种颜色的区分,对于颜色相近的不同物体,当两者相互接触或者存在前后重叠的情况时,存在误匹配的可能。
(a)原始图像
将得到的视差图与理想视差图作差,差值超出阈值的像素点标记为误匹配,误匹配点个数占图像像素点总个数的百分比即为误匹配率。误匹配率结果如表2所示,运算速度结果如表3所示。
表2 不同算法的误匹配率
表2为多种算法误匹配率的对比。由表2可以发现,与SAD算法、文献[4]算法以及文献[6]算法相比,本文提出的V-SAD立体匹配算法的匹配准确度更好,误匹配率在多个数据中均最小,平均误匹配率分别下降了13.02%、6.55%和5.77%。
表3 不同算法的运算时间
表3为多种算法运行时间的对比。由表3可以发现,本文算法运算时间均稍慢于其他三种优化算法,与SAD算法、文献[4]算法以及文献[6]算法相比,平均运算时间增加了0.59s、1.67s和0.32s。
针对SAD算法难以对图像中纯色与弱纹理部分进行准确匹配的问题,本文提出了将明度特征与SAD算法相融合的立体匹配算法——V-SAD算法。算法分析与实验结果表明:
1)利用图像的明度信息可以有效衡量纯色与弱纹理区域中匹配点的相似度,本文提出的V-SAD算法将明度信息引入SAD算法,有效提高了SAD算法在弱纹理和纯色区域的匹配效果。
2)HSV空间提供的颜色信息可以辅助判断左右视图中的对应像素点是否为正确的匹配点,从而在提高匹配准确率的同时简化匹配代价计算过程,提高算法运算效率。
3)基于HSV颜色信息分割的边缘生长法可以在分割后的独立连通域中,利用有限的视差数据对该区块中无法求解视差的区域进行视差估计与恢复,但是由于数据运算存在先后性,导致部分区域出现条状纹路,后续的工作中可以考虑引入图像平滑等方法,以消除或减小条状纹路。