matlab车牌识别程序代码_第1页
matlab车牌识别程序代码_第2页
matlab车牌识别程序代码_第3页
matlab车牌识别程序代码_第4页
matlab车牌识别程序代码_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、% 车牌识别程序主体clc;close all;clear all;%=%说明:%=% =测定算法执行的时间,开始计时=tic %记录程序运行时间%=读入图片=fn,pn,fi=uigetfile('*.jpg','选择图片');I=imread(pn fn);figure;imshow(I);title('原始图像');%显示原始图像chepailujing=pn fnI_bai=I;PY2,PY1,PX2,PX1=caitu_fenge(I);% I=rgb2hsv(I);% PY2,PY1,PX2,PX1=caitu_tiqu(I,I_ba

2、i);%用HSI模型识别蓝色,用rgb模型识别白色%=分割车牌区域=%=车牌区域根据面积二次修正=PY2,PY1,PX2,PX1,threshold=SEC_xiuzheng(PY2,PY1,PX2,PX1);%=更新图片=Plate=I_bai(PY1:PY2,PX1:PX2,:);%使用caitu_tiqu%=考虑用腐蚀解决蓝色车问题=bw=Plate;figure,imshow(bw);title('车牌图像');%hsv彩图提取图像%=这里要根据图像的倾斜度进行选择这里选择的图片20090425686.jpgbw=rgb2gray(bw);figure,imshow(b

3、w);title('灰度图像');%=倾斜校正=qingxiejiao=rando_bianhuan(bw)bw=imrotate(bw,qingxiejiao,'bilinear','crop');figure,imshow(bw);title('倾斜校正');%取值为负值向右旋转%=bw=im2bw(bw,graythresh(bw);%figure,imshow(bw);bw=bwmorph(bw,'hbreak',inf);%figure,imshow(bw);bw=bwmorph(bw,'spur

4、',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,'程序运行中,请稍等.')% for i=1:10000% waitbar(i/5000,h) % end% close(h);%wavplay(wav

5、read('程序运行中.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,qingxiejia

6、o)m,k=size(fenge);%=显示分割图像结果= figure;for s=1:2:k-1 subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1);end%= 给七张图片定位=桂AV6388han_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(

7、10); shuzi_2 =bw( 1:y,fenge(11):fenge(12); shuzi_3 =bw( 1:y,fenge(13):fenge(14); %=识别=%=把修正数据读入=xiuzhenghanzi = imresize(han_zi, 110 55,'bilinear');xiuzhengzimu = imresize(zi_mu, 110 55,'bilinear');xiuzhengzm_sz_1= imresize(zm_sz_1,110 55,'bilinear');xiuzhengzm_sz_2 = imresiz

8、e(zm_sz_2,110 55,'bilinear');xiuzhengshuzi_1 = imresize(shuzi_1,110 55,'bilinear');xiuzhengshuzi_2 = imresize(shuzi_2,110 55,'bilinear');xiuzhengshuzi_3 = imresize(shuzi_3,110 55,'bilinear');%= 把0-9 , A-Z以及省份简称的数据存储方便访问=hanzishengfen=duquhanzi(imread('cpgui.bmp

9、9;),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'

10、),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'

11、),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&

12、#39;),. 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')

13、,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&#

14、39;),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'),imre

15、ad('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

16、;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= shibie

17、shuzi(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

18、(fid,'%srn',shibiejieguo,datestr(now);% fclose(fid);% %=读出声音=% duchushengyin(shibiejieguo);%=读取计时=t=toc %记录程序运行时间%=自己编写的子函数function bw_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=me

19、an(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_yuzhi)&&(Y_down<y)%找到图片上边界 Y_down=Y_down+1;end%去除左边边框干扰 X_right=1; if (X_touying(1,fix(x/14)<=X_yuzhi X_rig

20、ht=fix(x/14)end%找黑体边缘bw_fir=imane_bw(Y_up:Y_down,X_right:x);自己编写的子函数function fenge = shuzifenge(imfenge,qingxiejiao)y,x=size(imfenge);%=用函数设定分割阈值=SS=x*yif SS<=20000 shedingyuzhi=4; elseif SS>20000&&SS<=30000 shedingyuzhi=4;elseif SS>30000&&SS<=50000 shedingyuzhi=4; els

21、eif SS>50000&&SS<=80000 shedingyuzhi=4; else shedingyuzhi=4; endganrao=SS/100;%=%定义数组histogram存储垂直方向的黑点数histogram=sum(imfenge);%=文字分割=k=1;for h=1:x-1 if (histogram(1,h)<=shedingyuzhi)&&(histogram(1,h+1)>shedingyuzhi)|(h=1)&&histogram(1,h)>shedingyuzhi) fenge(1,

22、k)=h; k=k+1; elseif (histogram(1,h)>shedingyuzhi)&&(histogram(1,h+1)<=shedingyuzhi)|(h=x-1)&&histogram(1,h)>shedingyuzhi) fenge(1,k)=h+1; k=k+1; endendk=k-1;%去掉多产生的一个K值if k<10 msgbox('提取出错','警告'); wavplay(wavread('提取出错.wav'),22000); pause;end%=if (

23、sum(histogram(1,fenge(1,1):fenge(1,2)<ganrao)|(fenge(1,2)-fenge(1,1)<(fenge(1,4)-fenge(1,3)/2) for i=3:k fenge(1,i-2)=fenge(1,i); endendm n=size(fenge);if n<14 msgbox('提取出错','警告'); wavplay(wavread('提取出错.wav'),22000); pause;endfenge=fenge(1,1:14);自己编写的子函数function shib

24、iezm_sz=shibiezm_sz(shuzizimu,xiuzhengzm_sz);y,x,z=size(xiuzhengzm_sz); for k=1:34sum=0;for i=1:y for j=1:x if shuzizimu(i,j,k)=xiuzhengzm_sz(i,j)%统计黑白 sum=sum+1; end endendbaifenbi(1,k)=double(sum/(x*y);endchepai= find(baifenbi>=max(baifenbi);chepai=chepai(1,1);%=数字直接返回=if (chepai>=1)&&am

25、p;(chepai<=10) zm_sz=chepai-1; zm_sz=num2str(zm_sz);elseif (chepai>=11)&&(chepai<=34) %=字母对应序号转字母=%=11-15 ABCDE 16-20FGHIJ 21-25 KLMNP 26-30 QRSTU 31-35 VWXYZ if chepai=11 zm_sz='A' elseif chepai=12 zm_sz='B' elseif chepai=13 zm_sz='C' elseif chepai=14 zm_sz=

26、'D' elseif chepai=15 zm_sz='E' elseif chepai=16 zm_sz='F' elseif chepai=17 zm_sz='G' elseif chepai=18 zm_sz='H' elseif chepai=19 zm_sz='J' elseif chepai=20 zm_sz='K' elseif chepai=21 zm_sz='L' elseif chepai=22 zm_sz='M' elseif c

27、hepai=23 zm_sz='N' elseif chepai=24 zm_sz='P' elseif chepai=25 zm_sz='Q' elseif chepai=26 zm_sz='R' elseif chepai=27 zm_sz='S' elseif chepai=28 zm_sz='T' elseif chepai=29 zm_sz='U' elseif chepai=30 zm_sz='V' elseif chepai=31 zm_sz='

28、W' elseif chepai=32 zm_sz='X' elseif chepai=33 zm_sz='Y' elseif chepai=34 zm_sz='Z' endendshibiezm_sz=zm_sz;自己编写的子函数function shibiezm_sz=shibiezm_sz(shuzizimu,xiuzhengzm_sz);y,x,z=size(xiuzhengzm_sz); for k=1:34sum=0;for i=1:y for j=1:x if shuzizimu(i,j,k)=xiuzhengzm_sz(i

29、,j)%统计黑白 sum=sum+1; end endendbaifenbi(1,k)=double(sum/(x*y);endchepai= 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)&&(chepai<=34) %=字母对应序号转字母=%=11-15 ABCDE 16-20FGHIJ 21-

30、25 KLMNP 26-30 QRSTU 31-35 VWXYZ if chepai=11 zm_sz='A' elseif chepai=12 zm_sz='B' elseif chepai=13 zm_sz='C' elseif chepai=14 zm_sz='D' elseif chepai=15 zm_sz='E' elseif chepai=16 zm_sz='F' elseif chepai=17 zm_sz='G' elseif chepai=18 zm_sz=

31、9;H' elseif chepai=19 zm_sz='J' elseif chepai=20 zm_sz='K' elseif chepai=21 zm_sz='L' elseif chepai=22 zm_sz='M' elseif chepai=23 zm_sz='N' elseif chepai=24 zm_sz='P' elseif chepai=25 zm_sz='Q' elseif chepai=26 zm_sz='R' elseif chep

32、ai=27 zm_sz='S' elseif chepai=28 zm_sz='T' elseif chepai=29 zm_sz='U' elseif chepai=30 zm_sz='V' elseif chepai=31 zm_sz='W' elseif chepai=32 zm_sz='X' elseif chepai=33 zm_sz='Y' elseif chepai=34 zm_sz='Z' endendshibiezm_sz=zm_sz;自己编写的子函

33、数function shibiezimu=shibiezimu(zimu,xiuzhengzimu);y,x,z=size(xiuzhengzimu);for k=1:24sum=0;for i=1:y for j=1:x if zimu(i,j,k)=xiuzhengzimu(i,j)%统计黑白 sum=sum+1; end endendbaifenbi(1,k)=sum/(x*y);endchepai= find(baifenbi>=max(baifenbi);shibiezimu=chepai;%在数字中,从0开始所以要减一。这里不用if shibiezimu=1 shibiezi

34、mu='A' elseif shibiezimu=2 shibiezimu='B' elseif shibiezimu=3 shibiezimu='C' elseif shibiezimu=4 shibiezimu='D' elseif shibiezimu=5 shibiezimu='E' elseif shibiezimu=6 shibiezimu='F' elseif shibiezimu=7 shibiezimu='G' elseif shibiezimu=8 shibiez

35、imu='H' elseif shibiezimu=9 shibiezimu='J' elseif shibiezimu=10 shibiezimu='K' elseif shibiezimu=11 shibiezimu='L' elseif shibiezimu=12 shibiezimu='M' elseif shibiezimu=13 shibiezimu='N' elseif shibiezimu=14 shibiezimu='P' elseif shibiezimu=15

36、shibiezimu='Q' elseif shibiezimu=16 shibiezimu='R' elseif shibiezimu=17 shibiezimu='S' elseif shibiezimu=18 shibiezimu='T' elseif shibiezimu=19 shibiezimu='U' elseif shibiezimu=20 shibiezimu='V' elseif shibiezimu=21 shibiezimu='W' elseif shibie

37、zimu=22 shibiezimu='X' elseif shibiezimu=23 shibiezimu='Y' elseif shibiezimu=24 shibiezimu='Z'end自己编写的子函数function shibieshuzi=shibieshuzi(shuzi,xiuzhengshuzi_1);y,x,z=size(xiuzhengshuzi_1); for k=1:10sum=0;for i=1:y for j=1:x if shuzi(i,j,k)=xiuzhengshuzi_1(i,j)%统计黑白 sum=sum+

38、1; end endendbaifenbi(1,k)=sum/(x*y);endchepai= find(baifenbi>=max(baifenbi);shibieshuzi=chepai-1;shibieshuzi=num2str(shibieshuzi);自己编写的子函数function shibiehanzi=shibiehanzi(hanzi,xiuzhenghanzi);y,x,z=size(xiuzhenghanzi);for k=1:5sum=0;for i=1:y for j=1:x if hanzi(i,j,k)=xiuzhenghanzi(i,j)%统计黑白 sum

39、=sum+1; end endendbaifenbi(1,k)=sum/(x*y);endchepai= find(baifenbi>=max(baifenbi);shibiehanzi=chepai;%在数字中,从0开始所以要减一。这里不用if shibiehanzi=1 shibiehanzi='桂' elseif shibiehanzi=2 shibiehanzi='贵' elseif shibiehanzi=3 shibiehanzi='京' elseif shibiehanzi=4 shibiehanzi='苏'

40、elseif shibiehanzi=5 shibiehanzi='粤'end自己编写的子函数function PY2,PY1,PX2,PX1,threshold=SEC_xiuzheng(PY2,PY1,PX2,PX1) S=(PY2-PY1)*(PX2-PX1)if S<=25000 threshold=50; Y_secrectify=3; X_secrectify=3;elseif S>25000&&S<=45000 threshold=100; Y_secrectify=-3; X_secrectify=3;elseif S>4

41、5000&&S<=80000 threshold=200; Y_secrectify=-3; X_secrectify=3;elseif S>80000&&S<=150000 threshold=300; Y_secrectify=-10; X_secrectify=-10;elseif S>150000&&S<=400000 threshold=600; Y_secrectify=-10; X_secrectify=-10;else threshold=1800; Y_secrectify=-10; X_secre

42、ctify=-10;endPY1=PY1-Y_secrectify;%对车牌区域的进一步修正PY2=PY2+Y_secrectify;%对车牌区域的进一步修正PX1=PX1;%-X_secrectify;%对车牌区域的进一步修正PX2=PX2;%+X_secrectify;%对车牌区域的进一步修正自己编写的子函数function qingxiejiao=rando_bianhuan(I)I=edge(I);%figure,imshow(I);% I = zeros(100,100);% I(25:75, 25:75) = 1;theta = 1:180;R,xp = radon(I,theta

43、);%figure,imagesc(theta,xp,R);colormap(hot);%title('R_theta (Xprime)')%imshow(theta,xp,R,'n')I,J = find(R>=max(max(R);%J记录了倾斜角qingxiejiao=90-J;%直线位置% xlabel('theta (degrees)');ylabel('Xprime');% % colormap(hot)% colorbar IMAGE(C) displays matrix C as an image.% tit

44、le('R_theta (Xprime)');% colorbar;自己编写的子函数function zimu = duquzimu(s10,s11,s12,s13,s14,s15,s16,s17,s18,s19,. s20,s21,s22,s23,s24,s25,s26,s27,s28,s29,. s30,s31,s32,s33) %1-5 ABCDE 6-10FGHIJ 11-15 KLMNP 16-20 QRSTU 21-25 VWXYZzimu(:,:,1) =imresize(im2bw(s10,graythresh(rgb2gray(s10),110 55,'

45、;bilinear');zimu(:,:,2) =imresize(im2bw(s11,graythresh(rgb2gray(s11),110 55,'bilinear');zimu(:,:,3) =imresize(im2bw(s12,graythresh(rgb2gray(s12),110 55,'bilinear');zimu(:,:,4) =imresize(im2bw(s13,graythresh(rgb2gray(s13),110 55,'bilinear');zimu(:,:,5) =imresize(im2bw(s14,

46、graythresh(rgb2gray(s14),110 55,'bilinear');zimu(:,:,6) =imresize(im2bw(s15,graythresh(rgb2gray(s15),110 55,'bilinear');zimu(:,:,7) =imresize(im2bw(s16,graythresh(rgb2gray(s16),110 55,'bilinear');zimu(:,:,8) =imresize(im2bw(s17,graythresh(rgb2gray(s17),110 55,'bilinear

47、9;);zimu(:,:,9) =imresize(im2bw(s18,graythresh(rgb2gray(s18),110 55,'bilinear');zimu(:,:,10) =imresize(im2bw(s19,graythresh(rgb2gray(s19),110 55,'bilinear');zimu(:,:,11) =imresize(im2bw(s20,graythresh(rgb2gray(s20),110 55,'bilinear');zimu(:,:,12) =imresize(im2bw(s21,graythres

48、h(rgb2gray(s21),110 55,'bilinear');zimu(:,:,13) =imresize(im2bw(s22,graythresh(rgb2gray(s22),110 55,'bilinear');zimu(:,:,14) =imresize(im2bw(s23,graythresh(rgb2gray(s23),110 55,'bilinear');zimu(:,:,15) =imresize(im2bw(s24,graythresh(rgb2gray(s24),110 55,'bilinear');zi

49、mu(:,:,16) =imresize(im2bw(s25,graythresh(rgb2gray(s25),110 55,'bilinear');zimu(:,:,17) =imresize(im2bw(s26,graythresh(rgb2gray(s26),110 55,'bilinear');zimu(:,:,18) =imresize(im2bw(s27,graythresh(rgb2gray(s27),110 55,'bilinear');zimu(:,:,19) =imresize(im2bw(s28,graythresh(rgb

50、2gray(s28),110 55,'bilinear');zimu(:,:,20) =imresize(im2bw(s29,graythresh(rgb2gray(s29),110 55,'bilinear');zimu(:,:,21) =imresize(im2bw(s30,graythresh(rgb2gray(s30),110 55,'bilinear');zimu(:,:,22) =imresize(im2bw(s31,graythresh(rgb2gray(s31),110 55,'bilinear');zimu(:,:,23) =imresize(im2bw(s32,graythresh(rgb2gray(s32),110 55,'bilinear');zimu(:,:,24) =imresize(im2bw(s33,graythresh(rgb2gray(s33),110 55,'bilinear');自己编写的子函数funct

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论