黄孝慈 舒方林 曹文冠
(上海工程技术大学,上海 201620)
主题词:双目视觉 车辆测距 Haar-like特征 特征匹配 平均视差
前方碰撞预警(Forward Collision Warning,FCW)系统的应用可以有效减少交通事故,提高道路通行效率[1]。自车与前车间的距离计算是FCW 系统的核心组成部分,可为后续预警和控制提供依据。目前,距离计算方法主要分为基于主动传感器的方法和基于视觉的方法[2-4]。前者主要使用毫米波雷达和激光雷达等主动传感器,虽然可以准确计算车距,但高成本和目标车辆数据的采集阻碍了其广泛应用;后者通常使用单目视觉和双目视觉,以低成本的优势逐渐成为研究热点。单目视觉通过建立几何模型估计车距,精度低、远距离测量误差大[5-6]。双目视觉通过左、右图像的立体匹配生成目标车辆的视差图,根据三角测量法直接计算车距,因此计算过程更加直观、准确[7-8]。基于双目视觉的车距测量关键在于能否迅速提取车辆特征并实现准确的匹配。目前通常利用车辆的局部特征或全局特征进行车距测量,如车牌、车辆尾灯、车辆尾部标志、加速鲁棒特征(Speeded Up Robust Features,SURF)以及定向二进制描述符(Oriented FAST and Rotated BRIEF,ORB)特征等[9]。Zhang等人[10]根据车牌与车身颜色的差异提取车牌特征,利用车牌中心点坐标实现车辆的测距;Seo等人[11]采用方向梯度直方图特征检测前方车辆,通过提取左、右相机中车辆尾灯中心点特征进行立体匹配,从而计算车距;Hou 等人[12]提取车标作为左、右图像的匹配特征实现车辆测距。上述利用车辆局部特征进行车距测量的3种方法只适用于近距离车距测量,远距离的车辆局部特征难以精准提取,往往造成较大的测距误差。此外,单一特征的匹配极易造成测距误差大幅波动。因此,不少学者使用车辆的全局特征进行车距测量研究:李建[13]、颜佳桂[14]分别通过提取车辆的ORB 与SURF 特征点并利用特征点的平均视差计算车距;张琦等人[15]通过提取车辆的SURF 特征点进行三维重建确定其质心位置,利用质心进行立体匹配计算车距。相较于利用车辆尾部某种显著局部特征的测距方法,基于车辆全局特征匹配的测距方法精度更高、鲁棒性更好。然而,如何快速提取特征并进行精确匹配仍然是其面临的主要问题。
针对上述问题,本文提出一种基于机器学习和改进ORB 算法的双目视觉车辆测距方法,包括车辆检测和特征提取与匹配两个核心部分。首先通过正、负样本集离线训练车辆检测分类器,利用该分类器快速确定车辆在左、右图像中的位置;然后提取车辆ORB特征点进行匹配得到平均视差,根据双目测距模型计算车距。由于传统ORB 算法提取的特征点极易出现数量庞大、聚集扎堆的问题,提出动态阈值法改善特征点提取质量;在特征匹配阶段,使用渐进一致采样(Progressive Sample Consensus,PROSAC)算法减少误匹配来提高视差计算精度,从而提高前车测距精度。方法流程如图1所示。
图1 前车测距总体流程
考虑到自车与前车间距离较小,在双目相机视野内可清楚地观测到前车尾部特征,使用车辆Haar-like 特征与AdaBoost算法训练分类器快速定位前方运动车辆。
Haar-like 特征是一种黑白矩形特征,适用于检测在垂直、水平以及对角方向上有较为显著像素梯度变化的目标[16],与车辆尾部特征相契合。如图2所示,本文通过边缘、中心、线性以及对角线4 类基础Haar 特征构建了能够更加精确描述车辆尾部特征的Haar-like特征。
图2 车辆尾部的Haar-like特征描述
AdaBoost 能通过多次学习将弱分类器提升为强分类器,本文利用该算法训练车辆检测分类器。
3.2.1 弱分类器构造
构造弱分类器的目的是寻找特征的最优分类阈值,保证该分类器对正、负样本分类效果达到最优,其定义为:
式中,x为某个训练样本子窗口;f为对应的特征;λ为方向符号,取值1或-1;θ为分类阈值。
3.2.2 强分类器训练
弱分类器不能满足车辆检测的精度要求,通过AdaBoost 算法训练能够获得检测精度更高的强分类器,步骤如下:
a.构建样本集。假设给定的样本训练集为{(x1,y1),(x2,y2),(x3,y3),…,(xn,yn)},其中,xi(i=1,2,3,…,n)为样本向量,yi(i=1,2,3,…,n)为分类标签,yi=0表示非车辆,yi=1表示车辆;
b.均匀分配样本权重:
式中,N为样本总数。
c.进行T次循环迭代:
训练归一化权重后的样本获得弱分类器ym(x):x→{0,1}(m为分类器编号),则最小分类误差为:
计算该分类器在最后强分类器中的权重αm:
更新所有训练样本的权重:
式中,zm为归一化因子。
d.按权重分配将全部弱分类器进行组合:
则最终的强分类器为:
3.2.3 强分类器级联
相对弱分类器而言,强分类器在检测性能上已经得到了很大提升,但仍然无法满足车辆在实际行驶环境中的检测精度要求。因此,需要将多个强分类器以串联的方式形成高性能的级联分类器。如图3所示,当待检测图像通过级联分类器时,经过每层强分类器的筛选可以剔除大量的非车辆区域,顺利通过每层强分类器后即可得到目标车辆在图像中的准确位置。
图3 级联分类器检测车辆过程
视差计算是双目测距的核心部分,基于尺度不变特征变换(Scale-invariant Feature Transform,SIFT)、SURF和ORB 的特征匹配算法均为局部立体匹配算法,能够快速获得目标的视差。考虑到前方车辆测距的实时性要求,本文选用速度最快的ORB 特征匹配算法计算视差,并对其进行改进来提高测距精度。
双目视觉通过左、右相机获得目标的视差,并根据相似三角形原理计算物体在其坐标系下的距离。如图4所示,在平行双目视觉系统中,假设S为三维空间中的某一点,其在左、右相机成像平面上的投影点分别为Sl和Sr,分别以Ol和Or为原点建立左、右相机坐标系,可得Sl和Sr的横坐标依次为xl、xr,成像视差为d=xl-xr。设D为左、右相机光心距离,c为焦距,由三角形相似原理可推导出点S到左、右相机光心连线的垂直距离Z:
图4 三角测量原理
ORB 算法在特征点检测部分采用FAST(Features from Accelerated Segment Test)检测算法,其寻找特征点的原理如图5所示,即以中心像素点P为圆心,以3个像素单位为半径画圆,将位于圆周上的像素点灰度值大小与中心像素点灰度值大小进行比较,并将它们分为3类:
图5 FAST特征点检测原理
式中,d、s、b分别为3 种对应类别中像素点的数量;IP为中心像素点P的灰度值;IP→k为圆周任一像素点;t为系统设定的阈值。
若d+b>M(通常取M=9),则P点被判定为特征点。此外,算法还使用了一种高效分类策略:首先根据式(9)利用像素点1、5 迅速剔除非特征点,然后检测像素点9和13,若像素点1、5、9、13 中至少有3 个满足|IP→k-IP|>t,则该点为候选点,最后对候选点进行全面测试,根据上述原理判断该点是否为特征点。
经上述分析可知,FAST 算法判断某像素点是否为特征点的依据是该点与其定义域上像素点的灰度差异,因此使得特征点提取效果极易受图像对比度的影响,采用固定的阈值难以获得理想的特征点提取结果。当图像对比度较小时,像素点之间的灰度值差异也会相应减小,甚至小于系统设定的阈值,一些原本是特征点的像素点被判定为非特征点,导致提取的特征点数量大幅减少,出现误排除现象。同理,当图像对比度较大时,像素点之间的灰度值差异也会相应增大,一些原本不是特征点的像素点被判定为特征点,导致提取的特征点数量大幅度增加,出现误提取现象。针对上述问题,受自适应阈值分割思想的启发,本文基于FAST 算法提出一种动态阈值的特征点检测方法。动态阈值即对图像中不同的像素点设置不同的阈值,减小图像对比度变化对特征点提取产生的影响。动态阈值t定义为:
式中,ξ为自适应参数;Imax、Imin分别为中心像素点定义域上灰度值最大和最小的像素点的灰度值;IAVG为除去Imax、Imin后余下14个像素点的灰度均值。
改进后FAST特征点检测算法的主要步骤如下:
a.选取中心像素点P,分别计算像素点1、5、9、13的灰度值IP→1、IP→5、IP→9、IP→13;
b.判断像素点1、5、9、13 的灰度值是否满足|IP→k-IP|>t,假设有任意3 个位置同时满足,则该中心像素点是候选特征点;
c.分别计算像素点2、3、4、6、7、8的灰度值;
d.判断步骤c中6个像素点的灰度值是否全部满足|IP→k-IP|>t,若全部满足,则P是特征点,反之,则不是。
特征点提取后通过匹配即可得到视差。特征点匹配采用汉明距离,并且为了加快匹配速度,使用最近邻(Best-Bin First,BBF)搜索策略代替ORB算法中的线性扫描策略。由于光照、噪声以及相机抖动等的影响,特征点的误匹配难以避免,这将直接降低视差计算的精度,以至于影响测距的精度。故引入PROSAC算法剔除误匹配点,主要过程为:
a.将所有匹配点按照汉明距离进行降序排列;
b.设定内点误差、内点数量阈值和最大迭代次数的初始值;
c.根据随机抽样一致(Random sample consensus,RANSAC)算法抽样策略从数据集中随机抽取数量为q的数据进行模型拟合,由内点误差阈值计算内点数量并判断两者的大小关系,若前者大,则继续迭代,反之,则返回内点数量;
d.如当前迭代次数大于最大迭代次数,则返回内点数最大的拟合模型,反之,跳转至步骤c继续迭代。
图6所示为搭建的试验平台与测试场景,双目相机和笔记本电脑分别用于图像数据的采集和处理,详细参数如表1所示。
图6 试验平台与测试场景
表1 试验设备参数
为确保车辆测距的精度,对所提出的基于Haar-like特征与AdaBoost 算法的车辆检测方法进行试验验证。使用本文创建的正、负样本集对用于车辆检测的分类器进行离线训练,其中正样本集包括17 275张前方车辆图片,负样本集包括8 610张不含车辆信息但与车辆行驶环境密切相关的背景图片,如建筑物、非机动车、路面标线、交通指示牌等。测试样本是利用双目相机在上海市高速公路上采集的3段行车视频,利用该样本和离线训练好的14阶级联分类器进行试验,结果如表2所示。
由表2可知,本文所提出的车辆检测算法在保证平均误检率仅为1.08%的情况下,平均检测率可达95.32%,且平均每帧耗时仅为24.58 ms,可满足FCW 系统车辆检测的精确性和实时性要求。基于上述方法,对图6所示场景中不同距离段的目标车辆进行了测试,结果表明,该方法同样可以快速准确地定位目标车辆,可视化结果如图7所示。
表2 车辆检测结果
图7 不同距离段车辆检测结果
在准确检测到目标车辆后,通过提取车辆的ORB特征点计算平均视差,并根据式(8)计算距离。试验主要通过比较基于传统ORB算法与本文算法测距的精度来验证本文方法的优越性。为了准确计算目标车辆在任意时刻与双目相机的距离,限定目标车辆以30 km/h的速度经过双目相机并始终保持该速度向前行驶,共采集了120 帧连续的图像序列。利用这些图像数据进行了ORB特征点提取与匹配以及测距对比试验。
5.2.1 ORB特征点提取与匹配结果分析
图8展示了传统ORB算法与本文算法特征点提取与匹配的效果,从图8中可以看出:传统ORB算法提取的特征点堆积情况显著,重复提取情况严重,且存在很多误匹配,本文算法有效改善了这一问题,使特征点分布均匀合理,并利用PROSAC算法去除了大量误匹配点。
图8 特征点提取与匹配对比
5.2.2 测距结果分析
分别利用传统ORB算法和本文算法对其中90帧连续图像序列中的行驶车辆进行测距,每12帧抽取1帧进行记录,结果如表3 所示,本文算法测距可视化结果如图9所示,测距误差如图10所示。
表3 传统ORB算法与本文算法测距结果对比
图9 本文算法车辆测距结果
图10 测距误差
由表3 可知:在14 m 距离范围内,本文算法的测距误差在2%以内,传统ORB 算法的最高测距误差可达8%,远高于本文算法;本文算法的处理速度可达32帧/s,略高于传统ORB 算法,满足前车测距的实时性要求。此外,由图10 可知:在不同距离范围内,本文算法均可保持较高的测距精度,尤其当距离小于3 m 时,测量距离接近真实值;而当距离大于1.5 m 时,传统ORB 算法的测距误差明显增大;与传统ORB算法相比,本文算法在不同距离段的测距平均误差明显降低,精度远高于传统ORB算法。
本文基于双目视觉测距模型,提出了一种基于机器学习和改进ORB算法的前车测距方法。通过搭建双目系统试验平台进行了实车测距试验分析,结果表明:在14 m的距离范围内,所提出方法的测距误差在2%以内,与基于传统ORB 特征匹配测距的方法相比,测距平均误差降低了4.11 百分点;该测距方法具有较高的实时性,能够实时有效地为前方碰撞预警系统提供精准的前车距离信息。此外,本文试验验证中所使用的双目相机距离测量范围有限,而且尚未考虑到多车辆以及车辆间相互遮挡情况下的测距,因此复杂场景下的远距离测距将是后续研究的重点。