基于Python+OpenCV的车牌识别技术的研究

2019-09-25 13:22李晓莎林森
数字技术与应用 2019年6期

李晓莎 林森

摘要:通过Python开发平台和OpenCV机器视觉库等技术对牌照识别进行研究,旨在寻求更为快捷有效的算法。本系统的总体框架分为图像预处理、车牌定位、字符分割和训练识别等核心模块。实验结果表明该系统具有良好的时效性和识别效果。

关键词:Python;OpenCV;图像预处理;字符分割;训练识别

中图分类号:U491 文献标识码:A 文章编号:1007-9416(2019)06-0095-03

0 引言

智能交通系统(ITS)是将先进的数据通信、电子控制及人工智能等科技综合运用于整个交通运输管理体系,使人一车一路有机结合起来,从而构建起一种全方位发挥作用的精准高效便捷的综合运输系统。本文介绍了图像预处理、牌照定位、字符分割及字符识别四个模块的原理算法,展示本系统的实现效果,旨在寻求更为快捷有效的算法运用于牌照识别。

1 图像预处理

1.1 高斯滤波

本文采用高斯滤波对原始图像进行降噪处理。高斯滤波方法是使用卷积模板遍历图像中的每个像素点,将邻域内像素点被模板确定的高斯加权平均灰度值替换模板中心像素点的值。二维零均值高斯函数表达式为:                 (1)

OpenCV提供了函数cv2.GaussianBlur(img,(3,3),0)对图形进行高斯滤波,这里(3,3)表示高斯矩阵的长与宽都为3,标准差取0时,OpenCV会根据高斯矩阵的尺寸自行计算。如图1所示为高斯滤波效果图。

1.2 灰度化

彩色图片包含了大量的颜色信息,占用较多的存储空间。为了提高识别效率,需要对图片进行预处理。在RGB模型中,若三分量等值时,则颜色呈现为灰度颜色,其灰度值为R=G=B的像素值。目前主流的灰度化方法是加权平均法[1],将三分量以不同权值进行加权平均,即: (2)

其中,分别是读取RGB的三个通道的分量值。

OpenCV提供了函数cv2.cvtColor(img,cv2.COLOR_ BGR2GRAY)对图形进行灰度化处理,处理后的灰度效果如图2所示。

1.3 形态学处理

数学形态学的基本思想是使用某个结构元素去度量和提取图像中的对应形状。结构元素指具有某种确定形状的基本结构,结构元素的原点在其几何中心处,周围像素关于原点对称[2]。

2 牌照定位和分割

2.1 边缘检测

边缘检测的目的是标识数字图像中亮度变化最明显的像素点,剔除了自认为不相关的像素信息,保持图像原本的结构属性。本文采用Canny算子进行边缘检测。Canny算子是一种多级检测算法[3],被公认为边缘检测的最优算法,它不容易受噪声干扰,能够检测到真正的弱边缘。

OpenCV提供了Canny函数,指定最大和最小阈值为cv2.Canny (img,100,200)。

2.2 輪廓提取

本文调用OpenCV函数cv2.findContours(img, cv2.RETR_ TREE, cv2.CHAIN_APPR-OX_SIMPLE) 查找所有封闭区域的外轮廓。cv2.findContours()函数返回的轮廓坐标值保存在countours集合对象当中,然后调用函数cv2.contourArea()计算轮廓面积,以及函数cv2.minAreaRect()获取矩形轮廓的中心坐标、宽度、高度、旋转角度,并根据预设区域面积及纵横比判别候选区域。依据所测试图片的纹理特征作为先验知识,设定牌照区域的长宽比范围在2到5.5之间,同时设置牌照区域允许最大面积为2000像素,经判断对比排除不在理想范围内的连通区域。使用函数cv2.drawContours(img,[box],-1,(0,0,255),thickness=2)进行轮廓的颜色填充,查看全部候选轮廓提取效果如图3所示。

2.3 倾斜矫正

基于仿射变换的倾斜矫正能够保持二维图形的平行性及平直性。仿射变换代表的是两幅图之间的映射关系,通常使用2×3矩阵来表示仿射变换,算法公式如下:

式中,,分别表示待转换和转换后的坐标,为仿射变换矩阵。

OpenCV提供了仿射变换方法cv2.getAffineTransform(pos1,pos2),根据变换前后三个点的对应关系来自动求解仿射矩阵,然后使用函数cv2.warpAffine(img,M,(pic_width, pic_hight))将原有图像旋转变换,达到倾斜矫正的目的。

2.4 颜色定位

