黄伟杰,张 希,赵柏暄,朱旺旺
(上海交通大学 机械与动力工程学院,上海 200240)
随着社会经济的发展和人民生活水平的提高,人们对生活质量提出更高的要求,汽车作为一种出行便捷的交通方式,保有量不断增加.而停车设施由于成本和空间的限制,增长率受限,停车位稀缺,停车用户花费大量时间寻找车位,导致停车时间和成本增加,还恶化了交通拥堵问题[1].如果能够缩短驾驶员在寻找车位上花费的精力,无疑是十分友好的.通过人工智能和通讯技术结合,提高停车场的智能化管理水平,有利于缩短空闲车位寻找时间,提升停车场交通效率[2,3].现有的智能停车场车位分类系统主要包括了基于磁阻传感器和基于图像两种[4].基于磁阻传感器的方案需要部署大量的传感器单元以覆盖停车场,一般一个传感器单元负责检测一个车位,导致安装繁琐,成本高昂.传统停车场管理中,地磁系统和单一的手持终端占比超过70%,智能化管理水平较低[5].基于图像的车位检测算法中,由于相机的视野覆盖范围广,几个相机就可以覆盖整个的停车场.加上为了安全的考虑,大多停车场已经预装了监控摄像机,直接使用预装的监控相机对停车场中的车位进行检测,充分的利用已有的设备,不会带来成本的增加,无疑是十分方便的.
目前,国内外的很多学者都对图像检测的车位检测技术展开了研究.其中,江浩斌等人[6]利用鱼眼相机对周围的车位角标识线进行识别,通过车位角位置还原出车位位置,但是车位角所占的区域较小,特征容易受到破坏.王春香等人[7]使用4 个鱼眼相机实现鸟瞰视觉系统,对鱼眼相机拼接成的全向鸟瞰图使用Radon 直线检测,检测出的直线相交确定出车位角.方法缺少先验的信息,直线的局部缺失都会导致算法失效.Chen 等人[8]使用快速角点检测算法提取车位的特征角点,对图像进行预处理后根据检测到角点的大小使用RANSAC 算法评估角点的可信度,方法仅适用于车位角特征良好的场景.Harahap等人[9]通过对车位粉刷字符串,通过文本检测器对字符串进行识别来确定车位,算法需要耗费大量的人力进行车位部署,移植性较差.Sairam 等人[10]使用CNN 模型,通过对车位进行像素级的分割,从而在图像中直接将车位检测出来,实际上大部分的车位像素特征和一般地面相近,直接使用像素特征鲁棒性较差.
本文通过对停车场的车位进行检测,实时地判断出每个车位的状态,提高停车场的交通效率.以停车场安装摄像头采集的监控视频流数据为输入,提取监控视频中的图像实时地对停车场中车位进行识别,并区分出是否为可泊车车位.首先是进行图像的预处理,获取规则化的图像并且提取出图像的边缘;接着是提取出表征车位的车位线,对于非车位线部分进行滤除;其次是根据检测出的车位线构建出车位编号和车位位置映射关系的车位表;然后是根据车位表裁剪出车位图像扩充车位分类器模型数据集;最后是使用分类模型对图像中的车位状态进行判断.
真实工况中,由于光照分布不均匀和光照强度变化,相机采集的数据往往会伴随着许多的噪声.为了提高算法的鲁棒性,在车位检测之前必须对图像进行预处理,消除环境带来的随机噪声,获取消噪后规则化的图像.
车位检测与分类的使用的数据是露天车场中高清摄像机拍摄的图像进行预处理后得到的.相机的安装位置允许和停车场有一定的角度,但是要求能够拍到完整的停车场,在停车场改造后或者首次采集图像的时候要求车位线没有受到物体的遮挡.
本文中使用的相机为TP-LINK500 网络高清相机.表1中给出相机的相关参数.
表1 相机参数
由于相机安装空间的限制,获取的停车场图像与车位线之间往往会存在夹角.一方面,训练车位分类模型的时候,为了提高算法的泛化能力,数据集需要包括不同条件下的停车场数据,规则化的图像方便对原有的数据集进行增量式的扩充,提高数据集的丰富程度.另一方面,规则化后的图像更有利于后端处理的准确性,提高算法鲁棒性.
在图像坐标系下坐标和世界坐标系下的坐标的转换关系可以表示为:
其中,[u,v]表示像素坐标,z表示坐标点在相机坐标系下的深度,K表示相机的内参矩阵,T表示从世界坐标系变换到相机坐标系下的变换矩阵(包括旋转和平移的部分),[xw,yw,zw]表示坐标点在世界坐标系下的坐标.
逆透视化是对停车场做平面假设,假定停车场在世界坐标系下为一个平面.将世界坐标系原点设定在地面上,以向上为z轴可以看作zw=0,则原始的图像坐标和逆透视化后的图像坐标与世界坐标之间的简化对应关系分别为:
式中给出了原始图像和逆透视化后图像对应的变换关系,两者的变换关系记为单应性矩阵(homegraphy)[11].框选出车场4 个角点,计算出对应的单应矩阵,对图像进行逆透视变换,调节图像角度,将视图转为正鸟瞰图.图1为原始视图,图2给出逆透视化后的效果.
图1 原始图像
图2 逆透视化后结果
真实环境难免会存在光照分布不均匀和光照强度变化,这些都会影响到图像检测的准确性,给后续检测带来不可预估的后果[12].加上停车场中与车位线颜色接近的白色车辆也会对后续的检测带来干扰.
顶帽变换表示为原图像与原图像开操作的差,可以凸显出暗背景下的亮对象,删除大部分的非均匀背景[13],可以缓解光照不均匀和白色车辆的干扰.
其中,f表示原图像灰度图,f·b表示原图像的开操作.
边缘检测是从图像中提取有用结构信息的一种技术,可以去除图像中的干扰信息,提高检测的效率.
图像的获取过程中不可避免地会引入许多的噪声,对检测产生干扰.在边缘检测前进行高斯滤波,可以降低灰度的尖锐变化,抑制高斯分布的噪声.高斯滤波表达式如下:
其中,Hij表示坐标权重值,x,y表示坐标,σ2表示的是滤波器方差.
Canny 边缘检测是近些年来应用最为广泛的边缘检测算法之一[13].Canny 边缘检测的标准是尽可能低的错误率检测边缘,尽可能准确的捕捉图像尽可能多的边缘.
Canny 边缘检测[14]中梯度的计算离散为图像中像素横轴和纵轴方向的差分值,得到图像中每个像素的差分值后可计算出图像的梯度G和方向θ:
其中,Du(u,v)表示像素横轴方向的差分值,Dv(u,v)表示像素纵轴方向的差分值.
表征车位包括车位角点和车位线.车位识别中包括基于特征角点检测和特征直线检测两种方式.基于特征直线检测的检测算法需要在保证召回率的基础上提高检测的准确率.一方面需要检测出所有的车位直线,保证召回率,另一方面,需要尽量地滤除掉非车位线的干扰直线.
高召回率、稳定的直线检测算法是车位识别和检测的关键.高召回率的直线检测保证车位线检测的完整性,提高车位检测的自动化程度.目前最广泛使用的直线检测方法是霍夫直线检测算法,但是霍夫直线检测时间复杂度和空间复杂度较高,并且误检率较高,直接使用霍夫直线检测的结果召回率低,往往需要大量的人工操作对原有的车位进行补充,自动化程度较低.LSD 直线检测能够在线性的时间内得到亚像素级别的精度检测效果,比较完整的对图像中的车位线进行检测.
图像中的直线检测就是寻找出图像中变化比较大的像素,LSD 直线检测通过检测图像中局部直的轮廓,进行直线分割,从而检测出直线[15].
本文对比了霍夫直线检测和LSD 直线检测的结果.从结果上看,LSD 直线检测的召回率远高于霍夫直线检测.表2中给出了霍夫直线检测与LSD 直线检测的召回率.
表2 直线检测召回率对比
LSD 直线检测召回率极高,局部的小直线也会被检测出来,故检测后需要滤除掉不符合要求的直线,包括:(1)角度异常的直线;(2)长度异常的直线.由于车位线存在宽度,同一车位线在直线检测过程中会检测出两条直线,需要对车位线做合并的操作,如果两条直线的距离小于阈值,将两条直线合并成一条直线.
检测好的直线可以用于车位的检测.每个车位包括4 个角点,车位检测时在直线检测的基础上对车位进行编号,车位表中保存车位编号以及对应的角点像素坐标.
真实环境中仅依靠直线检测将所有的车道线都完整的检测出来显然是困难的.本文将车位线的检测建模成贝叶斯滤波问题.我们假设相连的车位会形成一个矩形区域(rectangle box),且直线检测后的车位线有足够的信息来描述该矩形区域.根据先验条件将问题从仅对车位线位置进行估计转为同时对车位线位置和整列车位形成的矩形区域进行估计.增加车位线位置和车位矩形区域之间的约束关系.
其中,x表示估计的车位线的位置,y表示估计的每一列的车位矩形区域,z表示的是观测的数据,这里表示的相机数据,η表示观测数据和仅使用直线检测车位线表示矩形区域的概率比值.
通过直线检测和直线滤除之后可以过滤掉大量的干扰直线,为了获得效果更加良好的车位线,需要对感兴趣区域(矩形区域)进行确定.我们将车位矩形位置的确定分为确定内部点和利用内部点确定矩形边界两步.
(1)确定内部点
过滤掉干扰直线后的直线为观测直线.如果车位矩形区域是存在的,则观测直线的信息应是能将车位矩形确定出来.矩形中的点包含了矩形边上的点和矩形中的点.算法1 给出确定矩形内部点的具体算法.
算法1.搜索停车区域内部点输入:观测直线集合.输出:停车位矩形区域的内部点.1.沿着横轴平行方向画探测直线.2.观测直线有足够交点的为感兴趣直线,感兴趣直线与探测直线交点为候选点.3.从候选点沿纵轴方向画过滤直线.4.过滤掉和观测直线交点过少的候选点.5.剩下和观测直线有足够交点的即为矩形内部点.
(2)矩形边界确定
确定内部点后,以这些点为种子点,根据这些种子点进行Box 边界的确定.算法2 给出找到矩形边界的具体算法.
算法2.车位矩形区域的确定输入:观测直线集合,矩形内部种子点.输出:所有停车位矩形区域的边界.1.遍历种子点,以种子点为初始内部点,和左右边界的交点为初始外部点.2.将内部点和外部点不断二分,直到找到离种子点最远的内部点为Box 左右边界点.3.同理找到离种子点最近的内部点作为Box 上下边界点.4.确定好边界点之后,按照边界点框选出该种子点对应的Box.5.对Box 中的其余种子点框选出对应的Box,对同个框内的Box 求并,边界内种子点不再使面积增加后确定出Box,标记Box 内种子点为遍历过的种子点.6.对未遍历过的种子点继续按照以上步骤,确定所有的车位矩形区域.
框选好感兴趣区域作为车位检测的限定范围,车位线与限定范围需要做对齐操作,包括:(1)延伸限定范围内直线到ROI 边缘;(2) 去掉超过ROI 边缘部分.经过对齐后最终确定出车位.图3中表示的是提取感兴趣区域的图像,白色区域为提取的感兴趣区域,最终的车位检测结果如图4所示.
图3 提取ROI 车位区域和检测出的直线
图4 车位检测结果
表征车位的方式有车位线和角点两种方式.两种表征方式对车位描述的信息都是完整的,可以进行转换.角点表征车位的方式给后续的图像切片和车位位置的记录带来方便,所以本文采用角点表征的车位识别方式.
车位的角点包括:(1)横向车位线与纵向车位线之间的交点;(2) 横向直线和ROI 矩形区域边缘的交点;(3)纵向直线和ROI 矩形区域边缘的交点.对车位角点根据像素坐标进行排序,每个感兴趣矩形区域中包括三排的车位角点,每两排车位角点组成一排的车位像素角点坐标.按照车位编号和车位角点的映射关系,构建车位表.算法3 给出车位表构建的具体算法.
算法3.车位表构建输入:停车位矩形区域,车位角点.输出:每个车位对应的角点和编号.1.根据矩形区域将车位角点拆分成多个的车位角点集合.2.对矩形区域中的点根据纵向坐标拆分多个点列.3.在每个点集中,对于每一点列中的点,得到同个点列后面最近的一个点以及相邻点列的两个点,组成车位.
车位按照被占用空间的大小分为3 类:车位空间足以泊车,车位空间不足以泊车,车位泊有他车,如表3.车位表中记录着每个车位的像素角点坐标,一方面,可以裁剪出每个车位的图像进行归一化后作为训练的样本;另一方面,车位表记录车位的位置,使用分类模型对车位进行实时的状态识别.
表3 车位标签
为了提高模型的泛化性和鲁棒性,训练集中要包括不同光照条件,不同停车场下样本.根据停车场中车位表中记录车位的位置,对图像进行裁剪,切片出来的图像作为训练的样本.裁剪出来的车位图像基于车位被占用空间的大小总共分为3 类,第1 类是泊车区域空闲或者泊车区域被邻近车位占用区域过较小,有足够的空间用于泊车;第2 类为车位被邻近车位泊车占用区域过大,剩余车位空间不足以泊车;第3 类为车位上泊有车辆,无法泊车.3 种类型的图像纹理差距较大,能够更加准确的描述车位的类型.
根据光线强度的不同,本文将训练集分为了3 类,一类是仅有白天的数据;一类是仅有夜晚的数据;最后一类是白天夜晚的混合数据.车位的图像因为停车场环境的不同和相机角度的变化都会有所区别,在对数据集进行扩充的时候需要将新的样本进行规则化后加入数据集中.
停车场分类的目的主要是为了区分出能够泊车的停车位和不能够泊车的车位,因此,第1 类和第2 类的车位合并成一种不可泊车车位类型,第3 类车位为单独一类可以泊车类型.
支持向量机(support vector machine,SVM)是建立在统计学理论和结构风险最小原理基础上的,能够很好地解决小样本、非线性、高维度和局部最小点等实际问题[16].SVM 学习的基本想法是求解出能够正确划分数据集并且几何间隔最大的最优分离超平面.对于线性可分的数据集来说,几何间隔最大的分离超平面是唯一的.此外,SVM 模型利用空间的核函数取代高维特征空间,方便的解决样本维数过高带来的非线性问题.本文中的数据量较少,和传统神经网络算法相比,使用SVM 模型进行二分类时可以达到理论上的最优解.
如前文所示,车位分类根据车位被占用空间的大小总共分为3 个类别.所以,本文训练了3 个支持向量机分类器分别实现两种类别样本的分类,SVM1 实现空间不足以泊车车位和车位上泊有车位样本的分类,SVM2 实现空间不足以泊车和空间足够泊车样本的分类,SVM3 实现车位泊有他车和有足够泊车空间车位的分类,最终通过对3 个SVM 分类器的分类结果进行投票,确定图像的最终类别.特别的,当3 个分类器将测试样本归类到3 个不同的类别的时,则判定该样本为无效样本,将其剔除出样本集后,重新训练分类模型.本文对比4 种分类器的效果.为进一步的扩充数据,提高模型的泛化性,在模型训练中对图像进行镜像和非对称操作.对于每个数据,模型使用70%作为训练数据,以及使用30%作为验证数据,训练100 次.表4中分别列出了白天数据、夜晚数据以及白天夜晚混和数据3 种数据集下的每种模型检测的平均准确率(%).
表4 不同分类器对比
从最后训练出来的结果来看,最近邻分类器(NearestCentroid)在3 种数据集中的训练结果均较差,所以在车位分类中不选用该分类器.使用随机梯度分类器(SGDClassifier)和使用线性核(linear)的SVM 模型在纯白天的数据和纯夜晚的数据中检测效果良好,但是在混合数据中检测效果较差,说明这种方法对光照比较敏感,不同光线下的检测效果会有差距,鲁棒性较差.多层感知器(MLPClassifier)和使用高斯核(rbf)的SVM 模型,两者都具有较高的准确率,但是综合对比的结果上来看,在不同工况下,使用高斯核函数的SVM 模型检测结果方差小,检测更加的稳定.所以最后选择了带高斯核的SVM 模型进行车位的分类,训练好的模型称为停车场车位检测模型PSCM (the parking spot classification model).
训练好的PSCM 车位检测模型可以用于车场图像中车位的实时分类,输入为摄像头实时采集的监控视频流数据图像和建立好的车位表,输出为每个车位对应的类型.算法4 中给出车位分类的具体算法.
算法4.车位分类算法输入:监控图像,车位表,分类模型.输出:空车位位置,数量.1.根据车位表对图像进行切片,切片图像作为待分类车位图.2.对每个车位图进行分类.根据时序信息进行状态跳转.3.对车位状态结果进行统计,记录车场中空间足以泊车的车位位置和数量.4.进行可视化.
3种类型中,车位空间足以泊车的类型是在提高停车场交通效率中最关注的实时信息.在对车位进行分类的同时,实时地记录下空闲车位的数量和位置.图5、图6表示了从视频中取出并经过逆透视变化后的原始图像以及车位检测和分类算法最终输出的结果.
图5 逆透视变化后的图像
图6 车位分类结果
从视频流数据中逐帧取出停车场图像进行车位分类,每一帧都是离散的图像数据,检测出来的结果具有跳变性.本文采用有限状态机的方式来表示车位状态的跳转.在车位分类中,定义召回率准确检测出来的可泊车车位占实际所有的可泊车车位的比例,准确率表示准确检测出来的可泊车车位占所有检测出来的可泊车车位的比例.在车位检测问题中,召回率较低表示的是将检测的泊车区域较少,影响停车场车位的利用率,而在车位分类中准确率较低表示的是将不能泊车的车位检测成了足以泊车车位,准确率低对于后续的泊车安全性产生影响.所以,在车位的分类问题中,召回率和准确率的权重不一致,准确性对安全直接产生影响,应当给更高的权重.采用有限状态机的方式进行车位状态变化的判断.从不足以泊车状态变成足以泊车状态需要采用计数机制,在连续超过多帧的足以泊车状态才判定该车位变化为足以泊车状态.
本文针对室外的停车场,设计了一种高召回率的车位检测算法以及一种高准确率的车位分类算法.本系统的优点是使用的传感器简单,可以利用原有停车场中的相机,成本低,对安装的要求相对较低,部署方便.在进行车位线检测时,先验使用检测率极高的LSD 直线检测,实现高召回率的车位线检测.将车位形成矩形区域的假设和车位线检测绑定进行优化,实现车位线检测更高的召回率.使用投票机制的SVM 模型,实验验证出分类模型具有极高的分类准确性.系统显著的提高停车场车位使用的效率,缓解停车场停车难的问题,可移植性强.未来将进一步提高系统使用的场景,扩充系统来满足不同场景的使用.