APP下载

阈值自适应的极线距离变换算法及其在立体匹配中的应用

2021-07-13王瑞杨朝旭荣海军张涛刘馨媛

西安交通大学学报 2021年7期
关键词:极线立体匹配视差

王瑞,杨朝旭,荣海军,张涛,刘馨媛

(1.西安交通大学机械结构强度与振动国家重点实验室,710049,西安;2.西安交通大学陕西省先进飞行器服役环境与控制重点实验室,710049,西安;3.西安交通大学航天航空学院,710049,西安)

基于双目立体视觉的三维重建技术是计算机视觉领域的重要研究课题,目前已广泛应用于医学、目标姿态测量等领域[1-4]。双目立体视觉利用双目相机模拟人类视觉获取图像对,根据图像对的位置关系可将其分为左视图和右视图。在双目立体视觉中,通过计算空间点在左右视图中的视差得到目标对应的三维信息。求取视差的过程被称为立体匹配。目前,立体匹配算法大致分为全局立体匹配和局部立体匹配2类[5-9]。全局立体匹配算法构建全局能量函数,通过全局最优搜索策略优化求取最小能量函数,最小能量函数对应的视差为最优视差。全局立体匹配算法求取的视差图精度高,但存在效率低、耗时长等缺点。局部立体匹配算法根据匹配基元可分为基于特征、基于相位和基于区域3类。局部立体匹配算法有计算简单、效率高的优点。基于区域的局部立体匹配算法将图像对中的灰度信息作为匹配基元。若左右视图中有丰富的灰度信息,则利用基于区域的匹配算法可得到较为稠密的视差图。由于视差精度直接反映了实际目标三维信息的准确性,所以稠密视差图可重建出更精准的三维点云。然而,在实际应用中,受到目标表面特性的影响和双目相机成像原理的限制,左右视图会缺失部分灰度信息。其中,不重叠区域会产生左右视图灰度不对应的现象,弱纹理区域则由于颜色单一造成灰度信息缺失。在不重叠区域和弱纹理区域中,利用基于区域的局部立体匹配算法会导致误匹配。

针对弱纹理区域会造成的误匹配现象,许多学者对立体匹配算法进行改进。一部分学者提出图像处理和立体匹配算法融合的算法。张一飞等提出一种融合图像分割的立体匹配算法。该算法对原始图像进行高斯滤波和sobel平滑处理,得到图像边缘特征图;将图像的RGB这3个通道进行二分类,通过融合得到分割模板图;对灰度图、边缘特征图和分割模板图进行立体匹配得到初始视差图,进而利用视差优化得到最终视差图[10]。Hamzah等提出基于RGB绝对色差和梯度匹配的立体匹配算法。在此算法中,将基于RGB颜色的SAD算法与梯度信息结合得到原始视差,再利用双边滤波去除噪声以得到最终视差图[11]。Shi等提出基于分段自适应窗口和多特征融合的立体匹配算法。该算法首先对图像进行分割并根据区域面积选取相对应的窗口,然后基于颜色和梯度信息进行立体匹配得到初始视差图,最后通过视差优化得到可靠视差图[12]。这些算法能在特定场景下得到精度较高的视差图,但依赖初始视差图、图像分割结果和后期的视差优化算法。此外,有学者从提升图像质量的角度提出改进算法。Yang等提出极线距离变换(EDT)算法。该算法使用分割系数代替图像灰度信息作为新的匹配基元进行立体匹配。此算法可提升弱纹理区域的像素可分性,但存在最优参数选择及较大弱纹理区域表现乏力的问题[13]。因此,岳颀和符立梅等对EDT算法进行改进,实现了参数的自适应选择,但仍面临着图像不重叠区域变换错误导致最终误匹配的问题[14-15]。曹晓倩等对EDT算法进行改进,提出了基于弱纹理区域检测及视差图融合的立体匹配(LTD-DMF)算法。该算法首先将图像分割为弱纹理区域和丰富纹理区域,然后根据自适应支撑域的思想对弱纹理区域进行距离变换,最终通过视差图融合得到完整视差图。该算法在一定程度上降低了不同尺度弱纹理区域对匹配精度的影响,但仍存在参数选择和不重叠区域变换错误的问题[16-17]。

