APP下载

一种基于OpenCV的高效车牌识别系统实现

2014-03-16浙江万里学院刘云鹏

电子世界 2014年9期
关键词:车牌字符矩形

浙江万里学院 刘云鹏 李 瑾

国网浙江宁波市鄞州区供电公司 潘 闻

1.绪论

车牌识别包括车牌定位、字符分割和字符识别。车牌定位技术有基于纹理特征的方法[1];基于颜色特征的方法[2];基于纹理和颜色结合的方法;基于Adaboost等各种分类器的方法;基于曲量场空间的方法[3]; 基于最近邻链的方法[4]。字符分割技术有基于投影的方法[5];基于连通域的方法[6];将上述方法与其他技术进行结合[7];基于聚类方法[8]。字符识别技术有模版匹配法[9];机器学习训练法[10-13]。

事实上,没有一种特别通用的方法可以针对所有不同应用场景的车牌识别。本文所提出的基于OpenCV的车牌识别系统,主要针对车距在2-3米范围内的静态车辆图像,光照可以有一定的模糊,并且允许车牌有轻微角度的倾斜。本文将灰度空间与HVS颜色空间结合来获取垂直边缘,可以获取更加精确的车牌候选区域,并通过SVM(支持向量机)机器学习的方法定位最终车牌区域。由于本应用中,车牌定位区域相对精确,车牌图像也不存在高光、模糊和遮挡等情况,使用连通域方法可以取得较好的字符分割效果。最后根据中国车牌的字符分布特点,不同字符位置使用不同的ANN(人工神经网络)训练,可以获得较高的识别率。

2.系统实现

2.1 车牌定位

2.1.1 自适应二值化

(1)颜色空间转换

原始图像除了要转为普通的灰度图像,同时要转为HVS色度空间,因为在本文所提的应用中,是近距离的车牌识别,大部分情况下车牌区域在S颜色空间有较为突出的效果。在OpenCV中通过函数cvtColor(src,dst,code)进行颜色转换,对于灰度转换code值为CV_BGR2GRAY,HVS转为code值为CV_BGR2HSV。两种颜色空间都要转换和处理的目的会在“重叠区域选择”部分详细描述。

(2)高斯滤波

为了消除噪声点,进行高斯滤波,使用OpenCV函数blur(src,dst,Size(5,5)),blur的缺省操作为高斯滤波,所以没有设置类型,设置经验值为5*5的模板。

(3)获取垂直边缘

车牌区域和图像中其他区域相比,有着比较明显的垂直边缘,使用Sobel算子提取垂直边缘,OpenCV函数为Sobel(src,dst,CV_8U,1,0,3,1,0)。

(4)自适应二值化

二值分割阈值由系统根据边缘图像内容自适应的确定,使用OpenCV函数threshold(src,dst,0,255,CV_THRESH_OTSU+CV_THRESH_BINARY),结果如图1所示。

2.1.2 形态学闭操作

为了进一步获取连通有效的车牌候选区域,要进行区域合并和剔除噪声,使用形态学的闭操作可以有较好实现,OpenCV函数为morphologyEx(src,dst,CV_MOP_CLOSE,element),此处element为闭操作使用的结构化元素,根据经验取形状为矩形,大小为15*1,通过函数getStructuringElement(MORPH_RECT,Size(15,1))创建。操作结果如图2所示。

图1 自适应二值化图像

图2 闭操作结果

2.1.3 区域过滤

调用OpenCV函数findContours(src,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE)查找所有封闭区域的外轮廓,每个轮廓坐标保存在vector>格式的contours集合对象中。然后通过方法minAreaRect获取轮廓的外接矩形,并根据矩形的面积和长宽比确定候选区域,车牌区域的长宽比一般为3左右,误差范围设定为40%。同时根据所测试图片的特征,设置区域最小面积为20*20*3,最大面积为60*60*3。

2.1.4 重叠区域选择

重叠区域选择是为了更加准确的获取到车牌区域,在前面所述的“颜色空间转换”中,需要对普通灰度图像和S颜色空间图像同时处理,这是因为大多时候S颜色空间获取的结果更加精确,当然有时也会出现普通灰度图像获取候选车牌区域更加准确的情况,不管何种情况,两者的获取区域都会有重叠,根据经验取重叠区域中小的区域为候选,此处设定重叠比例阈值为40%。

2.1.5 候选区域标准化

对有倾斜的矩形区域进行水平旋转处理,使用getRotationMatrix2D(rect.center,angle,1)产生变形矩阵对象rmat,rect为候选矩形区域,rect.center表示其中心点。有了变形矩阵对象,使用仿射变换进行旋转。由于仿射变换会产生在原图中没有的像素点,需要插值处理,本文选用双线性插值,如公式(1)所示:

