期末课程报告数字图像中车牌识别的matlab实现.docx
- 文档编号:11792768
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:18
- 大小:378.72KB
期末课程报告数字图像中车牌识别的matlab实现.docx
《期末课程报告数字图像中车牌识别的matlab实现.docx》由会员分享,可在线阅读,更多相关《期末课程报告数字图像中车牌识别的matlab实现.docx(18页珍藏版)》请在冰豆网上搜索。
期末课程报告数字图像中车牌识别的matlab实现
期末课程报告:
数字图像中车牌识别的matlab实现
数字图像处理期末课程报告
题目:
车牌识别的matlab实现
题目类型:
软件型
学院信息工程与自动化学院
专业:
计算机科学与技术
年级:
XXXX学号:
XXXXXXX
学生姓名:
xxx
指导教师:
xx
日期:
2012-6-8
摘要:
本次课程设计的目的是通过对基于MATLAB的字符识别的研究,以汽车牌照识别的设计为实例,详细介绍字符识别的相关原理。
整个汽车牌照识别的过程分为预处理、边缘提取、车牌定位、字符分割、字符识别五大模块,用MATLAB软件编程来实现每一个部分,最后识别出汽车牌照。
在研究的同时对其中出现的问题进行了具体分析,处理。
寻找出对于具体的汽车牌照识别过程的最好的方法。
关键词:
MATLAB字符识别车牌识别神经网络图像处理
实验工具:
MATLAB7.8(R2009a)。
车辆牌照识别流程:
基于MATLAB图像处理的汽车牌照识别,主要包括车牌定位、字符车牌分割、和车牌字符识别三个关键环节。
流程图如下:
原始图像
图像预处理
车牌定位
字符分割
字符数据库
字符识别
其中,
(1)原始图像:
由数码相机或其它扫描装置拍摄到的图像;(本实验图片由数码相机获得)
(2)图像预处理:
对动态采集到的图像进行灰度处理、边缘检测、腐蚀、膨胀、滤波、等处理排除图像干扰;
(3)车牌定位:
计算边缘图像的投影面积,寻找峰谷点,大致确定车牌位置,再计算此连通域内的宽高比,剔除不在域值范围内的连通域,最后得到的便为车牌区域;
(4)字符分割:
利用投影检测的字符定位分割方法得到单个的字符;
(5)字符数据库:
构造训练样本数据库,为第6步的字符识别建立字符模板数据库;
(6)字符识别:
通过基于模板匹配的OCR算法或基于人工神经网络的OCR算法,通过特征对比或训练识别出相关的字符,得到最后的汽车牌照,包括英文字母和数字。
实验内容及步骤
1.图像预处理:
预处理源代码:
>>I=imread('h:
\tuku\car1.jpg');%读取图像
figure();subplot(3,2,1),imshow(I),title('原始图像');
>>I1=rgb2gray(I);%转化为灰度图像
subplot(3,2,2),imshow(I1),title('灰度图像');
>>I2=edge(I1,'robert',0.09,'both');%采用robert算子进行边缘检测
subplot(3,2,3),imshow(I2),title('边缘检测后图像');
>>se=[1;1;1];%线型结构元素
I3=imerode(I2,se);%腐蚀图像
subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');
>>se=strel('rectangle',[25,25]);%矩形结构元素
I4=imclose(I3,se);%图像聚类、填充图像
subplot(3,2,5),imshow(I4),title('填充后图像');
>>I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分
subplot(3,2,6),imshow(I5),title('形态滤波后图像');
预处理结果截图:
行列方向像素值累计值:
源代码:
[y,x,z]=size(I5);
I6=double(I5);
Y1=zeros(y,1);
fori=1:
y
forj=1:
x
if(I6(i,j,1)==1)
Y1(i,1)=Y1(i,1)+1;
end
end
end
[tempMaxY]=max(Y1);
figure();
subplot(3,2,1),plot(0:
y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素');
运行截图:
2.车牌定位——车牌起始位置和终止位置
PY1=MaxY;
while((Y1(PY1,1)>=45)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while((Y1(PY2,1)>=45)&&(PY2 PY2=PY2+1; end IY=I(PY1: PY2,: : ); X1=zeros(1,x); forj=1: x fori=PY1: PY2 if(I6(i,j,1)==1) X1(1,j)=X1(1,j)+1; end end end subplot(3,2,2),plot(0: x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('像数'); 3.图片二值化 代码: ifisrgb(DW) I1=rgb2gray(DW);%将RGB图像转化为灰度图像 elseI1=I;end g_max=double(max(max(I1))); g_min=double(min(min(I1))); T=round(g_max-(g_max-g_min)/3);%T为二值化的阈值 [m,n]=size(I1);%d: 二值图像 %h=graythresh(I1); I1=im2bw(I1,T/256); subplot(3,2,4); imshow(I1),title('二值化车牌图像'); 运行截图: 滤波二值化图像: I2=bwareaopen(I1,20); subplot(3,2,5); imshow(I2),title('形态学滤波后的二值化图像'); 过滤出目标车牌区域: [y1,x1,z1]=size(I2); I3=double(I2); TT=1; %%%%%%%去除图像顶端和底端的不感兴趣区域%%%%% Y1=zeros(y1,1); fori=1: y1 forj=1: x1 if(I3(i,j,1)==1) Y1(i,1)=Y1(i,1)+1; end end end Py1=1; Py0=1; while((Y1(Py0,1)<20)&&(Py0 Py0=Py0+1; end Py1=Py0; while((Y1(Py1,1)>=20)&&(Py1 Py1=Py1+1; end I2=I2(Py0: Py1,: : ); subplot(3,2,6); imshow(I2),title('目标车牌区域'); 运行截图: 4.列方向像素点灰度值累计 代码: X1=zeros(1,x1); forj=1: x1 fori=1: y1 if(I3(i,j,1)==1) X1(1,j)=X1(1,j)+1; end end end figure(5); plot(0: x1-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('累计像素量'); 运行截图: 5.字符分割: Px0=1; Px1=1; figure(); fori=1: 7 while((X1(1,Px0)<3)&&(Px0 Px0=Px0+1; end Px1=Px0; while(((X1(1,Px1)>=3)&&(Px1 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 运行结果: 6.建立字符模板数据库 1)将下列图片存到相应的图片库中,待之后检测比对时用。 (注: 每个字符图像要单独存放为.jpg文件。 ) 2)新建一个自定义函数pretreatment.m文件,对这些图片进行统一处理: 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 7.归一化训练 代码: I0=pretreatment(imread('h: \tuku\0.jpg')); I1=pretreatment(imread('h: \tuku\1.jpg')); I2=pretreatment(imread('h: \tuku\2.jpg')); I3=pretreatment(imread('h: \tuku\3.jpg')); I4=pretreatment(imread('h: \tuku\4.jpg')); I5=pretreatment(imread('h: \tuku\5.jpg')); I6=pretreatment(imread('h: \tuku\6.jpg')); I7=pretreatment(imread('h: \tuku\7.jpg')); I8=pretreatment(imread('h: \tuku\8.jpg')); I9=pretreatment(imread('h: \tuku\9.jpg')); I10=pretreatment(imread('h: \tuku\A.jpg')); I11=pretreatment(imread('h: \tuku\B.jpg')); I12=pretreatment(imread('h: \tuku\C.jpg')); I13=pretreatment(imread('h: \tuku\D.jpg')); I14=pretreatment(imread('h: \tuku\G.jpg')); I15=pretreatment(imread('h: \tuku\K.jpg')); I16=pretreatment(imread('h: \tuku\L.jpg')); I17=pretreatment(imread('h: \tuku\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);%训练样本 测试字符代码: 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 第二次训练 第二次识别结果 第三次训练第三次识别结果 第四次训练第四次识别结果 结果分析: 车辆牌照识别,对于交通管理、治安处罚等工作的智能化起着十分重要的作用。 它可广泛应用于交通流量检测,交通控制于诱导,机场,港口,小区的车辆管理,不停车自动收费,闯红灯等违章车辆监控以及车辆安全防盗等领域,具有广阔的应用前景。 由于牌照是机动车辆管理的唯一标识符号,因此,车辆牌照识别系统的研究在机动车管理方面具有十分重要的实际意义。 本设计有以下几条优点: (1)充分利用MATLAB中已有的函数库,使整个程序设计简单易行; (2)使用了MATLAB的自定义函数功能,使程序设计更简洁 但也发现了更多的缺点: (1)程序的局限性: 只能针对图像中一辆汽车的牌照进行识别;对于图像内的元素较复杂的照片可能无法进行识别。 (2)神经网络的训练要花费30秒以上的训练时间才能进行下一步的字符识别,效率太慢。 (3)程序可能会受软件环境的影响识别准确性,据测试,MATLAB的2010a版比2009a版识别效率高,准确性也高点。 本次实验中进行了三次样本训练,每次识别结果都没有和预期的相符,修改了函数参数也同样没有很大的改善。 或者与拍摄的图像质量有关系。 通过本次实验,进一步学习掌握了数字图像方面的知识,对matlab软件也有了一定的学习认识。 增强了自己的专业能力,培养了自己在数字图像方面的兴趣。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 期末 课程 报告 数字图像 车牌 识别 matlab 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)