为解决图像对中存在的不重叠区域会导致误匹配现象的问题,郭川提出重叠区域分割算法,借助左右视图间的变换矩阵T得到重叠区域,但是此算法没有考虑到每条极线对应的目标深度各不相同,所以会得到错误的分割结果[18]。张芬等借助双目相机模型获取重叠区域,但此算法只适用于相同深度目标所对应区域的分割[19]。

为解决基于区域信息的局部立体匹配算法在图像不重叠区域和弱纹理区域中会产生误匹配的问题,本文提出阈值自适应的极线距离变换(AT-EDT)算法。AT-EDT算法主要包括图像重叠区域分割、局部区域信息表示和阈值自适应距离变换共3个步骤,对应的逻辑框图如图1所示。

图1 AT-EDT算法逻辑框图

1 极线距离变换

针对弱纹理区域容易发生误匹配现象的问题,Yang等提出EDT算法。在此算法中,使用图像分割系数代替图像灰度信息作为新的匹配基元。其理论依据为:将斜线通过仿射变换投影到双目相机上时,斜线上一点对斜线两端的分割系数保持不变。极线距离变换如图2所示,pq为空间中一条斜线,o为斜线上一点,pl、ol、ql和pr、or、qr为p、o、q在左、右视图上的对应点。o对pq的分割系数具有不变性,因此可将分割系数作为匹配基元,其表达式为

图2 极线距离变换

(1)

因为立体校正后的图像对是严格行对准的,所以可将plql和prqr看作左右视图中的对应极线。为了消除分割精度的影响,该算法通过统计特定窗口内的像素灰度来计算分割系数,其表达式为

(2)

EDT算法有很强的鲁棒性,可有效提升一定弱纹理区域的像素可分性。但是,在该算法中,预设的弱纹理区域窗口尺寸小于2σsω+1,不适用于较大的弱纹理区域。此外,该算法还面临标准公差和尺度因子的参数选择的问题。针对这些问题,曹晓倩等提出LTD-DMF算法。该算法分为弱纹理区域检测、自适应距离变换及视差图融合3步。弱纹理区域主要通过计算像素灰度梯度和特定窗口中的方差来进行检测,若满足一定的条件,则属于弱纹理区域。具体的表达式为

(3)

式中

|I(u,v)-I(u,v+1)|)

(4)

(5)

检测出弱纹理区域后,对该区域进行自适应距离变换。自适应距离变换采用自适应支撑域的思想。p为弱纹理区域中的任一像素,沿着极线向左侧搜索,若某像素pl与p的灰度差异大于一定阈值,就将pl设为左端点。同理,向极线右侧进行搜索得到右端点pr。以左右两侧像素数表示分割系数,完成距离变换,公式为

(6)

最后,分别对纹理丰富区域和距离变换后的弱纹理区域进行立体匹配,得到两组视差图。将两部分视差图进行融合得到完整视差图。该算法有效降低了不同尺度弱纹理区域对匹配精度的影响,但仍面临以下3个问题:①左右视图中的不重叠区域容易导致距离变换错误;②在距离变换中,选取固定阈值容易导致图像丧失细节或产生重复纹理现象;③距离变换过程中选取固定阈值会产生过大或过小的支撑域,导致误匹配现象。

2 阈值自适应的极线距离变换算法及其在立体匹配中的应用

2.1 图像重叠区域分割

重叠区域是指左右视图中的重叠部分,也就是同一空间点在左右视图中均存在对应点。图3是双目成像原理。从图3a可以看出,双目相机的光心分别为ol和or,空间中一点p在双目相机成像平面中的对应点分别为pl和pr。从图3b可以看出,左视图的左侧有一部分像素点对应的空间点在右视图内无对应点。同理,从图3c可以看出,右视图的右侧部分像素对应的空间点在左视图中无对应点。为了获取三维空间中某一点的视差,需要获取该点在左右视图中的对应点。由于左右视图中的不重叠区域会导致误匹配现象的发生,所以在进行距离变换之前,需要去除图像的不重叠区域。

