MATLAB 车牌识别的简单程序

六月 13th, 2010 941 次阅读 0 条评论
I=imread('D:\imgformat\img1.jpg');
[y,x,z]=size(I);
myI=double(I);
%%%%%%%% Y 方向 %%%%%%%%%%
Blue_y=zeros(y,1);
for i=1:y
for j=1:x
if((myI(i,j,1)<=60)&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=10))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=75)))
% 蓝色RGB的灰度范围
Blue_y(i,1)= Blue_y(i,1)+1;     % 蓝色象素点统计         
end 
end      
end
[temp MaxY]=max(Blue_y);        % Y方向车牌区域确定
PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1-1;
end   
PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2<y))
PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);

%%%%%%%% X 方向 %%%%%%%%%%

Blue_x=zeros(1,x);             % 进一步确定X方向的车牌区域
for j=1:x
for i=PY1:PY2
if((myI(i,j,1)<=35)&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=10))&&((myI(i,j,3)<=142)&&(myI(i,j,3)>=75)))
Blue_x(1,j)= Blue_x(1,j)+1;              
end 
end      
end

PX1=1;

while ((Blue_x(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end   
PX2=x;
while ((Blue_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-2; % 对车牌区域的修正
PX2=PX2+2;

Plate=I(PY1:PY2,PX1-2:PX2,:);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure,imshow(I);title('原始图像')
figure,plot(Blue_y);grid;title('Y方向蓝色像素点统计')
figure,plot(Blue_x);grid;title('X方向蓝色像素点统计')
figure,imshow(IY);
figure,imshow(Plate);title('车牌截取结果')
Cgray=rgb2gray(Plate);%rgb2gray转换成灰度图像
s=strel('disk',25); %strei函数
Bgray=imopen(Cgray,s);%打开Cgray图像
Egray=imsubtract(Cgray,Bgray);%两幅图相减
figure,imshow(Egray)
fmax1=double(max(max(Egray)));
fmin1=double(min(min(Egray)));
level=(fmax1-(fmax1-fmin1)/2)/255;
bw22=im2bw(Egray,level);%转换为二值图像
figure,imshow(bw22);title('二值化后的车牌图像')
[H,L]=size(bw22);
K=zeros(L);
M=zeros(30);
now=1;
flag=1;
for x=1:L
for y=1:H
K(x)=bw22(y,x)+K(x);
end
end
figure,plot(K),title('未处理的图像')
evge=0;
for i=1:L
evge=evge+K(i);
end
evge=5;
for i=1:L
if K(i)<=evge
K(i)=0;
end
end
figure,plot(K),title('阈值处理之后的图像')
for i=1:L-1
if K(i)==0 && K(i+1)~=0 && flag==1
M(now)=i;
now=now+1;
flag=0;
end
if K(i)~=0 && K(i+1)==0 && flag==0
M(now)=i;
now=now+1;
flag=1;
end
end
Len=now;
for i=1:2:Len-2
Plat=bw22(:,M(i):M(i+1));
subplot(1,Len-2,i),imshow(Plat)
end
k=[];
j=1;
for i=3:2:Len-2
Plat=bw22(:,M(i):M(i+1));
s=code(Plat);
k(j)=s;
j=j+1;
end 
sprintf('车牌是:%s',string(k))

子程序:

function co=code(H)
M2=imread('D:\imgformat\resimg\M2.jpg');
M3=imread('D:\imgformat\resimg\M3.jpg');
M4=imread('D:\imgformat\resimg\M4.jpg');
[m n]=size(H);
M2=double(M2);
M2=im2bw(M2);
M2=imresize(M2,[m n]);
M3=double(M3);
M3=im2bw(M3);
M3=imresize(M3,[m n]);
M4=double(M4);
M4=im2bw(M4);
M4=imresize(M4,[m n]);
d=zeros(3);
d(1)=corr2(H,M2);
d(2)=corr2(H,M3);
d(3)=corr2(H,M4);
[D,e]=max(d(:));
switch e
case 1
c='A';
case 2
c='4';
case 3
c='B';
otherwise
end
co=c;
分类: MATLAB 标签: matlab 

第一篇~

六月 13th, 2010 576 次阅读 6 条评论

刚开始用tk的域名加上byethost4的主机使用wordpress建了一个,一直访问不了,我也一直善良的以为是自己哪点配置错了,后来实在是找不到哪点错了,就翻墙出去看看,结果一切正常,很是无语……天下没有免费的午餐,但又懒得去花大洋买域名和空间,就在GAE上建了个这么个小博客,Micolog显然没有Wordpress强大,但也足够用了,以后有时间多多折腾~但愿不会有GFW把GAE也干掉的一天……

分类: Life 标签: First