Px1=Px1+1;
end
Z=I2(:
Px0:
Px1,:
);
switchstrcat('Z',num2str(i))
case'Z1'
PIN0=Z;
case'Z2'
PIN1=Z;
case'Z3'
PIN2=Z;
case'Z4'
PIN3=Z;
case'Z5'
PIN4=Z;
case'Z6'
PIN5=Z;
otherwise
PIN6=Z;
end
subplot(1,7,i);
imshow(Z);
Px0=Px1;
end
分割成七块后的车牌图像
5.建立字符模板数据库
模板库的合理建造是字符识别准确的关键之一,所以在字符识别之前必须把模板库设置好。
汽车牌照的字符一般有7个,大部分车牌第一位是汉字,通常代表车辆所属省份,或是军种警别等有特定含义的字符简称;紧接其后的为字母与数字。
车牌字符识别与一般文字识别在于它的字符数有限,十个阿拉伯数字0~9,26个大写英文字母A~Z以及相关的车牌用汉字:
京、沪、苏、台、港、澳、甲、乙、丙、使、领、学、试、境、消、边、警等,以及新式军牌中的汉字南、兰、广、北、沈、济、空、海等;车牌颜色:
蓝、白、黑、黄等。
所以建立字符模板库也极为方便。
通过前面实验获取的几幅不同的车牌图片截取到的图片加上使用PhotoShop制作的部分图片如下:
建立模板数据库时必须对这些图片进行统一处理,因为对前面处理分割后的车牌图像的测量得知单个字符的最佳宽高比是1:
2,所以将这些图片归一化为50×25大小;因为之后的字符识别考虑使用神经网络算法进行字符识别,所以再将上面归一化后的模板图像的样本排列在一起构成1250×18的矩阵样本,程序设计如下:
functioninpt=Pretreatment(I)
%%训练样本前期处理
ifisrgb(I)
I1=rgb2gray(I);
else
I1=I;
end
I1=imresize(I1,[5025]);%将图片统一划为50*25大小
I1=im2bw(I1,0.9);
[m,n]=size(I1);
inpt=zeros(1,m*n);
%%将图像按列转换成一个行向量
forj=1:
n
fori=1:
m
inpt(1,m*(j-1)+i)=I1(i,j);
end
end
这是一个自定义函数的Pretreatment.m文件,可以解决频繁写重复代码的问题,前面的图像预处理及车牌定位的代码可以写进Location.m文件中,通过代码DW=Location(I);取得车牌定位后的图像;同时字符分割的代码亦可写进StringSplit.m文件中,可以通过代码[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(DW);取得的字符分割后的图像。
6.字符识别
字符的识别目前用于车牌字符识别(OCR)中的算法主要有基于模板匹配的OCR算法以及基于人工神经网络的OCR算法。
基于模板匹配的OCR的基本过程是:
首先对待识别字符进行二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,最后选最佳匹配作为结果。
用人工神经网络进行字符识别主要有两种方法:
一种方法是先对待识别字符进行特征提取,然后用所获得的特征来训练神经网络分类器。
识别效果与字符特征的提取有关,而字符特征提取往往比较耗时。
因此,字符特征的提取就成为研究的关键。
另一种方法则充分利用神经网络的特点,直接把待处理图像输入网络,由网络自动实现特征提取直至识别。
本文主要研究基于人工神经网络的方法来识别车牌字符。
设计代码如下:
closeall;
clearall;
%%归一化训练样本
I0=pretreatment(imread('BP/0.jpg'));
I1=pretreatment(imread('BP/1.jpg'));
I2=pretreatment(imread('BP/2.jpg'));
I3=pretreatment(imread('BP/3.jpg'));
I4=pretreatment(imread('BP/4.jpg'));
I5=pretreatment(imread('BP/5.jpg'));
I6=pretreatment(imread('BP/6.jpg'));
I7=pretreatment(imread('BP/7.jpg'));
I8=pretreatment(imread('BP/8.jpg'));
I9=pretreatment(imread('BP/9.jpg'));
I10=pretreatment(imread('BP/A.jpg'));
I11=pretreatment(imread('BP/B.jpg'));
I12=pretreatment(imread('BP/C.jpg'));
I13=pretreatment(imread('BP/D.jpg'));
I14=pretreatment(imread('BP/G.jpg'));
I15=pretreatment(imread('BP/K.jpg'));
I16=pretreatment(imread('BP/L.jpg'));
I17=pretreatment(imread('BP/M.jpg'));
P=[I0',I1',I2',I3',I4',I5',I6',I7',I8',I9',I10',I11',I12',I13',I14',I15',I16',I17'];
T=eye(18,18);%输出样本
%%bp神经网络参数设置
net=newff(minmax(P),[1250,32,18],{'logsig','logsig','logsig'},'trainrp');
net.inputWeights{1,1}.initFcn='randnr';
net.layerWeights{2,1}.initFcn='randnr';
net.trainparam.epochs=5000;
net.trainparam.show=50;
%net.trainparam.lr=0.003;
net.trainparam.goal=0.0000000001;
net=init(net);
[net,tr]=train(net,P,T);%训练样本
%%测试
I=imread('CAR/0.jpg');
DW=Location(I);%车牌定位
[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(DW);%字符分割及处理
%%测试字符,得到识别数值
PIN0=pretreatment(PIN0);
PIN1=pretreatment(PIN1);
PIN2=pretreatment(PIN2);
PIN3=pretreatment(PIN3);
PIN4=pretreatment(PIN4);
PIN5=pretreatment(PIN5);
PIN6=pretreatment(PIN6);
P0=[PIN0',PIN1',PIN2',PIN3',PIN4',PIN5',PIN6'];
fori=2:
7
T0=sim(net,P0(:
i));
T1=compet(T0);
d=find(T1==1)-1;
if(d==10)
str='A';
elseif(d==11)
str='B';
elseif(d==12)
str='C';
elseif(d==13)
str='D';
elseif(d==14)
str='G';
elseif(d==15)
str='K';
elseif(d==16)
str='L';
elseif(d==17)
str='M';
elseif(d==0)
str='0';
elseif(d==1)
str='1';
elseif(d==2)
str='2';
elseif(d==3)
str='3';
elseif(d==4)
str='4';
elseif(d==5)
str='5';
elseif(d==6)
str='6';
elseif(d==7)
str='7';
elseif(d==8)
str='8';
elseif(d==9)
str='9';
else
str=num2str(d);
end
switchi
case2
str2=str;
case3
str3=str;
case4
str4=str;
case5
str5=str;
case6
str6=str;
otherwise
str7=str;
end
end
%%识别出的结果以标题形式显示在图上
S=strcat('粤',str2,str3,str4,str5,str6,str7);
figure();
imshow(DW),title(S);
第一次训练后识别出的车牌号码:
发现第二个字符识别错误,在进行第二次识别:
可以看出完成了准确识别车牌的目的。
三、总结
在汽车车牌识别的整个过程中,查找了很多资料,综合了各方面的信息。
车牌实现的每一步都有许多的方法,各种方法都有其优劣,但是对于具体的图像处理,并不是每一种理论在实践中都可以实现,即使实现了也很难说哪一种方法最合适,还得在具体的实验中比较选择。
第二点在程序调试的过程中要耐心的检查每一个错误。
测试结果表明,本设计有以下几条优点:
(1)充分利用MATLAB中已有的函数库,使整个程序设计简单易行;
(2)使用了MATLAB的自定义函数功能,使程序设计更简洁。
但也发现了更多的缺点:
(1)程序的局限性:
只能针对图像中一辆汽车的牌照进行识别;对于图像内的元素较复杂的照片可能无法进行识别。
(2)神经网络的训练要花费30秒以上的训练时间才能进行下一步的字符识别,效率太慢。
(3)程序可能会受软件环境的影响识别准确性,据测试,MATLAB的2010a版比2009a版识别效率高,准确性也高点。
车牌识别程序设计能够得以顺利完成。
在很大程度上得利于MATLAB这套软件,MATLAB功能强大,它包括数值计算和符号计算,并且计算结果和编程可视化。
这为编程调试创造了一个便利的环境。
作为图像处理最适用的工具之一,其突出的特点是它包含一个图像处理工具包,这个工具包由一系列支持图像处理操作的函数组成。
所支持的图像处理操作有:
图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等)、图像分析和统计、二值图像操作等。
在图像的显示方面,MATLAB提供了图像文件读入函数imread(),用来读取如:
bmp、tif、jpg、pcx、tiff、jpeg、hdf、xwd等格式图像文件;图像写出函数imwrite(),还有图像显示函数image()、imshow()等等。
这些,都使编程效率大为提高。
参考文献
[1]冈萨雷斯《数字图像处理》第二版
[2]MATLAB从入门到精通].周建兴2008
[4]S.J.Chapman《MATLAB编程》2008
[5]《MATLAB7_0基础教程》清华大学2005
[6]苏金明《Matlab图形图像》2005
[7]《基于MATLAB图像处理的汽车牌照识别系统》仇成群2008(6)
[8]许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)
[9]一种复杂车辆图像中的多车牌定位方法,光子学报2007
(1)Vol.36No.1
[10]基于图像处理的汽车牌照的识别,陈秋菊
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
学位论文原创性声明
本人郑重声明:
所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:
日期:
年月日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:
日期:
年月日
导师签名:
日期:
年月日
指导教师评阅书
指导教师评价:
一、撰写(设计)过程
1、学生在论文(设计)过程中的治学态度、工作精神
□优□良□中□及格□不及格
2、学生掌握专业知识、技能的扎实程度
□优□良□中□及格□不及格
3、学生综合运用所学知识和专业技能分析和解决问题的能力
□优□良□中□及格□不及格
4、研究方法的科学性;技