(a)图像重叠区域

空间中的一点映射到左右视图上时,投影的对应点灰度具有较高的相似性。因此,在相同极线上选取左右视图中对应视差范围内的像素点,并计算两像素点邻域内的灰度信息。将灰度信息作为参考,实现图像重叠区域的分割。以左视图为例,根据成像原理可知,右视图中的左端点像素在左图中存在对应点,且对应点坐标之差在视差范围内。根据视差范围在左视图中选取出与右视图中左端点相对应的像素点。选取对应点右侧一定距离内的像素作为邻域,并通过欧氏距离来计算两组邻域间的灰度相似性,公式为

(7)

式中:Sl(d)表示视差为d时对应邻域的相似性;M为右邻域的长度,本文中取值为100;Il(x,y)和Ir(x,y)为左右视图中点(x,y)处的灰度,左右的y取值一致代表左右点取自对应极线。求解出每个视差对应的欧氏距离后,取出最小欧氏距离min(Sl(d))对应的视差。将左视图中该视差处的像素点与右视图左端点看作对应点,并将左视图中该视差处的点对应的左侧像素灰度均设置为0,以去除左视图中的不对应区域。右视图同理,取左视图右端点与对应视差范围内的右视图像素点,并确定出对应邻域。根据邻域内的灰度信息,得到每个视差对应的欧氏距离。得到最小欧氏距离min(Sr(d))后,取出对应视差,并去除右视图中的不对应区域。右视图使用的欧氏距离公式为

Sr(d)=

(8)

式中w为图像宽度。

去除不对应区域后,可得到左右视图的重叠区域。重叠区域分割可避免灰度不对应产生的误匹配现象。为了得到图像不同尺度弱纹理区域对应的距离变换阈值,对图像局部纹理进行表示。

2.2 局部区域信息表示

针对使用固定阈值对不同尺度弱纹理区域进行距离变换会产生变换错误的问题,并且考虑到在后续立体匹配过程中需要将局部区域信息作为匹配信息,本文将左右视图的局部信息作为参考,来获取距离变换阈值。图像对中像素点(x,y)的纹理信息G(x,y)表达式为

G(x,y)=H(x,y)+V(x,y)

(9)

式中:G(x,y)为点(x,y)处的纹理信息;H(x,y)为点(x,y)处的灰度梯度;V(x,y)为点(x,y)处的图像局部灰度方差。

灰度梯度可表示图像中的边缘信息,表达式为

(10)

式中gx和gy分别为图像的垂直梯度和水平梯度,采用sobel模板获得,公式为

(11)

图像方差表示图中每个像素点灰度与灰度均值之差的平方和的平均数,可用来表示灰度与灰度均值的离散程度,表达式为

(12)

为了得到图像各区域纹理信息的丰富程度,需要计算图像的局部方差。局部方差V(x,y)的表达式为

(13)

为了解决某些边缘像素对应的邻域超出图像范围的问题,以边缘为中心线对图像中的像素进行镜像反射,通过图像扩张来获取边缘像素对应的邻域。

得到左右视图对应的区域信息后,因为边缘区域与非边缘区域的纹理信息差值较大,所以利用gamma变换对纹理信息图像的对比度进行调整。gamma变换主要分为归一化、预补偿和反归一化,主要变换过程为

(14)

式中:G(x,y)和G′(x,y)分别为gamma变换前后的图像纹理值;γ为gamma变换中的指数;GT和GD分别为所有图像纹理中的最大值和最小值,其中最小纹理值为0。为了缩小全图纹理比例,γ应小于1,通过多次实验,最终将γ确定为0.3。代入这些数值后,式(14)变为

(15)

进行gamma变换后再对纹理信息图像归一化,进而得到局部区域纹理相对于纹理最大值的比例(G(x,y)/GT)0.3,将左右视图对应的最大视差S作为基准,定义每像素的距离变换阈值

a(x,y)=S(G(x,y)/GT)0.3

