杨 硕,周霜菊,张志杰
(1.沈阳化工大学 计算机科学与技术学院,辽宁 沈阳 110142;2.成都大学 美术与影视学院, 四川 成都 610106;3.西南民族大学 计算机科学与技术学院,四川 成都 610041)
车牌定位算法是一种已经被学者深入研究的算法,现有的算法可以分为以下几类:①基于边缘、纹理等几何特征的算法:车牌的形状、字符的边缘梯度和纹理等,都是常用的几何特征。这些特征可以通过边缘(或直线)检测算法[1-3]、数学形态学[4,5]算法或特征点检测[6,7]算法等检出。该类算法具有简单、高效的优点,因此被广泛使用;②基于颜色特征的算法:颜色特征一般通过色彩空间变换提取[3,5,8]。颜色特征容易受到光照变化的干扰,因此,常将颜色与边缘、纹理等几何特征结合使用;③基于图像变换的算法:使用图像变换可以提高算法抵抗复杂环境和噪声干扰的能力。如:使用图像金字塔[9]在空间域对车牌图像变换可以增强算法抵抗噪声干扰的能力;使用小波变换[10,11]可以在频率域内提取车牌的纹理特征,并可以提高算法抵抗光照变化的能力;④基于分类器的算法:使用神经网络[7]、支持向量机[11]、Adaboost[12]等算法,可以将车牌定位问题转化为目标检测问题,提高了算法在复杂环境下的车牌检测效果;⑤基于多特征融合的算法。使用单一特征容易受到环境制约,新近的算法至少使用两种或者两种以上的特征定位车牌,如:使用边缘-颜色特征组合[3],使用纹理-颜色特征组合等[5]。在本文的前期工作中,即文献[6],甚至使用了5种特征:水平垂直边缘、车牌矩形、字符纹理、颜色和车牌色饱和度投影,进行精确的车牌定位。
上述提到的边缘、颜色和角点等特征是图像处理领域最常使用的特征,这些特征虽然能够较好地完成车牌检测,但不一定是最优的,具体表现在:这些简单特征并非专为车牌设计,且上述算法往往只是在时间上依次利用多种特征,而不是在同一时间融合使用,因此难免会出现流程复杂、特征融合程度和利用率不高等问题。为此,本文提出了一种点-段结构的新特征专用于车牌检测:点是指图像边缘上的点,并且只筛选那些具有车牌颜色的点,同时使用了颜色和边缘特征;段是指由点连成的线段,通过计算线段上像素值的统计特性可以获得车牌的纹理特征,对于蓝白车牌,段可以分为蓝段和白段,蓝段对应车牌背景底色,白段对应车牌字符笔画,同时使用了笔画特征。因此,从特征的使用上,点-段特征在同一时间融合了4种车牌特征。
在特征的处理上,点-段特征使用了聚类算法。车牌字符笔画的宽度是近似相同的,因此,对于白段,可以用聚类算法对白段的长度聚类,保留那些长度一致的白段,作为特征候选。同理,图像中,车牌局部的亮度分布一般情况下是均匀的,这样可以继续依据颜色饱和度分对蓝段进行聚类,保留颜色均匀的段作为最终的候选。因此,本文算法是一种多特征融合的车牌检测算法,同时,由于笔画特征的加入,明显提高了车牌定位的成功率。
车牌字符作为一种打印字体,笔画具有一定的粗度,其英文和数字字符的粗度近似相同,这种固有的结构特征是区分车牌字符与图像中其它目标的一个重要的标志。文献[13]提出了一种在街景中定位广告牌或标示牌中字符位置的算法,算法的依据就是打印体下字符笔画同宽的性质,其算法获得字符宽度的原理如图1所示。
图1 打印体字符宽度的获取
图1中,算法首先获得边界的梯度方向,两个相反梯度所对应的线段的长度就是笔画的宽度。本文方法借鉴了这种思路。
本文以最常见的蓝白牌为例说明算法原理,算法流程如图2所示。对于黄黑等车牌,采用的方法与蓝白牌类似。
图2 算法流程
对于输入的彩色图像,首先进行预处理,以提高图像质量。预处理的步骤为:
(1)图像去噪:使用高斯滤波器去除噪声,图像经过高斯平滑后,可以提高后续的梯度和边缘算法的准确性。
(2)将图像色彩空间转换到HSV空间并对亮度通道进行直方图均衡化处理。这样做可以提高图像对比度,改善光照不均带来的影响。
我国蓝白车牌的形状为矩形,大小为440 mm×140 mm,蓝底白字,由1位汉字和6位字母或数字组成。由于车牌在设计之初就考虑了容易辨认的问题,因此,从图像上看,车牌的外形轮廓和字符边缘与图像中的其它目标相比非常明显。
拍摄车牌图像时,一般能够保证车牌近似水平,在此前提下,扫描图像时,水平扫描车牌要依次进过7个字符,而垂直扫描仅进过1个字符,或不经过任何字符(从字符间隔穿过)。因此在计算图像梯度和边缘时,仅在水平方向上进行,不仅能有效降低计算量,同时对后续检测的影响也很小。
令Irgb为车牌的RGB彩色图像,Igray为灰度图像。本文使用Sobel算子提取车牌梯度,使用的算子模板为
(1)
式中:kx为x方向的Sobel算子模板,用kx与Igray卷积可以获得x方向上的梯度图像Gx。
对Gx进行二值化处理可以得到边缘图像E
(2)
其中,a是由Otsu算法获取的自适应阈值。
首先,根据边缘图像E指示出的边缘位置,筛选蓝色的像素点,筛选条件如下
(3)
其中:Ir,Ig和Ib分别为彩色图像的红、绿和蓝通道;λ为大于0的阈值,本文中设置为5,较低的阈值可以保留较多的蓝色像素,防止在后续的流程中发生漏检现象。经过颜色挑选后的边缘图像称作蓝色边缘图像,记作Eb(x,y)。
同时,为了降低后续处理的计算量,需要在水平方向上对Eb(x,y)进行细化,具体做法为:水平扫描Eb(x,y),根据连通性得到具有一定宽度的边缘,仅保留中心边界作为细化结果,如图3所示。
图3 水平边缘细化结果
经过细化后的边缘,边缘仅由1个像素点组成,这些点同时带有车牌的颜色和边缘特征,即蓝色边缘像素点,记作Ebe(x,y)。
同时,为了组成点-段特征,对于Ebe(x,y)中的每个边缘点,需要获得边缘的梯度方向。根据前面的分析,这里只需要确定梯度的朝向即可,即:朝向左(角度为180°)或者朝向右(0°),而不需要精确计算梯度的角度。令Ang为梯度方向,Ang的获取的方法为
(4)
点-段特征由3个点和2个线段组成,如图4所示。
图4 点-段特征
3个点分别为Pl,Pc和Pr,均定义在Ebe(x,y)中,2个线段为Sl和Sr,Pc作为线段的公共点。点-段特征的获取和筛选方法为:
步骤1 沿水平方向扫描蓝色边缘图像Ebe(x,y),每遇到连续的3个边缘像素点,将它们记作Pl,Pc和Pr,转步骤2继续。
步骤2 检测这3点是否满足以下条件:Pl和Pr梯度方向相同,即Ang(Pl)=Ang(Pr),且Pc的梯度方向与Pl和Pr不同。满足以上条件转步骤3,否则转步骤2继续扫描图像。
步骤3 定义段长度比例为Rt=Max(Sl,Sr)/Min(Sl,Sr)。过滤掉Rt>11的点-段特征,转步骤4(极限情况下,如车牌中“L”字符和“J”字符相邻出现,此时Rt的值大致为11,其它情况下均远小于该阈值)。
步骤4 分别统计Sl和Sr段内像素的RGB均值,用下式计算段的平均亮度和蓝色平均对比度
(5)
点-段特征经过初筛后,还有可能存在干扰,需要进一步过滤。对于段Sl和Sr,亮度较大的段(白段)的长度为实际上字符笔画的宽度(图1),而同一图像同一车牌内字符笔画的宽度是大致相同的,因此,可以根据笔画的宽度排除不属于车牌字符的点-段。另一方面,蓝色饱和度较大的段对应着车牌底色背景,对于车牌局部,其底色(蓝色)的饱和度是近似相同的,因此,可以再次根据蓝色饱和度对点-段特征聚类,进一步排除干扰。具体使用的聚类算法为:
输入:原始数据Din={d1,…,dN}。
输出:聚类后的数据Dout={d1,…,dM},M 参数:聚类阈值τ,迭代次数最大值itMax。 步骤1 初始化令Dout=Din,迭代次数it=0。 步骤2it=it+1,计算Dout内数据的均值,记为μit。 步骤3 在数据Dout中寻找与μit差异最大的数据,假设为di,判断:如果di-μit大于阈值τ,则将di从Dout中移除。 步骤4 继续迭代,直到it大于itMax或者Dout中没有数据与μit与差异大于τ。 图5(a)为筛选、聚类后的点-段特征,图5(b)是对“段”图像进行形态学闭运算后的结果。 图5 点-段特征及特征图像 图5(b)得到的“段”图像指示出了车牌可能出现的区域。使用类似文献[6]的做法定位车牌:首先,将图5(b)中白色像素所在位置的色饱和度值向垂直方向投影,如图6所示,色饱和度图像中,车牌字符的饱和度值远小于车牌蓝色背景,因此投影后,字符间隔将出现峰值;然后,为了检测这些峰值,定义一个栅栏状滤波器,如图6中竖线,将不同尺度的栅栏滤波器与饱和度投影图像做卷积,响应最大的位置就是车牌在图像的水平位置;最后,根据车牌的宽高比以及已经确定了的水平宽度,用矩形包围框从上至下扫描图5(b),包含白色像素最多的包围框就是车牌定位的结果。 图6 色饱和度投影 实现算法的软件环境为:Windows 7操作系统,Qt5.0,OpenCV2.4.9,部分功能函数使用了GPU加速实现。主要硬件环境为:Thinkpad x230笔记本电脑,Core I3(2.4 GHz)四核CPU,8 G内存。实验数据集包含800幅含车牌的图像以及400幅不含车牌的图像。包含车牌的图像主要来自于网络截图、路口监控以及人工拍摄,每幅图像中车尾或车头所占图像的比例不少于60%,多数车牌图像带有一定程度的倾斜,但倾角不大于30°。不包含车牌的图像主要是路旁街景。同时,为了便于处理,在保证原图像宽高比的情况下将所有图像分辨率的大小调整到400×300以下。 表1为本文算法的主要参数设置。 表1 算法主要参数 图7为本文算法的车牌定位效果,对于成功定位的车牌,使用了文献[6]提到的车牌字符分割算法并将字符以二值化方式显示。 图7 本文算法定位结果 图7的实验中包含了大部分复杂环境,如:颜色干扰(“湘BY2054”和“粤JPG999”的车身均为蓝色),倾斜的车牌(“粤CFL980”,“辽ANB082”和“粤BOPA09”),复杂的背景和光照条件(“辽M66B66”和“浙BY1V13”)等。从结果可以看出:本文算法在复杂条件下能够准确地定位出车牌。 为了验证本文算法的效果,这里选择了4个在特征选取和算法上具有特色或具有代表性的车牌定位算法:①文献[4]提出的基于边缘特征和使用数学形态学处理的算法;②文献[3]提出的基于边缘、颜色和纹理特征的算法;③文献[12]提出的基于颜色特征和使用AdaBoost分类器的算法;④文献[6]中的基于边缘、纹理和颜色多特征融合,并使用特征点分类的算法。这些对比算法均根据原论文描述实现,并在同本文算法完全相同的软硬件环境下运行。 对比所使用的评价指标包括: (1)成功率:正确定位的数目/正例数目(800个),正确定位的标准是:算法输出的车牌包围框与绝对真包围框的覆盖比率大于50%; (2)精确度:正确定位的数目/(正确定位的数目 + 误检数目); (3)平均准确率:正确定位的车牌中,算法输出的包围框与绝对真包围框的覆盖比率的平均值。 详细的对比结果见表2。 表2 算法比较结果 从结果可以看出,本文算法的成功率、精确度和平均准确率均不低于对比算法,特别是在成功率和精确度方面具有明显的优势。本文算法的车牌定位过程可以分为粗定位和精确定位:粗定位基于点-段特征,不仅利用了边缘、颜色和纹理特征,同时也很好的利用了笔画特征,因此能够以较高的成功率得到车牌的大致位置;精确定位使用了文献[6]提出的栅栏滤波器,因此平均准确率与文献[6]算法一致。而对于其它3种算法:形态学算法因为没有使用颜色特征导致实验效果较差;边缘颜色算法同时使用了两种特征,并且边缘和颜色能够形成特征互补,表现稍好,但该算法仅使用灰度投影给出了车牌粗定位结果,因此定位的准确率较差;AdaBoost算法使用基于Haar特征的分类器,而Haar特征对车牌的笔画结构响应较好,同时该算法也使用了颜色特征,因此该算法的定位效果较好;特征融合算法是本文的先期算法,融合了多种车牌特征,具有较好的检测效果。 算法的运行时间对比见表3。 表3 算法效率比较 本文算法使用了OpenCV提供的GPU函数接口加速了矩阵处理和色彩空间变换等的运算过程,从运行效率上看,本文算法处于平均水平。对比算法中,形态学算法和边缘颜色算法由于算法简单,速度较快;AdaBoost算法由于要产生大量的Haar特征用于分类,因此速度较慢;特征融合算法在整幅图像尺度上使用了特征点检测算法,并使用了滑动窗口的方法精确定位车牌,因此在一定程度上影响了效率。 相比文献[6],本文算法优化了处理的流程,先用处理速度较快的边缘颜色特征排除大量的干扰,后面的笔画和颜色聚类虽然较耗时,但此时处理的特征数目已经被大大降低,因此不会明显地影响速度。 提出了一种专用于车牌定位的点-段特征,该特征较好地融合了边缘、颜色、纹理和笔画这4种最有效的车牌特征。同时,通过优化算法流程,在处理前期排除大量的干扰,提高了算法的效率。实验结果表明,所提出的特征和算法能够显著提高车牌定位的成功率和精确度。 算法的不足方面:算法是以蓝白车牌为主要处理对象,虽然通过简单的修改能够处理黄黑车牌,但目前还不能给自动的判断车牌的类型,这些问题将会在进一步的研究中加以解决。2.6 定位车牌
3 实验及分析
3.1 参数设置
3.2 车牌定位效果
3.3 对比实验
4 结束语