车牌识别程序范本模板.docx
《车牌识别程序范本模板.docx》由会员分享,可在线阅读,更多相关《车牌识别程序范本模板.docx(11页珍藏版)》请在冰豆网上搜索。
![车牌识别程序范本模板.docx](https://file1.bdocx.com/fileroot1/2023-4/20/1a9f82b4-b9ff-497f-bbda-f805b464e0e9/1a9f82b4-b9ff-497f-bbda-f805b464e0e91.gif)
车牌识别程序范本模板
《数字图像与计算机视觉》
期末实验报告
专业名称:
学生姓名:
学号:
题目一:
车牌识别系统(LRP)
一、实验目的
1、了解车牌识别系统及其应用;
2、结合本门课程所学内容,设计一个车牌识别系统并实现。
二、实验内容
1、车牌识别系统的图像预处理
2、车牌定位、
3、字符分割
4、字符识别
三、主要步骤
车辆牌照识别(LPR)系统是一个专用的计算机视觉系统,它能够自动地摄取车辆图像和识别车牌号码,可应用在公路自动收费、停车场管理、失窃车辆侦察、门卫系统、智能交通系统等不同场合。
LPR系统的广泛应用将有助于加快我国交通管理自动化的进程。
本实验完成车牌识别的系统流程图如下:
1、预处理
摄像时的光照条件,牌照的整洁程度,摄像机的状态(焦距,角度和镜头的光学畸变),以及车速的不稳定等因素都会不同程度的影响图像效果,出现图像模糊,歪斜或缺损,车牌字符边界模糊不清,细节不清,笔画断开,粗细不均等现象,从而影响车牌区域的分割与字符识别的工作,所以识别之前要进行预处理.
预处理的包括:
1)消除模糊-—
用逆滤波处理消除匀速运动造成的图像运动模糊
2)图像去噪。
通常得到的汽车图像会有一些污点,椒盐噪声,应用中值滤波
3)图像增强
自然光照度的昼夜变化会引起图像对比度的不足,所以必须图像增强,可以采用灰度拉伸,直方图均衡等
通过以上处理,提高了图像的质量,强化了图像区域。
2、车牌定位
从背景中准确地确定牌照区域是整个识别过程的关键。
首先对采集到的图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图象中分割出来。
由于车牌区域大部分为蓝色,根据这个特性可以定位到车牌区域,而对于蓝色车系来说,可以通过腐蚀的方法解决。
具体算法流程如下:
结果如图:
图1车牌定位
图2车牌分割
3、字符分割:
完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。
具体流程如下
结果如图:
图3分割出的七张图片
4、字符识别:
本文基于模板匹配算法对分割出来的字符图片进行识别。
具体流程如下:
结果如下:
桂AC3692
四、实验结果分析
本实验的汽车号牌识别系统是针对车牌为蓝底白字,7个字符水平排列的汽车车牌进行研究。
有些光照条件不理想的图片,需要先进行图象增强处理,再进行车牌定位和分割,这样可以提高分割的成功率。
色彩通道的车牌区域分割算法充分利用了车牌图象的色彩信息,简化了算法的实现,加快了图象的处理速度,具有较高的正确率,而且整个程序用MATLAB语言编程实现,运算速度快。
但是也存在一些识别效果不是很理想的图片,这些图片需要做一些前提工作后才能识别出相应的字符。
(2)车牌定位和分割中利用的车牌区域的宽度信息以及字符尺寸信息,是根据经验测算出来的;
(3)由于基于寻找连续有文字的块的字符分割方法容易受噪声和环境光线变化的影响,所以在车牌字符分割的预处理中,需要对分割出的字符车牌进行均值滤波,膨胀或腐蚀的处理。
经过这些处理可以把字符与字符之间的杂色点去除,只有白色的字符和黑色的背景存在,有利于的字符分割进行
(4)字符识别方法中运用模板匹配的方法,方法简洁但识别率较低。
模板匹配法,是利用要识别的字符图片与字符库中的图片进行两幅图片相减的方法,找到相减后值最小的图片,其相似程度最大的。
模板库的字符制作很重要,必须要用精确的模板,否则就不能正确的识别。
附录:
%functioncarreco
closeall
clearall;
%==========================================================
%说明:
%
%
%===========================================================
%==============测定算法执行的时间,开始计时=================
tic
%=====================读入图片================================
[fn,pn,fi]=uigetfile(’*.jpg','选择图片');
I=imread([pnfn]);figure,imshow(I);title(’原始图像’);%显示原始图像
chepailujing=[pnfn]
I_bai=I;
[PY2,PY1,PX2,PX1]=caitu_fenge(I);
[UV]=size(I);
%===============车牌区域根据面积二次修正======================
[PY2,PY1,PX2,PX1,threshold]=SEC_xiuzheng(PY2,PY1,PX2,PX1);
%==============更新图片=============================
Plate=I_bai(PY1:
PY2,PX1:
PX2,:
);%使用caitu_tiqu
holdon;
line1=[1PY1;VPY1];
plot(line1(:
1),line1(:
,2),'y—’,’LineWidth',2);pause(1.5);
holdon;
line2=[1PY2;VPY2];
plot(line2(:
1),line2(:
,2),'r—’,’LineWidth’,2);pause(1.5);
holdon;
line3=[PX11;PX1U];
plot(line3(:
,1),line3(:
,2),'g—',’LineWidth’,2);pause(1.5);
holdon;
line4=[PX21;PX2U];
plot(line4(:
1),line4(:
2),’b-','LineWidth',2);
%==============考虑用腐蚀解决蓝色车问题=============
bw=Plate;figure,imshow(bw);title(’车牌图像');%hsv彩图提取图像
%==============这里要根据图像的倾斜度进行选择这里选择的图片20090425686。
jpg
bw=rgb2gray(bw);figure,imshow(bw);title(’灰度图像');
%================倾斜校正======================
qingxiejiao=rando_bianhuan(bw)
bw=imrotate(bw,qingxiejiao,’bilinear’,'crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转
%==============================================
bw=im2bw(bw);%figure,imshow(bw);
bw=bwmorph(bw,’hbreak',inf);%figure,imshow(bw);
bw=bwmorph(bw,’spur',inf);%figure,imshow(bw);title('擦除之前’);
bw=bwmorph(bw,’open’,5);%figure,imshow(bw);title('闭合运算’);
bw=bwareaopen(bw,threshold);figure,imshow(bw);title('擦除');
%==================加入进度条================================
%h=waitbar(0,’程序运行中,请稍等..。
.。
.')
%fori=1:
10000
%waitbar(i/5000,h)
%end
%close(h);
%wavplay(wavread(’程序运行中.wav'),22000);
%==========================================================
bw=~bw;figure,imshow(bw);title(’擦除反色');
%=============对图像进一步裁剪,保证边框贴近字体===========
bw=touying(bw);figure;imshow(bw);title('Y方向处理');
bw=~bw;
bw=bwareaopen(bw,threshold);
bw=~bw;%figure,imshow(bw);title('二次擦除’);
[y,x]=size(bw);%对长宽重新赋值
%=================文字分割=================================
fenge=shuzifenge(bw,qingxiejiao)
[m,k]=size(fenge);
%=================显示分割图像结果=========================
figure;
fors=1:
2:
k-1
subplot(1,k/2,(s+1)/2);imshow(bw(1:
y,fenge(s):
fenge(s+1)));
end
%================给七张图片定位===============桂AV6388
han_zi=bw(1:
y,fenge
(1):
fenge
(2));imshow(han_zi);
zi_mu=bw(1:
y,fenge(3):
fenge(4));
zm_sz_1=bw(1:
y,fenge(5):
fenge(6));
zm_sz_2=bw(1:
y,fenge(7):
fenge(8));
shuzi_1=bw(1:
y,fenge(9):
fenge(10));
shuzi_2=bw(1:
y,fenge(11):
fenge(12));
shuzi_3=bw(1:
y,fenge(13):
fenge(14));
%==========================识别====================================
%======================把修正数据读入==============================
xiuzhenghanzi=imresize(han_zi,[11055],'bilinear’);
xiuzhengzimu=imresize(zi_mu,[11055],'bilinear’);
xiuzhengzm_sz_1=imresize(zm_sz_1,[11055],'bilinear');
xiuzhengzm_sz_2=imresize(zm_sz_2,[11055],'bilinear’);
xiuzhengshuzi_1=imresize(shuzi_1,[11055],'bilinear');
xiuzhengshuzi_2=imresize(shuzi_2,[11055],'bilinear');
xiuzhengshuzi_3=imresize(shuzi_3,[11055],’bilinear');
%============把0—9,A-Z以及省份简称的数据存储方便访问====================
hanzishengfen=duquhanzi(imread('cpgui.bmp'),imread('cpguizhou。
bmp’),imread('cpjing.bmp’),imread('cpsu.bmp'),imread('cpyue。
bmp’));
%因数字和字母比例不同.这里要修改
shuzizimu=duquszzm(imread(’0。
bmp'),imread('1。
bmp’),imread(’2.bmp'),imread(’3。
bmp’),imread(’4.bmp'),。
.。
imread('5。
bmp'),imread('6。
bmp’),imread('7。
bmp’),imread('8。
bmp’),imread(’9.bmp’),。
..
imread(’10.bmp’),imread('11.bmp’),imread(’12.bmp'),imread('13。
bmp’),imread('14。
bmp'),..。
imread('15。
bmp'),imread(’16。
bmp'),imread(’17。
bmp’),imread('18.bmp'),imread(’19。
bmp'),。
。
。
imread('20.bmp’),imread(’21.bmp'),imread(’22.bmp'),imread('23.bmp’),imread('24.bmp'),。
..
imread(’25.bmp’),imread('26。
bmp'),imread(’27.bmp’),imread(’28。
bmp’),imread('29.bmp’),。
。
。
imread('30.bmp’),imread(’31。
bmp’),imread(’32。
bmp'),imread(’33.bmp'));
zimu=duquzimu(imread(’10.bmp’),imread('11。
bmp'),imread('12。
bmp’),imread('13。
bmp'),imread('14。
bmp’),.。
。
imread('15。
bmp’),imread('16.bmp'),imread(’17.bmp'),imread(’18。
bmp'),imread(’19.bmp’),...
imread(’20.bmp'),imread(’21.bmp’),imread(’22。
bmp'),imread('23.bmp'),imread('24.bmp'),.。
。
imread('25。
bmp’),imread('26.bmp’),imread('27。
bmp’),imread('28.bmp’),imread('29。
bmp’),。
。
。
imread(’30.bmp'),imread(’31。
bmp’),imread(’32。
bmp'),imread(’33.bmp'));
shuzi=duqushuzi(imread(’0。
bmp’),imread('1。
bmp'),imread(’2.bmp'),imread('3.bmp'),imread(’4.bmp’),..。
imread(’5。
bmp’),imread('6.bmp'),imread(’7。
bmp’),imread(’8.bmp'),imread('9。
bmp'));
%============================识别结果================================
i=1;%shibiezm_sz该函数识别数字有问题
jieguohanzi=shibiehanzi(hanzishengfen,xiuzhenghanzi);shibiejieguo(1,i)=jieguohanzi;i=i+1;
jieguozimu=shibiezimu(zimu,xiuzhengzimu);shibiejieguo(1,i)=jieguozimu;i=i+1;
jieguozm_sz_1=shibiezm_sz(shuzizimu,xiuzhengzm_sz_1);shibiejieguo(1,i)=jieguozm_sz_1;i=i+1;
jieguozm_sz_2=shibiezm_sz(shuzizimu,xiuzhengzm_sz_2);shibiejieguo(1,i)=jieguozm_sz_2;i=i+1;
jieguoshuzi_1=shibieshuzi(shuzi,xiuzhengshuzi_1);shibiejieguo(1,i)=jieguoshuzi_1;i=i+1;
jieguoshuzi_2=shibieshuzi(shuzi,xiuzhengshuzi_2);shibiejieguo(1,i)=jieguoshuzi_2;i=i+1;
jieguoshuzi_3=shibieshuzi(shuzi,xiuzhengshuzi_3);shibiejieguo(1,i)=jieguoshuzi_3;i=i+1;
%==========================对话框显示显示=============================================
shibiejieguo
msgbox(shibiejieguo,’识别结果’);
%=====================导出文本==================
fid=fopen(’Data。
xls','a+’);
fprintf(fid,'%s\r\n',shibiejieguo,datestr(now));
fclose(fid);
%================读取计时==========================
t=toc
%=======================================