基于双目视觉的改进特征立体匹配方法
2022-03-17胡辽林
王 笛,胡辽林
(西安理工大学机械与精密仪器工程学院,陕西西安 710048)
1 引言
双目立体视觉是模拟人的视觉系统来构建现实世界[1].立体匹配作为三维重建、非接触测距等技术的关键,是双目视觉的核心内容之一[2].通过二维图像来获取深度,具有实现简单、成本低廉、可在非接触条件下测距等优点[3],在机器人制导系统中可以用于导航判断、目标拾取,在工业自动化控制系统中可用于零部件安装、质量检测、环境检测,在安防监控系统中可用于人流检测、危害报警等[4].
立体匹配算法根据匹配基元和方式的不同分为区域匹配、特征匹配、相位匹配、能量匹配.区域匹配受图像的仿射和辐射畸变影响较大,约束窗口选择困难,深度不连续处易产生误匹配;特征匹配对图像几何变换不敏感,具有较强的抗干扰性且复杂度小[5],缺陷是视差结果稀疏,需通过插值、拟合等过程;相位匹配算法对旋转变换非常敏感且奇异点不稳定;能量匹配通过构建全局能量函数获取视差,无法用于较大偏差图像,且复杂性过高.当前,王阳萍等人提出结合加速鲁棒特征的遥感影像半全局立体匹配,用特征点来引导路径聚合[6];Feng 等人提出了一种基于ADCensus 特征的立体匹配算法增强对局部噪声像素的鲁棒性[7];Hui 等人提出了一种结合汉明距离和仿射变换的SURF-BRISK算法匹配定位方法[8];肖进胜等人提出优化斜平面的双目立体匹配算法,提高运算速度[9].
本文是基于特征的稠密立体匹配,首先采用线性对比度展宽突出图像重要纹理,用加速分割检测特征(Features from Accelerated Segment Test,FAST)提取特征信息,对特征进行加速鲁棒特征(Speeded Up Robust Feature,SURF)描述后依靠快速近似最近邻搜索库[10](Fast Library for Approximate Nearest Neighbors,FLANN)和K-近邻(K-Nearest Neighbors,KNN)算法实现特征匹配,再使用随机抽样一致性算法[11](Random Sample Consensus,RANSAC)去除误匹配;将得到的精确匹配点对作为种子点对依据视差连续性准则进行扩散生长并计算视差,匹配代价利用简化的零均值归一化互相关系数[12](Zero-mean Normalized Cross-Correlation,ZNCC)作为相似度量函数计算,获取最小代价值点对并通过阈值剔除部分误匹配,使用极线约束降低搜索复杂度,采用双向匹配策略提升匹配的准确性;对视差值进行亚像素拟合处理[13]得到子像素视差从而提高视差精度,使视差连续区域过渡平滑;使用加权中值滤波[14](Weighted Median Filter,WMF)消除噪声点和条纹同时防止边缘模糊.经Middlebury 实验图像从主观与客观方面对比分析,本文算法解决了特征匹配存在的不足,降低了时间复杂度和噪声的干扰,在准确性和精度上明显提升,尤其是弱纹理与深度不连续部分.SURF 算法与ZNCC 算法的鲁棒特性使本文方法对亮度变化不敏感.
2 算法流程系统设计
双目视觉是在不同视点的两个相机拍摄同一场景,通过立体匹配找到对应的同名点,同名点横坐标之差即为相应的视差信息,再根据三角测量原理获取深度信息[15].针对当前特征立体匹配算法存在的问题,本文设计了结合改进区域生长等方法的稠密立体匹配.步骤如下:第一,图像进行灰度化及线性对比度展宽处理;第二,检测特征点并完成特征匹配;第三,对种子点对进行改进区域生长获取稠密视差;第四,对视差进行亚像素拟合、加权中值滤波等精细化后处理.算法流程如图1所示.
图1 算法流程图
3 结合改进区域生长的特征立体匹配方法描述
3.1 图像预处理
左右彩色图像通过将R,G,B 分量加权平均的过程转化为灰度图像.
灰度的线性变换可以突出图像中的重要信息,图像中重要的纹理因对比度不足而不够清晰时,通过抑制非重要信息让期望部分进行对比度展宽.为了特征点检测均匀、丰富,区域生长过程代价计算精确,利于弱纹理区匹配,采用线性对比度展宽对图像进行预处理.
3.2 FAST特征检测
FAST 特征提取算法是利用特征点周围的图像灰度差异进行检测.判别图中任意一点P 是否为特征点,以该点为圆心,构造一个半径为3 的圆,圆周上的像素点与中心像素点进行比较.
设I(p)和I(x)分别为中心点与圆周上点的灰度值,εd为设置的阈值.如果圆周上的16 个像素点至少有N 个连续都比I(p)+εd大或者比I(p)-εd小,则候选点P是一个特征点.N为满足公式(1)的点的个数,一般取12.
本文选择优先检测P点四邻域方向圆周上的顶点,减少检测耗时.如果至少有3 个点满足式(1),再按上述检测条件进行判定;如不满足,则其不是特征点.
3.3 SURF特征描述
特征检测后,选取特征点的主方向.构造一个圆形领域,以特征点为中心、半径为6s(s 为特征点的尺度值),统计特征领域内水平和垂直方向哈尔(Harr)小波特征,对卷积响应赋予高斯权重,获取60度扇形内所有点的水平和垂直方向Haar小波响应总和得到了一个矢量.然后进行旋转遍历,比较得出矢量最长的那个扇形的方向作为该特征点的主方向.
获得特征点的主方向后,将主方向作为x 轴,建造一个以特征点为中心,边长为20s 的正方形区域,再等分为4×4=16个子区域,计算每个子区域的Haar小波响应,水平和垂直Haar小波响分别记为dx和dy,统计每个子区域的响应总和与响应绝对值之和,则每个子区域表示为四维的特征向量V.
每个特征点就由16 个子区域的特征向量组成,最终形成一个16×4=64 维的具有尺度、光照不变性[16]的SURF特征向量描述符.
3.4 基于FLANN和KNN的特征匹配
采用基于FLANN 的K(K 取2)近邻搜索算法实现特征匹配.寻找左图像对应右图像的最近邻和次近邻特征点对,设定阈值(本文取0.6),若最近邻与次近邻的距离比值小于阈值,则接受最近邻这一匹配点对.本算法在匹配的同时进行去粗取精,删掉一些误匹配.
再利用随机抽样一致性算法进行单应性矩阵映射来剔除误匹配.从匹配点对中随机抽出4 个样本数据(样本之间不能共线),计算出变换矩阵H,用矩阵H测试其他点对估算误差,设定一个阈值,若满足估算的误差小于设定阈值,则将其纳入内点,否则视为外点.对新的内点进行上述步骤迭代计算,当单应性矩阵没有更改或者达到迭代次数,那么最终得到的矩阵H就是最佳参数矩阵.
式(3)中k为迭代次数,p为置信度(取0.995),w为内点的比例,m为计算矩阵最小的样本数.
图2是特征点获取匹配的结果,可以看出预处理后FAST 算法检测的特征点更全面,适合本文算法的实现.本文特征匹配算法得到均匀的特征点匹配结果,将其作为下一步区域生长的基础.
图2 特征检测与匹配结果
3.5 基于改进区域生长的视差稠密化
经过特征匹配后的准确稀疏点对作为种子点,按照视差连续性原则将更多的点并入种子点进行视差稠密化,极大地提高了匹配的速度和准确性.
如图3 所示,已知左图像某点P 在右图像上的同名点为Q,根据视差连续性约束,则P 点相邻的八邻域内某点P1 的同名点必定在Q 点附近,搜索Q 点相邻的八个点(八邻域准则),又依据极线约束准则,即对应的同名点都在同一极线上,将搜索范围由二维降至一维(三个点),降低匹配复杂度且提升准确性.使用双向匹配策略,首先从左到右匹配,若左图像P1经过匹配后得到的同名点为右图Q1,再用Q1 从右向左匹配,若反向匹配的同名点也是P1,那么就将P1 和Q1 作为一对正确的匹配点对,计算视差并将其纳入新的种子点对.
图3 区域生长原理图
采用式(4)零均值归一化互相关系数作为相似度量函数,如图4所示,在目标像素周围设置搜索窗口(本文取4×4)计算匹配代价,设置一个阈值(本文取2),剔除一些误匹配点降低噪声点的影响,若最小的匹配代价满足阈值,记录其对应匹配点对.从式(4)可以看出,计算匹配窗口的归一化互相关系数,对亮度存在差异的图像具有较强的鲁棒性.
图4 搜索窗口图
式(4)中的W表示搜索窗口大小(xL)和(xR)表示左右两幅图像上分别以xL和xR为中心的搜索窗口W的平均灰度值,IL(xL+i)和IR(xR+i)是左右两幅图像上分别以xL和xR为中心的搜索窗口W内点的灰度值.
零均值归一化函数计算匹配代价重复求取匹配窗口灰度值均值,过程烦琐,使得匹配代价计算复杂度高,本文对其进行变换得到式(5),利用积分图简化计算,很大程度上减少了冗余步骤,降低了匹配耗时.
积分图由普通数字图像生成,尺寸等于原始图像,而每个像素点保存由原始图像左上角和当前像素点确定的矩形范围的灰度值总和或者灰度值的平方和.
积分图的数学形式为
其中,J(i,j)为原图中坐标为(i,j)的像素点的灰度值,Jsum(x,y)和Jsquare(x,y)分别为积分图与平方积分图中像素点坐标为(x,y)的灰度值.
得到积分图后,根据图5计算搜索窗口区域的所有像素点灰度值和与灰度值的平方和.
图5 积分图目标区域值计算原理
其中,S(x,y)表示原图窗口内的所有像素点灰度值之和,(x,y)为搜索窗口的中心点,J是积分图中对应点的灰度值,搜索半径k取2.
借助积分图计算匹配代价,避免了许多不必要的计算过程,大大降低了匹配的复杂度,缩短了匹配时间.
经过本文改进的区域生长立体匹配后,不仅弥补了特征点匹配只能得到稀疏视差的缺陷,还得到了匹配效果较好的视差图.此时的初始视差图仍存在一些问题,如噪声点、精度等,还需要进一步精细化处理,对视差图进行优化和修正,从而获得准确性更高效果更佳的结果.
3.6 视差精细化后处理
多数立体匹配算法是在一个离散的空间中进行运算而得到整数视差值.整数视差基本满足机器人导航和人类跟踪等领域的应用,但是对于图像绘制与三维重建等技术,由于真实场景是连续且渐变的,这些量化的过程会导致视点综合的结果出现错误.针对这个问题,在初始视差计算的同时进行亚像素精细化处理来解决这种缺陷.
本文采用拟合曲线法达到子像素精细化的目的.如图6所示,经过立体匹配得到匹配代价最适合的c0所对应的整像素视差值d,将其左右两边的对应的视差匹配代价c1和c2也记录下来,用三个匹配代价对应的点做一元二次曲线拟合,计算拟合曲线的极值点横坐标,即可得到亚像素级的视差值,从而达到提升视差精度的目的.
图6 曲线拟合示意图
初始视差图还存在一些噪声点和条纹现象,本文采用5×5 窗口加权中值滤波处理消除部分误匹配,增加匹配准确度,使图像平滑的同时保持图像边缘的清晰.使用二维元素以窗口内像素点的灰度值为横坐标、特征信息(强度)为纵坐标建立联合直方图,直方图中的元素表示在某一灰度值、某一特征值时的像素点个数,根据特征中像素点与中心点的亲和度将其与权值关联,关联函数采用高斯函数,统计窗口内任意灰度值的权值和(即同一灰度值时直方图中所有元素与其所对应的特征信息权值乘积和).对窗口内所有灰度值的总权值进行累加求和,在总和一半对应的像素灰度值就是加权中值滤波的中值结果.
双目视觉立体匹配由于角度和匹配问题生成视差图时会产生遮挡和空洞现象,对此,使用邻域视差估计算法填充空洞和遮挡区域.遮挡区域一般接近背景部分,寻找遮挡区域点在其四邻域方向上值不为零且距离最近的像素点,比较并记录此类像素内的最小值以代替中心被遮挡点和空洞点的像素,使视差图变得稠密充实.
由图7 放大区域(a)(b)(c)可以看出,经过本文的亚像素增强和加权中值滤波处理后,视差连续区域过渡变得平滑渐变,消除了噪声条纹及由视差精度不足产生的分层现象,满足了视差的精度要求.通过邻域视差估计值法填补了图像中遮挡区域和空洞点,图像更加准确可观.
图7 视差图精细化处理结果对比
4 实验结果与分析
4.1 数据集和实验设备
本文实验在Windows 10 操作系统,Intel(R)Core(TM)i5-5200U,主频2.20 GHz,内存4 GB,64 位操作系统的计算机平台上进行,开发软件为Visual Studio 2013 与Opencv 2.4.9.采用Middlebury 测试官方平台的图像集Venus,Bull,Teddy,Cones,Sawtooth 进行实验,依据标准视差计算错误匹配像素百分比(判定阈值取1)进行客观评定.实验中使用归一化互相关(Normalized Cross-Correlation,NCC)系数匹配算法[17]、局部块匹配算法[18](Block Matching,BM)、半全局块匹配算法[19](Semi-Global Block Matching,SGBM)、动态规划(Dynamic Programming,DP)全局匹配算法[20]这4 个最为常用的算法进行主观与客观对比.
4.2 实验结果与分析
从图8~10 和图11 的结果图像可以发现,其他4 种立体匹配算法在边缘细节上的匹配效果较差,同时产生较多的噪声点和空洞.NCC和DP算法精度存在较大缺陷,出现大量的条纹区域与大面积纹理错误,BM和SGBM 算法的深度不连续区域匹配效果不理想.本文提出的算法全面考虑了深度不连续区域的准确度提升与整体精度的优化,从图中可以看出,本文算法获取的视差结果更好,在立体匹配时能保证边缘的细节纹理和连续区域的平滑性,去除了噪声、条纹和遮挡区域,提升了视差图的精度.
图8 Venus图像对实验结果
图9 Bull图像对实验结果
图10 Cones图像对实验结果
图11 Teddy图像对实验结果
表1 是对4 组实验图像的特征检测和匹配的结果.从数据可以发现,经过线性对比度展宽处理后的图像提取FAST 特征点更加全面,通过RANSAC 算法剔除错误匹配,最终得到准确的匹配点对.
表1 特征检测与匹配结果
NCC,BM,SGBM,DP 算法与本文算法的错误匹配百分比由表2 表示.对比表2 数据可见,本文算法得到实验图像的错误匹配率相比于其余算法更低,在匹配准确性上有大幅提升,匹配效果明显优于对比算法的结果.
表2 其他算法与本文算法实验图像结果对比
图12中对Sawtooth图像对中的右图增加了50 cd/m2亮度,改变了左右图像的亮度差异,不同亮度的左右图像在本文算法下依旧可以进行匹配并得到视差,从结果来看视差图保持了较好的质量,图像清晰稠密且没有出现区域错误匹配的现象.
图12 Sawtooth图像对改变亮度差异实验结果
表3是改变Sawtooth右图的亮度,分别增加20 cd/m2,30 cd/m2,40 cd/m2,50 cd/m2后本文算法得到的视差计算结果与原图正确匹配率的比较.从数据可以发现,改变亮度差异对视差结果造成影响很微弱,说明本文算法对光照差异的影响具有较强的鲁棒性.
表3 改变右图亮度的实验结果
同时,算法的时间复杂度经改进后大大降低.特征点在检测前优先判断候选点四邻域方向的圆周点,提高检测速度;采用改进的区域生长算法进行视差稠密化,降低匹配复杂度;又根据极线约束将匹配搜索范围由二维八个点减少到同一极线上的三个点,降低搜索的复杂度;采用归一化互相关系数函数计算匹配代价,利用积分图简化大量重复求取匹配窗口灰度值均值的过程,减少计算的复杂度.采用Middlebury 图像进行时间复杂度对比分析,未改进前算法平均耗时7.797 s,本文算法改进后的平均耗时为3.109 s,可以看出,经过改进的特征立体匹配算法的时间复杂度得到大幅降低,平均耗时缩短了60.1%,证明本文算法在复杂度和耗时上都得到显著改进.
5 结论
本文提出改进的双目特征立体匹配算法,使用少量的匹配点对即可获得稠密视差,有效地解决了特征匹配只能得到稀疏视差图的缺陷,利用多种约束条件和双向匹配策略,提升整体匹配的准确性,增强了弱纹理区和深度不连续处的匹配效果,利用积分图简化计算从而减少冗余过程,算法复杂度大幅度降低,在立体匹配的同时进行精细化后处理提升了视差精度.通过实验对比发现,本文算法的准确性高于其他几种算法,在图像边缘匹配上更加准确、真实,有效地去除了因精度不足产生的噪声、细纹与阶梯现象,增加了视差信息的平滑性.实验显示,本文算法具有较强的抗干扰能力,在一定程度抑制了光亮差异与噪声影响.当前仅对Middlebury 测试平台图像进行了立体匹配实验,下一步将在更多平台以更广阔视野进行尝试,使算法的适用性大大提升,在算法的复杂度上进一步优化提速.