式中G(x,y)表示仿射变化前对应像素,x和y为实数,j和u分别为x的整数和小数部分,k和v分别为y的整数和小数部分。对于仿射变换,可以表示为公式(2)形式:

式中,(x1,y1)和(x2,y2)分别表示未转换和已转换坐标,T为仿射变换矩阵。仿射与插值调用OpenCV方法warpAffine(ori gin,rotated,rmat,origin.size(),INTER_LINEAR)实现,此处origin为原始输入图像,rotated为旋转后的矩阵。旋转后调用函数getRectSubPix(rotated,rect.size,rect.center,result)来提取水平像素矩阵。为了有效的训练和分类图像数据,将用于训练的候选车牌区域标准化为144*33的大小,同时通过直方图均衡来消除光线的影响。

2.1.6 学习与定位

SVM训练样本来自上面步骤中最终生成并保存的144*33标准图像,如图3所示,上面两行为正确车牌图像,下面两行为非车牌图像,将正确样本与错误样本分类到不同的目录进行标识,并使用CvSVM类的train方法进行训练,predict方法进行定位预测,如果返回值为1,说明该区域是车牌位置的可能性最高。

图3 车牌正确区域与错误区域位置样本图

图4 字符外接矩形

2.2 字符分割

本文使用连通域方法可以取得较好的字符分割效果,具体步骤如下:

Step1:对标准化的车牌图像进行二值化,调用OpenCV函数threshold(src,dst,140,255,CV_THRESH_BINARY),此处取经验值140作为黑白分割点;

Step2:获取连通区域的轮廓与最小外接矩形,方法与“区域过滤”的方法一致,不再描述;

Step3:根据长宽比和高度进行过滤,长宽比例为33:20,取35%的误差,最小高度为11,最大高度设置为33,由于数字1的宽度很小,所以将最小的长宽比设定为0.15。获取外接矩形并过滤后结果如图4所示。

Step4:将外接矩形中对应的字符图像进行标准化处理。首先调用OpenCV的函数warpAffine(char_mat,dst,trans_mat,dst.size(),INTER_LINEAR,BORDER_CONSTANT,Scalar(0))对输入的字符图像char_mat仿射变换为正方形,所以dst为正方形矩阵,边长取char_mat长和宽的最大值,trans_mat为2*3的变换矩阵。然后调用resize函数将dst转为20*20的标准大小图像;

Step5:如果未获取ANN字符训练样本,则对所有标准化的字符图像进行文件保存。

2.3 字符识别

本文采用ANN机器学习来进行单个字符的识别,使用最常用的MLP(多层感知器)算法。中国车牌中的7个字符从左到右,第一个是汉字,第二个是英文字母,第三个和第四个可能是英文字母或数字,最后三个是数字,根据这个特点,可以分成四种类型进行训练,即:(1)全部使用汉字的训练;(2)全面使用字母的训练;(3)全部使用数字的训练;(4)字母和数字一起的训练。这样可以大大提高字符识别率。每种类型的学习与识别过程是一致的,具体步骤如下。

Step1:读取训练样本中标准化的字符图像;

Step2:分别在5*5,10*10,15*15和20*20四种不同分辨率图像上使用水平和垂直累计直方图的方法进行特征提取。使用函数countNonZero计算每行或每列非零像素数量,并将结果存储在一个矩阵对象m,通过所有元素除以m中最大值进行归一化;

Step3:将特征矩阵和对应的分类标识进行存储。全数字、全字母、数字字母和汉字分别对应训练文件digi.xml、letter.xml、digi_letter.xml和chn.xml;

Step4:根据当前车牌字符的位置选择对应的训练文件进行读入,选择四种分辨率数据之一待训练。对于如何选择5*5,10*10,15*15和20*20,一般情况下是每种都进行训练和识别,选择效果最佳的一组分辨率;

Step5:定义每一层的神经元对ANN初始化。本文使用一个隐藏层,定义一行三列的矩阵,第一列为特征数,第二列为隐藏神经元数,第三列为分类数。OpenCV中ANN对应CvANN_MLP类,通过其create函数来初始化层数、神经元、激励函数、alpha和 beta 参数。训练通过CvANN_MLP类的train函数实现;

Step6:获取当前待识别字符图像的特征向量,方法与Step2中一致;

