logo资料库

matlab车牌识别程序代码.docx

第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
资料共33页,剩余部分请下载后查看
% 车牌识别程序主体 clc; close all; clear all; %========================================================== %说明: % % %=========================================================== % ==============测定算法执行的时间,开始计时================= tic %=====================读入图片================================ [fn,pn,fi]=uigetfile('*.jpg','选择图片'); I=imread([pn fn]); figure; imshow(I); title('原始图像');%显示原始图像 %%%%%记录程序运行时间 chepailujing=[pn fn] I_bai=I; [PY2,PY1,PX2,PX1]=caitu_fenge(I); % I=rgb2hsv(I); % [PY2,PY1,PX2,PX1]=caitu_tiqu(I,I_bai);%用 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.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,graythresh(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('闭合运算');
waitbar(i/5000,h) bw = bwareaopen(bw, threshold);figure,imshow(bw);title('擦除'); %==================加入进度条================================ % h=waitbar(0,'程序运行中,请稍等......') % for i=1:10000 % % 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; for s=1:2:k-1 subplot(1,k/2,(s+1)/2);imshow(bw( 1:y,fenge(s):fenge(s+1))); end %================ 给七张图片定位===============桂 AV6388 =bw( 1:y,fenge(1):fenge(2)); 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)); %==========================识别==================================== %======================把修正数据读入============================== imresize(han_zi, [110 55],'bilinear'); xiuzhenghanzi = [110 55],'bilinear'); imresize(zi_mu, xiuzhengzimu = xiuzhengzm_sz_1= imresize(zm_sz_1,[110 55],'bilinear'); xiuzhengzm_sz_2 = imresize(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'),imread('cpguizhou.bmp'),imread('cpjing.bmp'),im read('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.bm p'),... 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'),... = shibiehanzi(hanzishengfen,xiuzhenghanzi);shibiejieguo(1,i) =jieguohanzi; = shibiezimu(zimu,xiuzhengzimu); shibiezm_sz(shuzizimu,xiuzhengzm_sz_1); imread('5.bmp'),imread('6.bmp'),imread('7.bmp'),imread('8.bmp'),imread('9.bmp')); %============================识别结果================================ i=1;%shibiezm_sz 该函数识别数字有问题 jieguohanzi jieguozimu i=i+1; jieguozm_sz_1= =jieguozm_sz_1;i=i+1; jieguozm_sz_2= =jieguozm_sz_2;i=i+1; jieguoshuzi_1= shibieshuzi(shuzi,xiuzhengshuzi_1); jieguoshuzi_2= shibieshuzi(shuzi,xiuzhengshuzi_2); jieguoshuzi_3= shibieshuzi(shuzi,xiuzhengshuzi_3); %========================== 话 ============================================= shibiejieguo %%%%========后面的注释掉了(语音读出这一部分)=============== shibiezm_sz(shuzizimu,xiuzhengzm_sz_2); 对 shibiejieguo(1,i) =jieguoshuzi_1;i=i+1; shibiejieguo(1,i) =jieguoshuzi_2;i=i+1; shibiejieguo(1,i) =jieguoshuzi_3;i=i+1; 框 显 示 显 示 i=i+1; shibiejieguo(1,i) =jieguozimu; shibiejieguo(1,i) shibiejieguo(1,i)
msgbox(shibiejieguo,'识别结果'); % %=====================导出文本================== % fid=fopen('Data.xls','a+'); % fprintf(fid,'%s\r\n',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=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_yuzhi)&&(Y_down
自己编写的子函数 function fenge = shuzifenge(imfenge,qingxiejiao) [y,x]=size(imfenge); %===============用函数设定分割阈值======================== SS=x*y if SS<=20000 shedingyuzhi=4; elseif SS>20000&&SS<=30000 shedingyuzhi=4; elseif SS>30000&&SS<=50000 shedingyuzhi=4; elseif SS>50000&&SS<=80000 shedingyuzhi=4; else shedingyuzhi=4; end ganrao=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,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; end end k=k-1;%去掉多产生的一个 K 值 if k<10 msgbox('提取出错','警告'); wavplay(wavread('提取出错.wav'),22000); pause;
end %============================================== if (sum(histogram(1,fenge(1,1):fenge(1,2)))
function shibiezm_sz=shibiezm_sz(shuzizimu,xiuzhengzm_sz); [y,x,z]=size(xiuzhengzm_sz); 自己编写的子函数 for k=1:34 sum=0; for i=1:y for j=1:x if end end shuzizimu(i,j,k)==xiuzhengzm_sz(i,j)%统计黑白 sum=sum+1; end baifenbi(1,k)=double(sum/(x*y)); end 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)&&(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='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
分享到:
收藏