庞宁清,徐云龙,刘润可,李丹,肖胜龙,刘向玲
(苏州大学应用技术学院计算机系,江苏苏州,215325)
随着人们生活水平的提高,几乎每家都有汽车,而随着科技的发展以及车辆数量的增加,停车场、道路监控等地方都会通过识别车牌信息来获取车辆信息。在遭遇雾霾等糟糕天气时,拍摄的图像会出现失真等问题,单纯的车牌识别系统会无法识别到准确的车牌信息。本项目是基于MATLAB设计的一款能够在雾霾天气,或者能见度不高的环境下进行车牌识别的装置。
汽车牌照识别系统需要应用到图像采集与预处理、牌照定位、字符分割以及识别等等相关技术,这是一个非常复杂的过程。
将牌照识别系统分为硬件和软件两个大部分,其中硬件部分的主要任务是完成汽车牌照图像的采集,软件部分需要对采集到的图像信息进行处理,提取出牌照位置并且识别出牌照信息。整个系统的核心部分的工作是软件部分,能否通过汽车牌照对车辆进行有效的管理,很大程度上取决于软件部分的准确性[1]。汽车牌照识别系统一般应该包括以下五个部分:图像采集、图像预处理、牌照定位、字符分割、字符识别。
在对汽车牌照进行定位之前,需要对图像进行预处理。由于MATLAB在处理图像时,不仅会读取车的牌照部分,还会读取汽车本身和背景部分。在牌照定位前,对图片信息预处理从而改善图像质量。
灰度图像是一幅二维图像,灰度图像的变换采用了Rgb2gray函数。Rgb2gray:转换RGB图像为灰度图像,格式:I=rgb2gray(RGB)。原始图像和灰度图如图1所示。
图1 原图及灰度图像
为提高识别率和精确度,必须在边缘提取前增强汽车牌照部位和其他部位的对比度,使二维灰度化的图像明暗对比鲜明。
本次设计中我们将采取直方图均衡化的方式来对图像进行增强处理。由于图像有时会出现整体偏暗或者整体偏亮的情况,要使用MATLAB中的变换函数将原图像的直方图修的更为均匀,使其层次鲜明丰富,从而避免整体偏暗或者整体偏亮的极端情况,我们称这种方法为直方图均衡化[11]。
在此,我们假设r表示原始图像的灰度级,假设s表示经过直方图均衡化之后的灰度级。若一幅图像的像元数为n,共有l个灰度级,nk代表灰度级为rk的像元的数目,则第k个灰度级出现的概率可表示为:
有以上公式可以得到,我们可以由图像的直方图算出来各像素在均衡之后的灰度值。
本次图像增强的实现采用了Histeq函数。格式:I=histeq(gray);图像增强图像如图2所示。
图2 增强图像
在检测边缘时,为突出图像灰度变化的作用,需要利用微分算子把图像信息进行微分运算;另外,由于在图像边缘处的地方灰度变化比较大,所以此处图像微分计算所得到的值比较高;我们可以把此值作为相应点的边缘强度;将设置好的阈值与分支比较结果来判断和提取边缘点,只要分支大于阈值,我们就可以将其作为边缘点来提取。
常用的边缘检测算子有Sobel算子、Prewitt算子和Canny算子[9]。四种检测算子均可以较好的完成边缘提取的任务。但考虑到不确定的外观因素,在汽车图像中的牌照区域突现时,为增加车牌的边缘定位精准确性,需要抑制其他相应部分的边缘。所以,由于Canny算子表现出来的能有效检测车牌区域纹理的特性,本文将使用Canny算子来检测汽车牌照边缘。
要想实现快速准确定位车牌,需要综合考虑多种定位方法。由于本次是针对蓝色车牌的识别系统设计,所以利用RGB模型结合车牌颜色特征,选取合适的颜色分量阈值来进行车牌的快速准确定位。定位出车牌在图像中的大概位置就要对车牌进行提取,分割出车牌。
图3 车牌定位及分割
由于放置不当或拍摄角度问题,分割下来的车牌可能存在水平或垂直方向的倾斜。为了准确的分割字符,识别出车牌,所以分割下来的车牌要进行倾斜校正。一般情况下倾斜校正分为两步,第一步是计算出倾斜的角度,第二步是根据倾斜的角度进行旋转变化。
本文主要使用Radon变换进行车牌校正。Radon函数是处理图像经常使用到的工具之一,主要用来计算指定方向上的图像矩阵的投影。
车牌水平方向倾斜校正步骤如下:(1)将分割的车牌灰度化,边缘提取;(2)调用Radon函数进行水平方向投影,计算倾斜角度;(3)调用Imrotate函数进行旋转。
为了得到包含车牌字符的水平条形区域,需要将分割后的车牌图形进行二值化和倾斜校正,然后将车牌字符分割出来,以便于识别。本文采用的字符分割方法是先规定分割出的车牌区域长×宽为238×52,设置阈值为2,寻找大于阈值2的列的数目,然后找到跳变对应的前边缘和后边缘所对应的列,当跳变点所对应的前边缘和后边缘所对应列的长度是238×52的0.02倍时进行分割。
字符分割完之后要对分割的字符进行归一化处理,以满足下一步字符识别的需要。本文设计把分割的字符统一规定为12×24个像素。分割字符结果如图4所示。
图4 字符分割结果
在准确地把字符切分开之后,要完成整个汽车牌照识别系统的最后一步,即字符的识别。这一步是计算量比较大的一步。经过多年的研究,目前有多种字符识别方法。本文设计的汽车牌照识别系统是基于BP神经网络的识别系统。
BP(Back Propagation) 神经网络是一种多层前馈神经网络,它采用了误差反向传播算法。BP神经网络的实现分为学习过程和识别过程两个部分,在学习过程中,同时进行着两个过程,分别是信息的正向传播和误差的反向传播。基于BP算法的前馈网络由输入层、隐层、输出层三个部分组成。
通常我们采用Sigmoid型的激活函数作为输出函数,如式5-1所示。Sigmoid型函数具有个单元特性,然后把隐含节点的输出信息传送到输出节点,最后就可以将结果输出。通过网络学习的正向和反向传播过程的反复运用可以修改权值,从而得到最小的误差信号。当误差达到理想值时,就可以结束网络学习过程[12]。
车牌识别的好坏在于模板库建立的大小,要想使车牌识别率高,首先要建立比较大的模板库。汽车牌照的字符一般有7个,第一个字符是汉字,通常代表车辆所属省份,第二位是字母,紧接其后的为字母与数字的混合[11]。
BP神经网络识别分割字符的流程为建立模板库,送入神经网络,设置神经网络参数并训练,分隔字符送入神经网络,识别输出结果。
车辆牌照的识别技术应用广泛,包括:交通流量检测,机场港口出入车辆管理。交通流量检测运用时,交通监控拍下车辆的车牌号,通过一系列的图像处理得到较清晰的车牌图像,通过多个路段的监控拍摄,大概判断出车辆行驶路段,从而达到预测和交通流量检测的目的。机场港口出入车辆管理运用时通过监控检测车牌,通过图像处理识别出飞机或者轮船的牌号,从而对相应的飞机或者轮船进行驶出,驶入等相关的管理操作。