(16)

对图像的局部区域信息进行表示后,提取到图像局部纹理特征,并得到图像中每个像素对应的距离变换阈值。为了提升图像的纹理信息,利用AT-EDT对图像进行变换。

2.3 阈值自适应的距离变换

LTD-DMF算法是根据灰度相似性确定支撑域,给定灰度阈值过大会导致极线搜索域过大。为了避免极线搜索域过大造成的误匹配现象,先对图像进行预处理。对每条极线上的所有像素点进行统计:x为极线上灰度值非零的像素点的序号;c(x)和I(x)为第x个像素点对应的坐标和灰度;T1和T2为坐标阈值和灰度阈值,用来调整原始支撑域。T1取为原始图像的宽度的1/10,T2取为图像中非零像素点对应的灰度的标准差。

若满足

c(x)-c(x-1)>T1或I(x)-I(x-1)>T2

(17)

则将第x个像素点对应的坐标值定义为零点。相邻零点之间的区域称为原始支撑域。若存在长度小于T1的原始支撑域,则将其去除,以避免支撑域过短而在距离变换后出现重复纹理。

得到原始支撑域后,利用AT-EDT算法对图像进行距离变换。原始支撑域中的每个像素点p沿极线向左右两侧寻找,表达式为

(18)

式中a(x,y)为每点的距离变换阈值。若出现一点(xl,y)与给定点(x,y)的灰度差大于参数a(x,y),则将该点设置为左端点。右端也是如此。若未在原始支撑域中寻找到对应点,则将原始支撑域对应的两端点分别定义为距离变换中的左右端点。从而得到像素点p对应的分割系数

(19)

根据分割系数对极线上的点进行赋值,完成距离变换。

2.4 AT-EDT算法在立体匹配中的应用

对图像进行距离变换后,通过立体匹配得到视差图。本文选用像素差平方和(SSD)立体匹配算法。该算法选用左右视图中对应点邻域内的灰度,并将灰度差值的平方和作为参考信息,实现最佳匹配像素块的寻找,其表达式为

Il(x+i+d,y+j))2

(20)

式中:C(x,y,d)为像素(x,y)的视差取d时的匹配代价;Il(x,y)和Ir(x,y)是像素点(x,y)在左右视图中对应的灰度;W为以(x,y)为中心的匹配窗口。

AT-EDT算法的伪代码描述如下。

1.For 右视图中的每一个左端点 do

2. For左视图对应极线上视差范围内的每一个点do

3.通过式(7)计算左视图视差对应的欧氏距离Sl(d)

4.End for

5.End for

6.For 左视图中的每一个右端点 do

7. For 右视图对应极线上视差范围内的每一个点 do

8.通过式(8)计算右视图视差对应的欧氏距离

Sr(d)

9.End for

10.End for

11.For 每个视差 do

12.WhileSl(d)=min(Sl(d)) do

13.去除左视图对应极线上像素点d的左侧区域

14.End while

15.WhileSr(d)=min(Sr(d)) do

16.去除右视图对应极线上像素点w-d的右侧区域

17.End while

18.End for

19.For 左右视图中的每个像素点 do

20.通过式(16)计算对应距离变换阈值a(x,y)

21.通过式(17)构建原始支撑域

22.通过式(19)构建每点对应的分割系数,完成距离变换

23.End for

24.利用SSD算法对距离变换后的图像进行立体匹配得到视差图

3 仿真结果分析

因为本文AT-EDT算法主要是针对Yang等提出的EDT算法和曹晓倩等提出的LTD-DMF算法进行改进,所以同时与这两种算法进行对比分析。本文实验均在MATLAB2018a平台中进行。

3.1 基于标准库图像的实验结果对比分析

标准库为Middlebury数据库,本文采用其中的保龄球、灯和塑料图像进行实验。

本文提出的AT-EDT算法主要包括图像重叠区域分割、局部区域信息表示和阈值自适应距离变换共3个过程。

首先对图像对的重叠区域进行分割,结果如图4所示。可以看出,该过程可剔除图像的不重叠区域,并有效避免不重叠区域产生的变换错误。