Step7:CvANN_MLP类调用predict函数来获取特征向量的分类结果,分类结果为一个向量,长度与分类数一致,数据为特征向量属于该分类的概率,再调用minMaxLoc函数得到概率最高的分类。

表1 实验结果

3.实验与分析

算法在CPU主频2.7GHz,内存4Gb的WindowXP系统中实验,开发工具为VS2010+OpenCV2.4.4。测试车辆图片300张,拍摄距离2-3米,车牌倾斜在10%左右的小角度内,图片分辨率为320*240,光照相对柔和。SVM训练样本数为170,样本分辨率为144*33,正确车牌数100,非车牌数70。ANN训练样本总数为150,其中汉字、数字、字母以及数字字母训练样本数分别为40、30、40和40,样本图像分辨率为20*20。实验结果如表1所示。

从实验结果可以看出,本文中车牌定位准确率高达98.01%,识别准确率也有94.73%,每副平均识别时间60ms,达到了实时识别的需求。这是因为在本文的车牌识别应用中,车辆拍摄距离较近,光照较好,没有任何遮挡和车牌相似的噪声区域,只有少部分车牌有小角度的倾斜,所以车牌定位和识别的准确率都很高。

4.结论

本文针对车距在2-3米范围内的静态车辆图像,提出一种基于SVM和ANN的车牌定位与识别算法,并使用OpenCV库有效实现。首先将灰度空间和色度空间进行结合,在Sobel边缘提取基础上,进行自适应阈值下的二值化处理,通过对轮廓外接矩形的面积和长宽比初步定位车牌位置,然后利用SVM线下机器学习的方法更加精确的定位车牌位置。并采用寻找有效外部轮廓的方法进行字符分割,最后对汉字位置、英文位置、数字位置和英文数字混合位置分别使用ANN方法进行字符识别。实验证明,该方法定位准确率和字符识别率高,有一定应用价值。进一步研究内容包括:(1)在图像较模糊和噪声较大情况下的车牌识别;(2)远距离下的车牌识别。

[1]Lang Yao,Sun Yanpeng.The study of license plate location and character segmentation[C].Proceedings of SPI E,Singapore,Singapore;SPIE,2012,8349:83491W.

[2]郑成勇.一种RGB颜色空间中的车牌定位新方法[J].中国图象图形学报,2010,15(11):1623-1628.

[3]姜文涛,刘万军.基于曲量场空间的车牌定位与识别[J].电子学报,2011,39(11):2554-2560.

[4]苗立刚.基于最近邻链的车牌检测算法[J].自动化学报,2011,37(10):1272-1279.

[5]Roy A,Ghoshal D P.Number plate recognition for use in different contries using an improved segmentation[C].Proceedings of International Conference on Emerging Trends and Applications in Computer Scence.Shillong,India;IEEE,2011:1-5.

[6]Yoon Y W,Ban K D,Yoon H,et al.Blob extraction based character segmentation method for automatic license plate recognition system[C].Proceedings of IEEE International Conference on System,Man,and Cybernetics.Gyeongiu,Kor ea;IEEE,2011:2192-2196.

[7]顾弘,赵光宙,齐冬莲,等.车牌识别中先验知识的嵌入及字符分割方法[J].中国图象图形学报,2010,15(5):749-756.

[8]李旭,徐舒畅,尤玉才,等.基于聚类分析的个性化美国车牌分割算法[J].浙江大学学报(工学版),2012,46(12):2155-2159.

[9]Gao Jianjun,Blasch Erik,Pham Khanh,et al.Automatic vehicle license plate recognition with color component texture detection and template matching[C].Proceedings of SPIE,Baltimore,MD,United states;SPIE,2013,8739:87390Z.

[10]Sedighi Amir,Vafadust Mansur.A new and robust method for character segmentation and recognition in license plate images[J].Expert Systems with Applicatio ns,2011,38(11):13497-13504.

[11]磨少清,刘正光,张军.基于图像模糊度与主成分分析的车牌汉字识别[J].光电子.激光,2010,21(3):444-447.

[12]刘高平,赵杜娟,黄华.基于自编码神经网络重构的车牌数字识别[J].光电子.激光,2011,22(1):144-148.

[13]Wan Yan,Yao Li.An efficient license plate character recognition algorithm based on shape context[C].Proceedings of SPIE,Sanya,China;SPIE,2013,8761:876109.

猜你喜欢

车牌字符矩形
两矩形上的全偏差
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
数字图像处理技术在车牌识别系统中的应用
化归矩形证直角
HBM电子称与西门子S7-200系列PLC自由口通讯
从矩形内一点说起
第一张车牌
基于MATLAB 的车牌识别系统研究