matlab车牌识别程序代码Word文档格式.docx
《matlab车牌识别程序代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《matlab车牌识别程序代码Word文档格式.docx(37页珍藏版)》请在冰点文库上搜索。
bw=Plate;
figure,imshow(bw);
车牌图像'
%hsv彩图提取图像
%==============这里要根据图像的倾斜度进行选择这里选择的图片20090425686.jpg
bw=rgb2gray(bw);
灰度图像'
%================倾斜校正======================
qingxiejiao=rando_bianhuan(bw)
bw=imrotate(bw,qingxiejiao,'
bilinear'
crop'
倾斜校正'
%取值为负值向右旋转
%==============================================
bw=im2bw(bw,graythresh(bw));
%figure,imshow(bw);
bw=bwmorph(bw,'
hbreak'
inf);
spur'
擦除之前'
open'
5);
闭合运算'
bw=bwareaopen(bw,threshold);
擦除'
%==================加入进度条================================
%h=waitbar(0,'
程序运行中,请稍等......'
)
%fori=1:
10000
%waitbar(i/5000,h)
%end
%close(h);
%wavplay(wavread('
程序运行中.wav'
),22000);
bw=~bw;
擦除反色'
%=============对图像进一步裁剪,保证边框贴近字体===========
bw=touying(bw);
imshow(bw);
Y方向处理'
二次擦除'
[y,x]=size(bw);
%对长宽重新赋值
%=================文字分割=================================
fenge=shuzifenge(bw,qingxiejiao)
[m,k]=size(fenge);
%=================显示分割图像结果=========================
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));
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],'
xiuzhengzimu=imresize(zi_mu,[11055],'
xiuzhengzm_sz_1=imresize(zm_sz_1,[11055],'
xiuzhengzm_sz_2=imresize(zm_sz_2,[11055],'
xiuzhengshuzi_1=imresize(shuzi_1,[11055],'
xiuzhengshuzi_2=imresize(shuzi_2,[11055],'
xiuzhengshuzi_3=imresize(shuzi_3,[11055],'
%============把0-9,A-Z以及省份简称的数据存储方便访问====================
hanzishengfen=duquhanzi(imread('
cpgui.bmp'
),imread('
cpguizhou.bmp'
cpjing.bmp'
cpsu.bmp'
cpyue.bmp'
));
%因数字和字母比例不同。
这里要修改
shuzizimu=duquszzm(imread('
0.bmp'
1.bmp'
2.bmp'
3.bmp'
4.bmp'
),...
imread('
5.bmp'
6.bmp'
7.bmp'
8.bmp'
9.bmp'
10.bmp'
11.bmp'
12.bmp'
13.bmp'
14.bmp'
15.bmp'
16.bmp'
17.bmp'
18.bmp'
19.bmp'
20.bmp'
21.bmp'
22.bmp'
23.bmp'
24.bmp'
25.bmp'
26.bmp'
27.bmp'
28.bmp'
29.bmp'
30.bmp'
31.bmp'
32.bmp'
33.bmp'
zimu=duquzimu(imread('
shuzi=duqushuzi(imread('
%============================识别结果================================
i=1;
%shibiezm_sz该函数识别数字有问题
jieguohanzi=shibiehanzi(hanzishengfen,xiuzhenghanzi);
shibiejieguo(1,i)=jieguohanzi;
i=i+1;
jieguozimu=shibiezimu(zimu,xiuzhengzimu);
shibiejieguo(1,i)=jieguozimu;
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;
jieguoshuzi_1=shibieshuzi(shuzi,xiuzhengshuzi_1);
shibiejieguo(1,i)=jieguoshuzi_1;
jieguoshuzi_2=shibieshuzi(shuzi,xiuzhengshuzi_2);
shibiejieguo(1,i)=jieguoshuzi_2;
jieguoshuzi_3=shibieshuzi(shuzi,xiuzhengshuzi_3);
shibiejieguo(1,i)=jieguoshuzi_3;
%==========================对话框显示显示=============================================
shibiejieguo
%%%%========后面的注释掉了(语音读出这一部分)===============
msgbox(shibiejieguo,'
识别结果'
%%=====================导出文本==================
%fid=fopen('
Data.xls'
a+'
%fprintf(fid,'
%s\r\n'
shibiejieguo,datestr(now));
%fclose(fid);
%%===================读出声音===================
%duchushengyin(shibiejieguo);
%================读取计时==========================
t=toc%%%记录程序运行时间
%============================================
自己编写的子函数
functionbw_fir=touying(imane_bw)
X_yuzhi=1;
[y,x]=size(imane_bw);
Y_touying=(sum((~imane_bw)'
))'
;
%往左边投影统计黑点
X_touying=sum((~imane_bw));
%往下面投影
%找黑体边缘
Y_up=fix(y/2);
Y_yuzhi=mean(Y_touying((fix(y/2)-10):
(fix(y/2)+10),1))/1.6;
while((Y_touying(Y_up,1)>
=Y_yuzhi)&
&
(Y_up>
1))%找到图片上边界
Y_up=Y_up-1;
end
Y_down=fix(y/2);
while((Y_touying(Y_down,1)>
(Y_down<
y))%找到图片上边界
Y_down=Y_down+1;
%去除左边边框干扰
X_right=1;
if(X_touying(1,fix(x/14)))<
=X_yuzhi
X_right=fix(x/14)
bw_fir=imane_bw(Y_up:
Y_down,X_right:
x);
functionfenge=shuzifenge(imfenge,qingxiejiao)
[y,x]=size(imfenge);
%===============用函数设定分割阈值========================
SS=x*y
ifSS<
=20000
shedingyuzhi=4;
elseifSS>
20000&
SS<
=30000
30000&
=50000
50000&
=80000
else
ganrao=SS/100;
%=========================================================
%定义数组histogram存储垂直方向的黑点数
histogram=sum(~imfenge);
%=================文字分割=============================
k=1;
forh=1:
x-1
if((histogram(1,h)<
=shedingyuzhi)&
(histogram(1,h+1)>
shedingyuzhi))||((h==1)&
histogram(1,h)>
shedingyuzhi)
fenge(1,k)=h;
k=k+1;
elseif((histogram(1,h)>
shedingyuzhi)&
(histogram(1,h+1)<
=shedingyuzhi))||((h==x-1)&
fenge(1,k)=h+1;
end
k=k-1;
%去掉多产生的一个K值
ifk<
10
msgbox('
提取出错'
警告'
wavplay(wavread('
提取出错.wav'
pause;
if(sum(histogram(1,fenge(1,1):
fenge(1,2)))<
ganrao)||((fenge(1,2)-fenge(1,1))<
(fenge(1,4)-fenge(1,3))/2)
fori=3:
k
fenge(1,i-2)=fenge(1,i);
[mn]=size(fenge);
ifn<
14
fenge=fenge(1,1:
14);
functionshibiezm_sz=shibiezm_sz(shuzizimu,xiuzhengzm_sz);
[y,x,z]=size(xiuzhengzm_sz);
fork=1:
34
sum=0;
fori=1:
y
forj=1:
x
ifshuzizimu(i,j,k)==xiuzhengzm_sz(i,j)%统计黑白
sum=sum+1;
baifenbi(1,k)=double(sum/(x*y));
chepai=find(baifenbi>
=max(baifenbi));
chepai=chepai(1,1);
%===================数字直接返回=========================
if(chepai>
=1)&
(chepai<
=10)
zm_sz=chepai-1;
zm_sz=num2str(zm_sz);
elseif(chepai>
=11)&
=34)
%==================字母对应序号转字母====================
%=========11-15ABCDE16-20FGHIJ21-25KLMNP26-30QRSTU31-35VWXYZ
ifchepai==11
zm_sz='
A'
elseifchepai==12
B'
elseifchepai==13
C'
elseifchepai==14
D'
elseifchepai==15
E'
elseifchepai==16
F'
elseifchepai==17
G'
elseifchepai==18
H'
elseifchepai==19
J'
elseifchepai==20
K'
elseifchepai==21
L'
elseifchepai==22
M'
elseifchepai==23
N'
elseifchepai==24
P'
elseifchepai==25
Q'
elseifchepai==26
R'
elseifchepai==27
S'
elseifchepai==28
T'
elseifchepai==29
U'
elseifchepai==30
V'
elseifchepai==31
W'
elseifchepai==32
X'
elseifchepai==33
Y'
elseifchepai==34
Z'
shibiezm_sz=zm_sz;
zm_sz