肖军弼 朱风珍 钱志军 程千才
1(中国石油大学(华东)计算机与通信工程学院 山东 青岛 266580)2(中国石油天然气有限公司规划总院 北京 100089)
在当今的石油零售行业,利用网络实现电子支付[1-2]的新型支付方式引起了各大石油企业的关注,通过车牌付款的方式已悄然走进市场。但由于加油站环境复杂,大多数情况是在加油机两侧分别安装车牌识别摄像头辅助完成车牌付款。这种实现方式的弊端在于摄像头的照射范围较小,拍摄角度较低。当多辆车排队停靠在一台加油机旁加油时,摄像头只能识别出最前面车辆的车牌号,并由于前车的遮挡无法识别后面其他车辆的车牌号,造成后面加油车辆自动扣款失败,因此每一侧的摄像头只能辅助一辆车完成车牌付款。但传统的加油站部署情况是在每台加油机旁地面上标有多个停车位标线(以下简写为“加油位”),可容纳多辆车同时进行加油,而当前车牌支付功能却将原本多辆车同时加油的情况缩短至一辆车,降低了加油效率,在加油高峰期阶段,还加剧车辆排队情况。为解决当前加油站内车牌付款功能中车牌识别摄像头的弊端,需要寻找更合适的车辆信息视频采集角度,从而实现通过摄像头辅助一台加油机周围的多辆车完成车牌付款。
当前加油站针对每台加油机的每把油枪设置了唯一编号,油枪提枪后会向后台服务器发送交易的详细信息,包括油枪编号、提枪时间、加油交易编号等信息。若通过监控摄像头获取到该加油机旁加油车辆的停车数据,包括加油位、停车时间、已停车时间、车牌号等信息,根据油枪编号与车辆所在加油位的对应关系、油枪的提枪时间与车辆的停车时间差值等数据关系,可实现车牌号与对应加油交易的匹配,从而辅助同一台加油机旁的多辆车使用车牌付款功能。因此,在停车数据获取方面,只要能获取到多辆加油车辆的加油位、停车时间、已停车时间、车牌号等停车数据,就可以较容易地提高当前车牌支付功能的加油效率。
本文针对大多数加油站内加油机每侧两个停车位的部署情况,寻找更有效的车牌数据获取方法。不难发现,加油站罩棚顶部的摄像头监控范围更广,可监控一台加油机的多个加油位。若通过加油机前后两端罩棚顶部的两个摄像头分别监控加油机每侧的一个加油位,可实现整体上监控一台加油机左右共四个加油位,从而获取四辆加油车辆的车牌号数据。具体部署情况如图1所示,左边摄像头只需监控加油机左边的两个停车位,右边摄像头监控加油机右边的两个停车位。
图1 加油站部署情况
但正因为罩棚顶部摄像头监控范围更广,监控到的加油机两侧光线强度差别较大,加油机旁还经常出现行人走动以及过往车辆等干扰情况。针对上述情况进行分析,由于当前的数字图像处理领域中,车牌识别技术已较为成熟,大倾斜角度下的车牌号也可识别成功[3],但车辆检测技术易受光照和噪声干扰,加油站罩棚内部与罩棚边界的加油位光照强度不同,经常出现行人走动、过往车辆等噪声,无法准确获取车辆目标。而在停车检测方面,文献[4]通过计算车辆与违停区域的质心距离和违停时间长度综合判断违停车辆,但车辆在行驶过程中会产生距离不变的情况,因此无法检测出车辆的停车时间点。文献[5]通过基于像素时间序列特征的稳态分析法提取停车车辆,文献[6]通过机器学习的分类方法分析车辆的跟踪轨迹,从而检测停车行为。上述两种算法中,分析每个像素点的变化和通过机器学习训练分类器都存在较高的运算量,而加油站中检测停车数据需要保证算法的实时性与准确性,因此必需降低算法的运算复杂度。
故本文通过分析加油站罩棚顶部摄像头获取的视频数据,提出了一种简单有效的停车检测算法。通过改进的背景差分法以及改进的自适应阈值提取算法获取车辆目标,通过提出的停车检测算法获取停车数据。
当前通过视频检测运动目标的算法主要包括光流法[7]、相邻帧差法[8]、 背景差分法[9]等。光流法不易受光照变化的影响,但易受噪声影响,且计算复杂度高,无法满足检测的实时性需求。相邻帧差法主要通过计算相临帧之间的差异获取运动目标,运算原理简单、复杂度低,但检测结果大多存在空洞,导致获取的目标前景不完整[10]。背景差分法相比于上述两种方法来说,具有运算复杂度低、目标检测完整等优点[11-13]。该方法的核心是获取稳定的背景模型,通过计算当前图像与背景图像的差值获取运动目标。因此,为满足系统的实时性,本文选用背景差分法计算加油位背景。
1.1.1 背景差分法
假设(x,y)像素点在第k帧图像中的像素值为Fk(x,y),该点在背景图像中的像素值为Gk(x,y),差值图像为Dk(x,y)。计算公式如下:
Dk(x,y)=|Fk(x,y)-Gk(x,y)|
(1)
将差值图像二值化,获取运动目标,计算公式如下:
(2)
式中:Ok(x,y)是获取到的前景图像,当差值Dk(x,y)大于等于设定的阈值T时视为运动点,将Ok(x,y)赋值1。当差值Dk(x,y)小于设定的阈值T时视为背景点,将Ok(x,y)赋值0。最终得到只有黑色和白色的前景图像,白色区域为运动目标,黑色区域为背景部分。
1.1.2 改进的均值背景建模
在加油站中,加油位的背景较为简单,大多数情况只受光照缓慢变化的影响,因此本文采用均值法进行背景建模。但由于车辆在加油时停车时间较长,使用该算法会将停车车辆误判为背景。除此之外,当有行人走动时,计算出的初始背景中容易混入行人残影。为此,本文针对加油站的特点,在均值背景法的基础上做了改进,解决了车辆混入背景以及行人残影的问题,保证了加油位背景的正常更新。具体计算步骤如下:
1) 选取参考背景图像 首先提取加油位第一帧无车辆图像作为背景,读取一帧图像后,通过背景差分法计算前景图像。根据前景目标面积值判断是否有车辆大面积驶入加油位(若前景图像的目标面积大于阈值T1则表示有车辆大面积驶入)。当无车辆大面积驶入时,将当前帧作为参考背景存储,直到存储的图像帧数达到一定值N后,计算均值背景。
2) 计算均值背景 根据存储的参考背景图像,通过下式计算均值背景。
(3)
式中:Ik(x,y)为(x,y)像素点在第k帧参考背景中的像素值,N为参考背景的帧数,GN(x,y)为计算得出的均值背景在(x,y)像素点的像素值。
3) 去除残影 将均值背景与参考背景的每一帧像素值作差并求平均值,获取残影图像,公式如下:
(4)
式中:SN(x,y)为残影图像在(x,y)像素点的像素值。获取残影图像后,通过下式计算均值背景GN与残影图像SN的差值,获得初始背景BN。
BN(x,y)=|GN(x,y)-SN(x,y)|
(5)
4) 进行背景更新 读取背景图像,通过1.1节的背景差分法计算Ok(x,y),并通过下式更新背景:
(6)
式中:θ是背景更新速度参数,BN(x,y)为更新前的背景,BN+1(x,y)为更新后的背景。由于加油位背景简单、光线变化缓慢,因此通过大量实验测试后,此处θ取经验值0.02。
5) 通过改进的自适应阈值算法提取目标前景 (1) Otsu算法。Otsu算法(最大类间方差法)由Otsu(即大津展之) 于 1978 年提出[14],该算法是一种对图像进行二值化的高效算法,分割效果较好,适用范围广泛。
假设一副灰度图像I的灰度级为L(即灰度范围在[0,L-1]),图像的大小为M×N,ni是灰度级为i的像素点的个数,根据下式求像素点出现的概率Pi:
(7)
根据图像I的灰度级,设分割阈值k∈[0,L-1],通过下式分割前景图像:
(8)
通过下式计算F0和F1的方差:
(9)
(10)
计算出目标与背景之间的类间方差,计算公式如下:
(11)
(12)
通过最佳阈值k分割的前景图像I即为最佳前景图像。
(2) 改进的自适应阈值提取算法。在暗光环境下,当车辆与背景的灰度相近时,通过背景差分算法提取的车辆目标有较多空洞。图2是亮光和暗光环境下提取的车辆目标效果图。
(a) 亮光下的车辆前景(b) 暗光下的车辆前景图2 亮光与暗光环境下的车辆目标
因此,为增强暗光环境下提取出的车辆前景效果,本文将背景差分法与Otsu算法相结合,提出一种自适应阈值提取算法。
首先,读取当前帧,设图像大小为M×N,通过下式计算当前图像的亮度:
(13)
若S大于阈值T2表示该图像为亮光图像,使用背景差分法提取目标前景。若S小于阈值T2表示该图像为暗光图像,通过下式计算放大的差值图像:
D(x,y)=|I(x,y)×t-G(x,y)×t|
(14)
式中:D(x,y)为放大的差值图像。对D(x,y)通过Otsu算法计算最佳分割阈值k并进行图像分割,从而获取较为理想的前景图像。具体算法流程图如图3所示。
图3 自适应阈值提取目标流程图
本文通过分析车辆驶入时的前景变化,判断车辆的停车行为。此方法运算复杂度低,且能有效过滤加油站的各种噪声干扰。
在每个停车位设置两条虚拟检测带,间隔为375像素,每条检测带的高度为10像素,宽度与加油位宽度相等。当一条检测带有车辆通过时,检测带内每一行的像素值都会出现较多的目标点,并且大多连续,如图4和图5所示。
图4 车辆驶入一条检测带
图5 车辆驶入两条检测带
因此,将每个检测带看作有10个元素的一维数组Z,其中,Z[i](i=0,1,…,9)表示第i+1行的状态值。通过下式计算Z的每个元素值:
(15)
式中:Pi是每行检测带中1的个数,T3为判断阈值。当Z的每个元素值都为1,则表示该检测带有车通过,将该检测带的状态值赋值1。按上述方式监控加油位,若两检测带同时检测出有车辆驶入时表示车辆疑似停车。当疑似停车状态持续T4秒后,代表车辆真正停车。
由于不同车辆的车速不完全相同,故不同车辆停车状态持续时间T4不同,因此需要寻找车辆在通过两检测带后到真正停车时所花费的时间规律。首先获取加油位内第一条检测带检测出车辆时的时间Tstart,并获取加油位内第二条检测带检测出车辆时的时间Tend。经实验测试,由于车辆停车过程中车速越来越慢,所测得的Tend-Tstart的值与T4相等,因此,此处的停车判断条件为T4≥Tend-Tstart,当满足此条件时,表示车辆真正停车。
当检测到车辆停车后,获取当前时间作为车辆的停车时间点,调用车牌识别API识别出加油位的车牌号,并记录车辆已停车时间。
本文的测试环境为Xeon(R) CPU E3-1226 3.30 GHz,RAM 8 GB,使用Python结合OpenCV3.4.1软件平台。通过实时读取加油站高清监控摄像头的视频流,测试车辆的停车检测效果。在通过背景差分法计算前景图像时,T=30。在进行均值背景建模时,判断车辆目标的阈值T1=60 000,参考背景的帧数N=100。在自适应阈值提取前景时,判断图像亮度的阈值T2=30,放大差值图像的参数t=2。在停车判别时,T3=150。本文的整个算法流程如图6所示。
图6 本文算法流程
加油机两侧的监控摄像头分别独立获取加油车辆数据,对监控范围内的图像处理程序完全相同。为验证本文研究方案的具体效果,只选取加油机上方罩棚顶部的一个摄像头进行实验测试与分析。在测试的加油站中,由于加油员的人工干预,加油车辆几乎全部停在前后两加油位中间进行加油。因此,本文将加油机一侧的两加油位合并,作为一个加油位进行检测,共检测一台加油机两侧的四个停车位。摄像头监控区域如图7所示。为减少不必要的计算,只截取加油位图像进行检测。
图7 加油站监控区域
通过本文改进的均值背景建模算法计算的初始背景模型与传统的均值算法得出的背景模型比较如图8所示,其中,(a)与(b)是行人走动时提取的背景,(c)与(d)是过往车辆经过时提取的背景。可以看出通过本文的改进算法能较好地去除背景中的残影。
(a) 传统均值法 (b) 本文改进算法
(c) 传统均值法 (d) 本文改进算法图8 背景更新
在车辆检测模块,通过图9可以看出本文改进的自适应阈值提取算法与其他两种算法相比,能有效提取暗光环境下的车辆运动目标。
(a) 当前帧(b) 简单阈值
(c) Otsu算法 (d) 本文算法图9 车辆检测
在停车检测模块,通过图10和图11可以看出,本文停车检测算法能准确获取车辆的停车时间。值得注意的是,在图10中,车辆先驶入加油位前端,后调整到中间区域,停车检测算法依然能准确检测出停车时间点。
(a) 无车(b) 车辆驶入未停车
(c) 检测到停车状态 (d) 停车加油中图10 左加油位停车检测
(a) 无车(b) 车辆驶入未停车
(c) 检测到停车状态 (d) 停车加油中图11 右加油位停车检测
对该加油站内一台加油机左右两侧的4个加油位进行长时间的停车检测实验,总共检测车辆数235辆,除过往车辆外,实际停车数228辆,本文系统检测出的停车数225辆,检测出的停车时间点准确的车辆数223辆,其余2辆车的停车时间点与实际停车时间点左右相差1 s,完整的检测数据如表1所示。
表1 测试结果统计表
通过实验结果可以看出,本文算法能有效检测出绝大多数车辆的停车数据,并能有效过滤未停车车辆。测试过程中发现,停车时间点检测中有2辆车存在1 s左右的误差,由于停车时间点只作为车辆数据匹配的因素之一,较小的误差不会对加油交易的车辆数据匹配造成影响。在车辆停车检测时存在漏检的情况,漏检情况主要是由于车辆排队加油时,前车加油结束离开、后来车辆驶入时两车距离过近造成前后车辆粘连情况,系统会误认为加油车辆还未驶离,因此会漏检后来的加油车辆。在当前系统实施阶段,需要采用人工干预的办法,保证车主驶入加油位时与驶离的前车保持不小于2 m的车距,从而避免出现系统的漏检情况。同时在加油机旁设置电子显示屏,显示已匹配的车牌号与交易信息,使现场人员能够及时发现未匹配情况并采用人工付款方式完成付款。而在研究方面,这也是本文检测算法依然需要完善的地方。
为获取加油站内停车加油车辆的停车数据,本文提出了一种停车实时检测算法。用背景差分法检测运动车辆,用改进的均值法计算初始背景,在保证实时性的同时有效去除了行人残影以及过往车辆等噪声干扰。通过改进的自适应阈值提取算法,能较完整地提取出暗光环境下的车辆目标。最后使用停车检测算法,成功检测出车辆的停车时间点以及持续时间,并通过实地测试验证了本文算法的可行性。