收藏 分销(赏)

基于matlab车牌的定位与分割识别程序.doc

上传人:可**** 文档编号:4255044 上传时间:2024-08-30 格式:DOC 页数:16 大小:594KB 下载积分:10 金币
下载 相关 举报
基于matlab车牌的定位与分割识别程序.doc_第1页
第1页 / 共16页
基于matlab车牌的定位与分割识别程序.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
基于Matlab的车牌定位与分割 经典算法 I=imread('car.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); for i=1:y for j=1:x if(I6(i,j,1)==1) Y1(i,1)= Y1(i,1)+1; end end end [temp MaxY]=max(Y1); figure(); subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素'); %求的车牌的行起始位置和终止位置 PY1=MaxY; while ((Y1(PY1,1)>=50)&&(PY1>1)) PY1=PY1-1; end PY2=MaxY; while ((Y1(PY2,1)>=50)&&(PY2<y)) PY2=PY2+1; end IY=I(PY1:PY2,:,:); X1=zeros(1,x); for j=1:x for i=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('像数'); %求的车牌的列起始位置和终止位置PX1=1; while ((X1(1,PX1)<3)&&(PX1<x)) PX1=PX1+1; end PX2=x; while ((X1(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end PX1=PX1-1; PX2=PX2+1; %分割出车牌图像% dw=I(PY1:PY2,PX1:PX2,:); subplot(3,2,3),imshow(dw),title('定位剪切后的彩色车牌图像') 4.2 车牌字符分割 确定车牌位置后下一步的任务就是进行字符切分分离出车牌号码的全部字符图像。 if isrgb(I) I1 = rgb2gray(I); %将RGB图像转化为灰度图像 else I1=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); for i=1:y1 for j=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<y1)) Py0=Py0+1; end Py1=Py0; while((Y1(Py1,1)>=20)&&(Py1<y1)) Py1=Py1+1; end I2=I2(Py0:Py1,:,:); subplot(3,2,6); imshow(I2),title('目标车牌区域'); % 分割字符按行积累量% X1=zeros(1,x1); for j=1:x1 for i=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('累计像素量'); Px0=1; Px1=1; %分割字符 for i=1:7 while ((X1(1,Px0)<3)&&(Px0<x1)) Px0=Px0+1; end Px1=Px0; while (((X1(1,Px1)>=3)&&(Px1<x1))||((Px1-Px0)<10)) Px1=Px1+1; end Z=I2(:,Px0:Px1,:); switch strcat('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 figure(3); subplot(1,7,i); imshow(Z); Px0=Px1; End function inpt = pretreatment(I) %YUCHULI Summary of this function goes here % Detailed explanation goes here if isrgb(I) I1 = rgb2gray(I); else I1=I; end I1=imresize(I1,[50 20]);%将图片统一划为50*20大小 I1=im2bw(I1,0.9); [m,n]=size(I1); inpt=zeros(1,m*n); %将图像按列转换成一个行向量 for j=1:n for i=1:m inpt(1,m*(j-1)+i)=I1(i,j); end end %神经网络进行识别。 close all; clear all; %%%%归一化训练样本%%%%%% I0=pretreatment(imread('0.jpg')); I1=pretreatment(imread('1.jpg')); I2=pretreatment(imread('2.jpg')); I3=pretreatment(imread('3.jpg')); I4=pretreatment(imread('4.jpg')); I5=pretreatment(imread('5.jpg')); I6=pretreatment(imread('6.jpg')); I7=pretreatment(imread('7.jpg')); I8=pretreatment(imread('8.jpg')); I9=pretreatment(imread('9.jpg')); I10=pretreatment(imread('A.jpg')); I11=pretreatment(imread('C.jpg')); I12=pretreatment(imread('G.jpg')); I13=pretreatment(imread('L.jpg')); I14=pretreatment(imread('M.jpg')); I15=pretreatment(imread('R.jpg')); I16=pretreatment(imread('H.jpg')); I17=pretreatment(imread('N.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),[1000,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); %%%%%%%测试%%%%%%%%% %I=imread('DSC01323.jpg'); I=imread('DSC01344.jpg'); dw=location(I);%车牌定位 [PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=StringSplit(dw);%字符分割及处理 %%%%%%%%%%%测试字符,得到识别数值%%%% 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']; for i=2:7 T0= sim(net ,P0(:,i)); T1 = compet (T0) ; d =find(T1 == 1) - 1 if (d==10) str='A'; elseif (d==11) str='C'; elseif (d==12) str='G'; elseif (d==13) str='L'; elseif (d==14) str='M'; elseif (d==15) str='R'; elseif (d==16) str='H'; elseif (d==17) str='N'; else str=num2str(d); end switch i case 2 str1=str; case 3 str2=str; case 4 str3=str; case 5 str4=str; case 6 str5=str; otherwise str6=str; end end %显示定位后的分割出的车牌彩图,% %%%%%%识别结果以标题形式显示在图上%%% s=strcat('渝',str1,str2,str3,str4,str5,str6); figure(); imshow(dw),title(s); 非诚勿扰 欢迎下载
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服