求垂直投影的平均值 求垂直投影的最小值 取阈值 计算字符上升点 计算谷宽度 计算字符距离 找到字符中心位置
图2.11垂直投影图像和车牌字符高度 程序流程图
c.计算车牌上每个字符中心位置,计算最大字符宽度maxwidth l=0; for k=1:n1
markcol3(k)=markcol(k+1)-markcol1(k+1);%字符下降点
markcol4(k)=markcol3(k)-markcol(k); %字符宽度(上升点至下降点) markcol5(k)=markcol3(k)-double(uint16(markcol4(k)/2));%字符中心位置end
markcol6=diff(markcol5); %字符中心距离(字符中心点至下一个字符中心点) maxs=max(markcol6); %查找最大值,即为第二字符与第三字符中心距离 findmax=find(markcol6==maxs); markcol6(findmax)=0;
maxwidth=max(markcol6);%查找最大值,即为最大字符宽度 d.提取分割字符,并变换为22行*14列标准子图 l=1;
[m2,n2]=size(subcol); figure;
for k=findmax-1:findmax+5
cleft=markcol5(k)-maxwidth/2; cright=markcol5(k)+maxwidth/2-2;
16
if cleft<1 cleft=1; cright=maxwidth; end
if cright>n2 cright=n2; cleft=n2-maxwidth; end
SegGray=sbw(rowtop:rowbot,cleft:cright); SegBw1=sbw(rowtop:rowbot,cleft:cright);
SegBw2 = imresize(SegBw1,[22 14]); %变换为22行*14列标准子图 subplot(2,n1,l),imshow(SegGray); if l==7
title(['车牌字符宽度: ',int2str(maxwidth)],'Color','r'); end
subplot(2,n1,n1+l),imshow(SegBw2);
fname=strcat('F:\\MATLAB\\work\\sam\\image',int2str(k),'.jpg');%保存子图备选入样本库,并建立样本库
imwrite(SegBw2,fname,'jpg') l=l+1; end
2.12将计算计算获取的字符图像与样本库进行匹配,自动识别出字符代码:
进行车牌识别前需要使用样本对神经网络进行训练,然后使用训练好的网络对车牌进行识别。其具体流程为:使用汉字、字母、字母数字、数字四个样本分别对四个子网络进行训练,得到相应的节点数和权值。对已经定位好的车牌进行图像预处理,逐个的特征提取,然后从相应的文件中读取相应的节点数和权值,把车牌字符分别送入相应的网络进行识别,输出识别结果。
17
建立数据库 样本与数据库中图片相减 计算误差 找到误差最小图片 依次识别并识别 程序流程图 图2.12识别的车牌号码
四、设计结果及分析
原始图像: 预处理后:
车牌定位和提取: 字符的分割和识别:
18
可以看出对于这个车牌,可以准确的识别。
原始图像: 预处理:
车牌的定位和提取: 字符的分割和识别:
从上面结果可以看出,这张车牌的识别失败了,将G误识别为B了,K误识为A,0识别为8,这在识别中是非常容易出错的地方,因此需要在其他方面做些弥补,最后达到识别效果。
在车牌识别的过程中数字库的建立很重要,只有数字库的准确才能保证检测出来的数据正确。切割出来的数据要与数据库的数据作比较,所以数据库的数据尤为重要。
五、总结:
实验对车牌识别系统的软件部分进行了研究,分别从图像预处理、车牌定位、字符分割以及字符识别等方面进行了系统的分析。整理和总结了国内外在车牌定位、分割、字符识别方面的研究成果和发展方向,系统介绍了我国车牌的固有特征,以及车牌识别的特点。在车牌定位我们采用基于灰度跳变的定位方法,采用先对图像进行预处理,再进行二值化操作的方法。实验表明本方法既保留了车牌区域的信息,又减少了噪声的干扰,从而简化了二值化处理过程,提高了后续处理的速度。基于彩色分量的定位方法,
19
运用基于蓝色象素点统计特性的方法对车牌是蓝色的车牌进行定位,实验表明,用该方法实现的车牌定位准确率较高。本设计用MATLAB编程运行结果可以得出,本设计采用的图像预处理、CANNY边缘检测、开闭运算子[5,19]、车牌长宽比特征识别等对车牌的定位都是非常有效的,而本设计提出的二次水平投影分析和阈值技术有效检测了车牌图像的上下左右边框、旋转角度,准确实现的车牌字符的分割,对多个车牌进行实验,均有很高的正确率。本设计虽然只对蓝底白字车牌进行分割识别,对黑底白字车牌原则上整个算法可直接适用,对白底黑字车牌、黄底黑字车牌,需要对车牌定位算法进行调整,并将图像反转(0变1、1变0),而车牌字符的分割算法仍然行之有效。
六、设计体会
经过几周的奋战我的课程设计终于完成了。课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。以前老是觉得自己什么东西都不会,什么东西都不懂,而且又急于求成,结果造成什么都没学好,还是什么都不会。通过这次课程设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质,特别是对于我,基础比较差,一定不能太过于心急,要静下心来慢慢的研究。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学,我也明白学习不是埋头苦读书,而是合理的利用资源,从同学那里,老师那里得到的有用的想法和信息,特别是网上有很多很好的资料,对自己的自学能力也是很好的提高。我的心得也就这么多了,总之,不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。也不能因为做出来就以为自己什么都懂了,在很多的地方还需要进一步的去学习和研究,就想这个课程设计虽然能实现车牌识别的功能,但是识别率还是还是非常低的,只是在理论上能行得通,根本不可能运用到商业上,因此在接下来的工作中,应该去找更好的方法来提高识别率。以前对MATLAB也是仅局限在数学实验上学的那些知识,但是通过此次的课程设计,才了解到MATLAB在图形图像处理方面的强大功能,这些事C/C++不能所及的。在此要感谢我们的指导老师叶老师对我们悉心的指导,感谢老师给我们的帮助,以前我是不相信我能做出来的,是您的鼓励让我重新找到自信。在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造
20
过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。
七、参考文献:
[1] 陈桂明、张明照、戚红雨.应用MATLAB语言处理数字信号与数字图像。科学出版社,2000
[2] 霍宏涛.数字图像处理.机械工业出版社,2003.5
[3] 郁梅等,基于视觉的车辆牌照检测,计算机应用研究,1999(5),P65~67
[4] 叶晨洲,廖金周,一种基于纹理的牌照图象二值化方法,微型电脑应用,1999(6),P28~29
[5] 周妮娜、王敏、黄心汉、吕雪峰、万国红.车牌字符识别的预处理算法.计算机工程与应用,2003(15)
[6] 杨万山等,基于BP 神经网络的工程图纸图形符号的识别,微型电脑应用,Vol.16,No.2,2000
[7] 王年、李婕、任彬、汪炳权.多层次汽车车牌照定位分割方法. 安徽大学学报,1999(6)Vol.23.No.2
[8] 崔 江、王友仁.车牌自动识别方法中的关键技术研究.计算机测量与控制,2003.11(4)
[9] 许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)
21