4.系统设计与实现
4.1 BP神经网络的建立
BP网络是目前应用极为广泛的一种前馈神经网络,具有与人脑相似的高度并行性.良好的容错性和联想记忆功能,自适应学习和容错能力都较强,由理论上的研究可知,具有单隐层的神经网络足够执行任意复杂的函数映射系统,因此我们选用具有一个隐层的三层BP网络来实现字符的识别。用人工神经网络进行字符识别主要有两种方法:一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。因此,字符特征的提取就成为研究的关键。另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。在这里,我采用的是第二种方法来进行字符的识别。 读入字符 与模板样版进行计算 寻找相关度最大的模块 根据模块输出值 图4.1 字符识别的方法
神经网络的工作方式,由两个阶段组成: (1)学习期:
神经元之间的连接权值可由学习规则进行修改,以使目标函数达到最小。
汽车牌照的字符一般有七个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种、警别等有特定含义的字符简称;紧接其后的为字母与数字。车牌字符识别与一般文字识别在于它的字符数有限,汉字共约50多个,大写英文字母26个,数字10个。所以建立字符模板库也极为方便。
本次识别的车牌有汉字、字母和数字,但是数量不是很大,而且对于汉字来说就只有一个“苏”字。字母和数字是从网上收集到的经过PHOTOSHOP CS处理后得到的“数字”和“字母”集合,用来建立识别的模板库。
库中包含的汉字有:“京”“浙”“苏”“豫”“辽”“陕”“鲁”,字母有:A-Z,数字的库有:0-9。
(2)工作期:
本文采用隐藏层神经元数目为13,输出神经元数目为6的BP神经网络进行训练。
连接权值不变,由网络的输入得到相应的输出。读入训练样本后根据程序进行神经网络的训练。用bp神经网络进行训练,隐含层13个神经元,输出层6个神经元,训练步长2000,期望误差值0.0001,学习速率0.0003。
训练过程见下图:
图4.2 训练误差曲线
4.2 车牌定位
靠一种单一的传统车牌定位方法,很难在实际应用中,达到令人满意的效果。
因此需要探索一种综合多种方法的新的车牌定位法,才能在实际应用中,达到预期效果。本文采用的是一种将顏色特征和纹理特征相结合的车牌定位法。
将汽车图像送入计算机,进行汽车图像的预处理,并根据牌照图像的颜色特征且结合车牌尺寸的先验知识在汽车图像中找到牌照所在的确切位置,然后分割出车牌的边框,得到精确的车牌子图像。车牌定位的过程如图4.3所示。
图4.3 车牌定位过程
(1)预处理:
在得到车辆图片后,首先对图像进行图像预处理。所做的工作为,调整图像的亮度和对比度,为后面的工作做准备。 (2)灰度图:
将图像转化为灰度图。得到灰度图以后,先进灰度拉伸,以提高图像的对比度,为下一步的灰度跳变做准备。 (3)粗定位:
利用车牌的特点,即车牌区的前景和背景有很强的反差和对比效果,在灰度图中的表现为在字符与背景边缘灰度值有很大的跳变(灰度值变化在50以上)。经实验发现,对灰度图进行水平扫描时车牌所在区域的灰度跳变次数明显高于非车牌区域[5]。利用这一特点,就可以粗略的确定车牌的水平区域,从而缩小搜索范围。从而可以稳妥的完成车牌的粗定位。上下边界定位具体步骤为: ① 从上到下逐行扫描;
② 以灰度跳变次数最高的所在行为基准,向上、向下进行扫描;
③ 如果灰度跳变次数小于某一阈值,则停止扫描。其所在的上下行,即为车牌的上下边界。
实现车牌区域上下边界定位后,还需进行左右定位。左右定位的方法步骤与上下定位的方法步骤基本类似:
①将上下定位后的灰度图,从左到右进行逐列扫描;
② 以灰度跳变次数最高的所在列为基准,向左、向右进行扫描;
③ 如果灰度跳变次数大于某一阈值,则停止扫描。其所在的左右列,即为车牌的左右边界。 (4)准确定位:
本文采用HSI颜色空间的理论。HSI颜色空间是近似的均匀颜色空间,也就是说HSI颜色空间两点的欧式距离与人的感知程度近似成正比,相对于RGB空间,它更符合人类的直觉感觉。其中的色度分量H反映颜色的本质特征,一般情况下不受光线的强弱的影响。经实验测试通常蓝色车牌得色度大于等于0.75,饱和度大于等于0.51。
依据灰度跳变扫描所得到的粗定位车牌区域,再结合HSI的颜色空间理论我们
[5]
可以准确地找出车牌区域。图4.5为对图4.4中原图进行准确定位后得到的分割图。 (5)二值化:
二值化处理利用图像中要提取的目标物体与背景之间灰度上的差异计算出一个阈值,用最大方差法计算出来的阐值把原始图像分为对象物和背景两部分:设图像f(x,y),其灰度级范围为[Z1,Z2],在Z1,和Z2之间选择一个合适的灰度阐值t,则二值化后的图像f(x,y)可以表示为:
(4.1)
图4.6为车牌定位图的二值化图像。
图4.4 原图 图4.5 车牌定位图
图4.6 二值化图像
4.3 字符分割
字符分割有承前启后的作用。它在前期汽车牌照已经定位的基础上把所提取出的车牌区域图像分割成单个字符图像[6]。首先,需要写入车牌定位得到的二值图像,然后进行中值滤波,图像腐蚀,再进行下面的字符分割。
实际拍摄的图像车牌有可能是歪斜的,这会导致分割后的字符边缘可能会有像素的冗余区域,分别寻找二值图像矩阵中行向量和不为0的上下边界;列向量和不为0的左右边界,从而分割出二值图像中的字符区域。 (1)汉字分割:
从字符区域左侧第一列向右寻找全黑的列,从而确定汉字的宽度,从字符区域分割出汉字,同时将原二值图像汉子区域全部置零,并将边界为全黑的列去冗余。
(2) 字母分割:
从汉字切割后的二值图像边界像素去冗余后,从左侧第一列向右寻找全黑的列,从而确定字母的宽度,分割出字母区域。 (3)数字分割:
从字母切割后的二值图像边界像素去冗余后,从左侧第一列向右寻找全黑的列,从而确定字母的宽度,分割出字母区域,依次分割出五个数字。
分割结果如下:
图4.6 均值滤波后图像 图4.7 腐蚀后图像
图4.8 分割得到的单个字符
4.4 字符识别
本文首先采用训练样本进行神经网络的训练,从而得到一个对牌照敏感的
人工神经网络,然后利用训练好的神经网络检测处理后的汽车图像,识别车牌[2]。BP算法就是把一组样本输入输出问题转化为一个非线性优化问题,并通过梯度算法利用迭代运算求解权值问题的一种学习方法。基于神经网络的字符识别算法一般包括以下四个步骤: