陈天婷 李庆
(1.中国科学院大学,北京 100049;2.中国科学院微电子研究所,北京 100029)
主题词:自主泊车 环视系统 停车位检测 直线段检测算法 线段匹配
在自动泊车系统中,停车位的检测与跟踪是泊车路径规划的基础。停车位检测技术大致分为2类:一类采用超声波传感器[1]、激光扫描仪[2]、立体相机[3]、短程雷达[4]、结构光[5]等,这类方法要求目标停车位前、后均停有障碍物车辆,局限性较大;另一类通过识别车位图像特征确定停车位,此方法应用于泊车的低速场景,可以通过多帧检测细化识别结果,是目前停车位检测技术的发展趋势。
在识别车位线图像特征的方法中:王旭东等人[6]基于Radon变换[7]提取车位线,但是该方法对车位线的宽度很敏感;朱旺旺等人[8]结合泊车工况的先验知识,压缩了Radon 变换参数范围并降低了Radon 矩阵的维度,从而提高了计算效率;K.Hamada[9]使用Hough 变换[10]提取线段,并利用一些几何约束推断出停车位,但是在树影等干扰环境下算法容易失效;周培义[11]引入金字塔分层思想,提取金字塔高层图像中车位线骨架,再从中提取出车位线及车位角点。在识别车位角图像特征的方法中:余卓
本文算法基于汽车环视系统,由4个车载鱼眼摄像头获取实时图像,经去畸变、逆透视变换和图像拼接等操作得到环视鸟瞰图,如图1a所示,图像预处理主要包括选取感兴趣区域(Region of Interest,ROI)图像、灰度化、形态学梯度、高斯滤波,结果如图1b~图1e所示。
图1 图像预处理
汽车在停车场行驶过程中,停车位通常位于车身平等人[12]设计了一种融合车辆底盘数据和环视相机数据的库位跟踪算法,可以在泊车过程中实时跟踪车位角点;Zong[13]从直线段检测(Line Segment Detector,LSD)算法检测到的线段中筛选出构成“L”型车位角的线段集合,然后根据相邻车位角构成停车位,但在筛选由线段集合构成的车位角时容易出现漏检;Li等人[14]结合停车位的几何特征提取出停车位的平行线段组,然后使用基于Haar特征和局部二值模式(Local Binary Pattern,LBP)特征的AdaBoost分类器进行车位角检测,获得车位导轨线,从而确定停车位;张林等人提出基于学习的停车位检测(Parking-Slot Detection based on Learning,PSDL)算法[15],应用4个分类器检测车位角,然后根据几何规则组合相同模式的车位角,利用6种高斯线模板推断出停车位的平行标线,从而确定有效的停车位,但是该方法在有障碍物或阴影环境下高斯线模板易失效,且每个车位角分类器需要检测的角度范围为90°,使检测精度有所损失。
针对以上问题,本文提出一种融合车位线特征和车位角特征的停车位检测方法,利用相邻帧之间的直线段匹配实现车位导轨线的跟踪,利用“T”或“L”型车位角特征辅助确定库位角点,最后对不同停车场景及天气条件下的检测效果进行分析。左、右两侧,因此从输入的环视图像中选取ROI 代替整个图像进行检测,不仅能够加快检测速度,还能减少干扰,提高算法精度。在停车位场景中,车位线的灰度值相对偏高,使用形态学梯度算子加强并保留车位线的边缘,从而去除图像中灰度变化不明显或偏暗的区域。最后,为了去除噪点,利用高斯滤波进行平滑处理。
本文使用LSD 算法[16]作为直线段提取方法。LSD算法能在线性时间内得到亚像素级准确度的直线段,运行速度比霍夫线变换快,而且可以控制误检数量。其检测流程主要分为3 个部分,即根据梯度产生线段支持域、构造近似矩形和控制误检数过滤错误线段。
将LSD算法作用于经过预处理操作的停车位图像,并从直线段检测结果中回归出如图2 所示的车位导轨线,导轨线和与之垂直的平行标线在相交处构成了“L”型或“T”型的车位角。本文算法通过导轨线确定车位角检测的感兴趣区域,避免对整幅图像进行遍历检测。
图2 停车位导轨线和车位角示意
车位导轨线提取结果如图3所示,其具体流程为:
a.使用LSD算法检测直线段,剔除长度小于设定阈值的短线段,结果如图3a所示。
b.将角度区间(-90°,90°)均匀设置为18 个小区间,可认为10°范围内线段方向基本一致。每条线段按角度分类到各小区间,合并相互垂直的角度区间,保留线段数量最多的合并区间W内的线段,如图3b所示。
c.根据汽车行驶中与停车位的相对方位,选择保留W中角度绝对值较大的区间内的线段,如图3c所示。
d.利用线段近似平行的特点,本文设计了动态K-Means 算法,筛选出用于回归车位导轨线的线段集合,如图3d所示。其中,类别数k初始值设为1,并在线段聚类过程中动态增加。动态K-Means算法伪代码为:
在计算dij时,设fi的两端点坐标分别为(xi1,yi1)和(xi2,yi2),cj的某一端点坐标为(xj,yj),利用向量叉乘的公式a×b=|a||b|sinθ,并且定义向量ai=(xi2-xi1,yi2-yi1)、bj=(xj-xi1,yj-yi1),则dij为:
式中,θ、θd分别为向量a与b的夹角和向量ai与bj的夹角。
e.以线段长度作为权重,计算导轨线的斜率和截距的回归结果,如图3e所示。
图3 提取车位导轨线
本文使用线段条带描述子(Line Band Discriptor,LBD)[17]作为直线段的描述符,基于该描述符可以对2幅图中的线段特征进行匹配,计算出单应变换矩阵,完成导轨线的跟踪,具体算法流程如图4所示。LBD算法利用线段构成线段支持区域(Line Support Region,LSR),并引入全局和局部的高斯权重系数统计区域中每行的梯度直方图,将其串联成LBD 条带描述符。相比于均值-标准差线段描述符(Mean-Standard deviation Line Descriptor,MSLD),LBD 描述符除了具有旋转、光照不变性等优点,还具有更优的匹配效果。
图4 线匹配算法流程
在匹配过程中,依据最近邻距离比准则衡量LBD描述子特征向量间的相似性,筛选出初始匹配结果,并对其中出现“一配多”和“多配一”的情况进行检查,得到更加可靠的匹配结果。
给定参考图像和目标图像的M对线段匹配结果,其中分别表示相匹配线段的中点的齐次坐标,满足关系:
式中,H为3×3的单应变换矩阵,有8个自由度。
通过直接线性变换(Direct Linear Transform,DLT),将式(2)转换成Ajh=0的形式,其中系数矩阵Aj为:
式中,h为H按列排列的向量形式。
采用最小二乘法估计单应变换矩阵H:
式(4)的约束条件为‖h‖2=1。通过参考图像中导轨线和计算得到的单应变换矩阵H,可获得目标图像中导轨线位置,实现导轨线跟踪,缩短算法处理时间。
提取车位导轨线后,可通过导轨线上的车位角进一步确定停车位位置。本文训练了1 个正方向车位角分类器,对导轨线上的车位角进行检测。选取导轨线邻近区域作为待检测ROI,以减少滑窗检测时间和误检率。离线训练分类器和在线检测车位角的算法流程如图5所示。本文选取6 103张正样本与40 049张负样本进行训练,样本分辨率均为64×64。其中,正样本截取自正停车位的“T”型或“L”型车位角,负样本来自停车位背景。
图5 训练分类器和检测车位角的算法流程
基于对正、负样本的分析和方向梯度直方图(Histogram of Oriented Gradient,HOG)在提取边缘和梯度特征时能很好地描述局部形状的特点,以及其对几何和光学变化也具有很好的不变性,本文选择提取HOG特征作为描述子。同时,为保证速度和简洁性,使用线性支持向量机(Support Vector Machine,SVM)作为分类器。
在车位角检测阶段,首先依据导轨线斜率对环视图进行仿射变换,设环视图的中心(cx,cy)为旋转中心点,待旋转的角度记作θr(以逆时针为正),定义α=cosθr,β=sinθr,计算映射矩阵R为:
然后,在导轨线区域使用正方向车位角检测分类器,以及采用多尺度滑动窗口策略,进行“T”型或“L”型车位角检测,降低漏检率的同时,也导致了一个目标被多个窗口标定。为消除冗余候选框,结合停车位几何特征对非极大值抑制算法(Non-Maximum Suppression,NMS)进行了改进,以对大量候选框进行矩形融合,保留置信度最大的窗口,如图6 所示。最后,利用R的逆矩阵将检测的车位角逆变换到环视图上对应位置,由导轨线和相邻车位角共同确定停车位的位置。
通过线特征匹配得到的单应矩阵除用于对车位导轨线进行跟踪外,还可以获得参考帧车位角在目标帧图像中的位置,从而减小目标帧车位角的漏检率。
图6 车位角检测结果
实车试验采用荣威汽车,如图7所示。系统硬件包括4个鱼眼摄像头、1个视频采集卡和1台计算机(英特尔酷睿i7-7700K@3.0 GHz),在Visual Studio 2015 编程环境下,使用OpenCV 3.3.0函数库进行算法开发。
图7 实车试验平台
为评估算法性能,采用精确率(Precision)和召回率(Recall)作为试验结果精度的评估指标,相关定义如下:
式中,P为精确率;R为召回率;TP为分类器检测出的停车位数量;FP为被分类器误检为停车位的数量;FN为未被分类器检测出的停车位数量。
在试验中,每个停车位由车位导轨线上的2个相邻车位角p1,p2表示;停车位的标签值表示为;停车位的检测值表示为。
精确率和召回率中相关变量的定义如下:
b.如果Pd没有对应的停车位标签值,则Pd为假正类(False Positive);
c.如果Pl没有匹配的检测结果,则Pl为假负类(False Negative)。
本文算法模型结合了车位线和车位角特征,为验证本文算法的有效性和先进性,与其他停车位检测方法进行对比试验,其中王旭东[6]提出的检测方法基于车位线特征,张林提出的PSDL[15]算法主要基于车位角特征,从采集的视频图像中选取500张环视图进行算法测试,每种算法的精确率和召回率如表1所示。
表1 停车位检测方法的性能对比
由表1可以看出,文献[6]方法在评价指标上平均检测时间较短,但召回率较低,即存在着比较严重的漏检问题。在泊车实际场景中,树影、邻车车身及其他障碍物等都有可能使停车位标志线被部分遮挡,而且经过逆透视变换和拼接得到的环视图本身的图像质量也存在一定程度下降,检测到完整的停车框具有难度,因此仅基于车位线特征的方法难以适应现实中复杂的停车场环境。文献[15]方法在精确率和召回率指标上均高于前者,原因在于车位角在现实中不易被覆盖,采用机器学习算法提取的车位角特征比线特征更稳定。本文方法结合了车位线和车位角特征,召回率进一步提升。对比文献[15],本文利用提取或跟踪到的车位导轨线划分出车位角的待检测感兴趣区域,无需对整幅图像进行遍历检测,因此缩短了平均检测时间,且训练的正方向车位角分类器在检测过程中需要处理的角度范围较小,在一定程度上提高了算法精度。
为测试本文算法在不同天气、光照等条件下的性能,使用文献[18]提供的部分测试集,与文献[15]的PSDL算法进行进一步对比分析。室内、晴天、雨天、夜晚、阴影5种场景下停车位识别结果对比如图8所示,不同环境下算法性能对比如表2所示。
图8 5种场景下停车位识别结果对比
表2 不同环境下算法性能对比 %
结合图8和表2可知,本文算法在5种场景下的召回率均高于PSDL算法,雨天、夜晚和阴影环境下的精确度略高于PSDL算法,跟踪算法的加入使车位角在被短暂遮挡和光照影响的情况下仍能被检测出。此外,本文算法在实现过程中,注重去除背景干扰,如进行高斯滤波预处理、过滤LSD算法提取到的短线段、限定车位角的检测区域等操作,均有效提高了算法在环境变化中的适应性。
当目标与背景颜色过于相近或被遮挡时,会出现误检情况。图9展示了2种误识别结果。其中,图9a漏检了靠近柱子的车位角,图9b对导轨线提取失败,导致车位角检测错误。
图9 停车位错误检测结果
通过总结分析,出现误识别的主要原因有:一是受室内停车场中柱子的干扰,靠近柱子的车位角置信度较低,易漏检,造成停车位识别失败;二是当车位线严重磨损或与背景颜色相近时,未能准确提取出导轨线,导致车位角检测失败;三是在环视图拼接时未进行光度补偿,当车位角出现在拼接缝处时,置信度低,较难检测。在后续工作中将有针对性地增加此类训练集样本,以解决上述问题。
本文提出了一种基于环视的停车位检测与跟踪方法,利用车位线和车位角特征确定停车位。该方法结合SVM算法和HOG特征对正、负样本进行训练,得到车位角检测分类器,并通过提取导轨线确定车位角待检测感兴趣区域,缩短了检测时间,提高了检测准确率。通过相邻帧线段匹配跟踪导轨线和车位角,能抵抗遮挡和光照变化的干扰,增强算法适应性。试验结果表明,该算法可准确提取车位导轨线并识别停车位,与其他停车位检测算法相比,该算法漏检率更低,在多种天气条件下具有更好的鲁棒性,且能准确识别大部分停车位,可为自动泊车后续过程提供准确的环境信息。