0 项目说明
基于颜色和BP神经网络的车牌定位和识别系统
提示:适合用于课程设计或毕业设计,工作量达标,源码开放
1 项目说明
本系统车牌字符识别技术主要包括三部分内容:车牌定位、字符分割及字符识别。
车牌通过摄像机等电子设备,变成一幅图像后,如何在这幅图像中准确找到车牌,是整个车牌自动识别系统的关键。目前的车牌都有一定特点,如车牌底色、形状等都有国家标准,可以根据这些标准,加上图像处理中对颜色、形状(车牌主要是长方形)的处理方法,准确定位车牌位置。
车牌底色由于光照的影响,实际拍摄下来的车牌,其颜色与国家标准相比,会有些失真,通过建立车牌颜色库,利用BP神经网络,对失真的车牌底色作训练,使系统对车牌失真有更好的适应能力,从而更准确地定位车牌位置。
车牌定位后,要对车牌进行一些预处理,如去除噪声,边缘细化等。然后对车牌字符进行切分处理。本文字符切分处理采用基于投影特征值的方法,对于数字及字符,由于它们都属于连体字,因此只需在字符或数字之间找到一条无边的空白区(窄的区域),即可实现数字及字符之间的切分处理。
将车牌字符切分之后,最后是字符和数字的识别。车牌字符和数字是由国家制定的标准字符,本文采用基于BP神经网络算法,通过建立字符库,训练网络使之具有区分34个不同字符的能力,最终实现车牌字符的识别。
2 车牌字符库的建立
字符库的建立是为字符的识别作准备的,字符库要求每个字符按一定标准保存,如保存格式一致,大小规格相同,每个字符的数目相同等等。在论文中,只对数字及字母作研究,对汉字不作研究,所以共计34个不同各类的字符。数字0和字母o,数字1和i为均认为是同一字符。每个字符用程序获取10个不尽相同的字符。字符库的建立是为了训练BP神经网络的样本。
2.1 图像的缩放技术
在计算机图像处理中,图像缩放是指对数字图像的大小进行调整的过程。图像缩放是一种非平凡的过程,需要在处理效率以及结果的平滑度和清晰度上做一个权衡。当一个图像的大小增加之后,组成图像的像素的可见度将会变得更高,从而使得图像表现得“软”。相反地,缩小一个图像将会增强它的平滑度和清晰度。
图像缩放的算法主要有近邻插值和双线性插值。
在本论文研究中,我采用近邻插值方法将每个字符都归一化到6*12的统一规格中去。
所谓的最近邻插值,通俗理解就是将每一个原像素原封不动地复制映射到扩展后对应四个像素中。
归一化前的各字符
归一化后各字符依次是
2.2 字符的保存
首先给字符编号,0—9分别编号为00—09。A—Z分别编号为10–33
字符的保存格式为.raw原始图像数据文件。命名依次为000.raw 到339.raw。
即不超过340的三位数加格式名.raw。前两位数代表这个字符的编号,第三位数n代表这字符是第n张字符。如某字符某名为089.raw即意味着这字符代表数字8,它在库中是第9张了(从第0张开始计数)。又如330.raw代表着这字符为字母Z,它是第0张.
为了使字符库的字符和待识别的字符尽量保持一致性,字符的建立是通过程序的方法获得的。具体做法如下:
1.分割车牌中的每个字符。
2.将各个字符逐一归一化到6*12统一标准
3.将归一化的字符按一定的标准命名保存即可。
最后得到了340张不同的共34种的格式为.raw的文件。用程序显示这些字符库如下图。
2.3 基于BP神经网络的字符识别
建立字符库后,设计识别字符的BP神经网络。
首先设计输入层及输出层。字符库中每个标本,均是612的标准二值图像。对字符的特征,我采用像素法。即某个字符的像素是255时,神经结点输入为0.9,像素值是0时,神经结点输入为0.1.这样输入层就有612共72个结点。输出层采用了34结点,如当导师信号为A编号10时,就在第10个结点设为0.9.其他均为0.1.(用0.1 0.9代替0和1已被许多学者证明是更精确)。
到此,用于进行车牌定位的BP神经网络模型有了输入层及输出层。即,输入层含72个神经结点(对应字符的每个像素),输出层34个神经结点(对应逻辑关系为属于编号第N个字符)。中间层设计为仅含50结点的一层(这个是实验过程中得出的一经验值,不保证最优)
设计好BP神经网络模型后,将车牌的字符投入训练,在网络收敛后可用(实际在论文完成的过程中,并没有出现收敛,而是达到训练次数后停止训练,这个次数10000*72是在实验过程中测试后决定的,同样不保证最优)。这时的神经网络可以认为是已具备区分34个不同字符的能力了(对于训练得到的宝贵权值保存到一个文件CharBpNet.txt中,以便在恢复网络时直接读取而节省大量的训练时间)。然后对任意的一个从车牌分割得到的字符进行归一化之理后,依次假设其分别是编号0到33.并且求出每个编号对应的误差,最后在34个不同的误差中找出最小的那个编号,找到的编号即对应的字符了。如:某分割的字符投入动作后得到的最小误差编号为10,那么 认为这个字符为A。
把从车牌分割下来的字符全部投入动作后得到的字符串即车牌的号码了。
3 项目工程
**项目分享: ** https://gitee.com/asoonis/htw