(a)原始左视图 (b)原始右视图

本文AT-EDT算法得到的变换结果如图5f所示。可以看出,本文算法有效增加了弱纹理区域的可分性。同时,在纹理丰富区域,有效保留了细节并避免了易产生的重复纹理现象。

(a)原始输入图像 (b)EDT结果1 (c)EDT结果2

(a)原始输入图像

从图6可以看出:EDT算法对应的视差图与原始图像直接立体匹配得到的视差图相比,精度有所提升,但仍面临着较大弱纹理区域误匹配的问题;LTD-DMF算法对应的视差图在不重叠区域会出现误匹配,且存在视差不连续现象;本文提出的AT-EDT算法很好地保证了重叠区域的匹配精度,同时避免了对纹理区域和弱纹理区域需进行二次立体匹配的问题。

误匹配率是各算法得到的视差图与标准视差图进行对比得到的,表达式为

(21)

式中:NE为得到的视差图中的误匹配点总数;NT为存在视差值的像素总数。将本文视差与标准视差作差,其中差值的绝对值大于3的点判定为误匹配点。

各视差图对应的误匹配结果及不同算法用到的参数量如表1所示。

表1 标准库图像误匹配率结果及参数量对比

分析表1可知:本文AT-EDT算法比EDT算法在保龄球、灯、塑料图像上的误匹配率分别提升了35.77%、25.26%、48.26%,且采用了更少的参数。

3.2 基于实拍图像的实验结果对比分析

实拍图像选用双目相机拍摄的浮空器、储物箱及墙壁,3幅实拍图像中均存在大范围的弱纹理区域。图7为采用不同算法对实拍图处理后再进行立体匹配得到的视差图。

(a)原始输入图像

由于无实物图准确视差,利用各算法在特征点处对应的视差与真实视差进行对比,结果如表2所示,表中平均误差为各特征点视差误差的平均值。

表2 实拍图像误匹配率结果对比

实验结果表明:使用EDT算法和LTD-DMF算法得到的视差图仍存在较大误差,并且存在较多噪声;本文提出的AT-EDT算法在一定程度上提升了匹配精度,解决了应对丰富纹理和弱纹理区域需二次求解视差的问题,同时避免了EDT算法造成的二次弱纹理现象。

4 结 论

在基于区域信息的局部立体匹配算法中,丰富的灰度信息是保证立体匹配结果真实准确的关键因素。本文提出阈值自适应的极线距离变换算法,通过图像局部区域的纹理信息来得到各像素对应的距离变换阈值,提升图像的像素可分性和立体匹配精度。本文得到的主要结论如下。

(1)找到极线上视差范围内的对应点,比较对应极线邻域中的灰度信息,能够去除左右视图中的不重叠区域,并保证左右视图灰度信息对应。

(2)阈值是影响极线距离变换结果的关键因素。通过图像各区域纹理信息的丰富程度,可以得到各像素对应的距离变换阈值。

(3)通过像素间的灰度和位置关系,可构建距离变换中的原始支撑域。

(4)本文算法有效解决了立体匹配过程中左右视图区域不对应的问题,同时避免了固定阈值在极线距离变换中造成的二次弱纹理和重复纹理现象的发生,在增加了图像像素可分性的同时保证了立体匹配的精度。

本文研究仅针对图像不重叠区域及弱纹理区域,还有许多潜在方向需要研究,例如:

(1)受到双目相机硬件限制及实验环境影响,左右视图中会存在灰度差异;

(2)不同深度目标之间会存在遮挡效应。

猜你喜欢

极线立体匹配视差
基于自适应窗的立体相机视差图优化方法研究
破解定值有妙法,极点极线显神威
一道高考试题的背景简介
基于梯度域引导滤波的视差精炼迭代算法
基于分割树的视差图修复算法研究
基于SIFT算法的图像匹配技术在测量系统中的应用
改进导向滤波器立体匹配算法
立体视差对瞳孔直径影响的研究
动态规划立体匹配的状态空间分析和性能改进
一种基于图像分割的立体匹配算法