在OpenCV中由RGB转换到HSV的过程中,图像以8位三通道的形式保存,每个颜色分量占用8位,值的范围为0~255,所以OpenCV将H值的范围缩小了一半,变为0°~180°。根据资料和实验数据,获取OpenCV库中HSV空间的蓝黄绿色域值,作为辨别有色牌照的定位依据。具体色域值如表1所示。

2.5 字符分割与识别

2.5.1 字符提取分割

(1)水平投影分析:对二值化图像作水平投影分析,是从获取的投影直方图上计算出每个牌照上字符的开始(上升点)、结束(下降点)位置、字符高度(峰宽度)、字符上下边框位置等参数。

(2)垂直投影分析:本文所选取的垂直投影的最佳阈值是该方向投影直方图的平均值和最小值的五分之一。利用阈值分割出各个字符区域,其中包括左右边框、字符分割点和固定车牌的铆钉。通过对比宽度大小,一一排除无效干扰区域。切割后的车牌字符图像如图4所示。

2.5.2 字符归一化

本文调用函数cv2.copyMakeBorder(part_card,0,0,w,w, cv2.BORDER_CONSTANT,value=[0,0,0]),给各字符填充左右方向上的黑色边缘,长度为原字符宽度减去标准尺寸的绝对值的一半,然后使用cv2.resize()函数将字符图像统一尺寸大小,以便在训练识别时提高效率和精度。字符归一化处理如图5所示。

2.5.3 字符特征提取

(1)Gamma校正:本文采用平方根的方式进行Gamma标准化。Gamma校正公式为:                     (5)

(2)计算图像梯度:该步骤主要是为了进一步减弱噪声干扰,获取轮廓像素信息。梯度计算公式如下:

(6)

(7)

式中,分别为像素点的水平梯度、垂直梯度及像素值。本文利用Sobel算子对字符图像进行模板卷积,由以下公式计算得到每个像素点处的梯度方向和幅值。水平边缘算子为,垂直边缘算子为。

(8)

(9)

其中,为梯度强度,为梯度方向。

(3)统计梯度方向投影:本文将每个字符图像划分成四个子图方块,对于每个子图计算梯度方向直方图,并将该直方图转换成极坐标量化到圆上,根据需要分割成16个bins(每组的角度范围为360°/bins),即整个直方图包含16维特征向量。然后计算加权其幅度的方向直方图(16bins)。因此,每个子图就会提供一个包含16维数的特征向量,如图6所示。

2.5.4 SVM算法

支持向量机(Support Vector Machine, SVM)是一种训练机器学习的二分类模型,其决策边界是对学习样本求解的最大边距超平面。

本文構建字符分类器采用高斯核来训练机器学习,高斯核函数的计算公式为:

(10)

选用高斯核训练时,须要指定的参数。无论使用哪种核函数,训练时都要指定一个正实数的惩罚因子。

预测时的分类判别函数为:

(11)

(12)

其中,为超平面的法向量,为分类函数在轴的截距,sgn为符号函数。

2.5.5 字符识别

为了降低计算量,本文采用一对多分类器,即65种样本类别的任意一种与其他64种构成二分类器,即只需构造65个二分类器,其中针对汉字分类器31个,针对数字与英文字母混合分类器34个。

训练分类器之前,需要对每个字符样本提取特征数据,将样本的特征参数保存到相应的.dat文件。针对切割好的字符图像,相继提取分类器所需要的特征参数,按照字符排列顺序逐个代入分类函数式中,计算后即可获得相应预测值。字符牌照识别效果如图7-图9所示。

3 结语

车牌识别系统是现代智能交通工程领域中研究的重点问题之一,对车辆的自动化管理起到了关键作用。本文对于图像预处理、牌照定位、字符分割以及字符训练识别过程进行了阐述研究,从而在系统测试时力争达到预期可观的显著效果。

参考文献

[1] 夏泽举,董兰芳.彩色灰度交叉融合的彩色图像渐变技术[J].计算机仿真,2010,27(12):245-249.

[2] 崔屹.图象处理与分析:数学形态学方法及应用[M].科学出版社,2000.

[3] 王文豪,姜明新,赵文东.基于Canny算子改进的边缘检测算法[J].中国科技论文,2017,12(08):910-915.

Research on License Plate Recognition Technology Based on Python+OpenCV

LI Xiao-sha,LIN Sen

(School of Fundamental Sciences, Shengli College China University of Petroleum, Dongying Shandong 257061)

Abstract:This paper studies license plate recognition through Python development platform and OpenCV machine vision library, aiming at finding faster andmore efficient algorithms. The overall framework of the system is divided into core modules such as image preprocessing, license plate location, character segmentation and training recognition. The experimental results show thatthe system has good timeliness and recognition effect.

Key words:Python;OpenCV;Image preprocessing;Character segmentation;Training recognition