[y,x,z]=size(Im5);
Im6=double(Im5);
Blue_y=zeros(y,1);%創(chuàng)建元素為零的數(shù)組或矩陣y*1
for i=1:y
for j=1:x
if(Im6(i,j,1)==1)
Blue_y(i,1)= Blue_y(i,1)+1; %根據(jù)Im5的y值確定
end
end
end
[temp MaxY]=max(Blue_y);%垂直方向車牌區(qū)域確定
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,:,:);
Blue_x=zeros(1,x);
for j=1:x
for i=PY1:PY2
if(Im6(i,j,1)==1)
Blue_x(1,j)= Blue_x(1,j)+1; %根據(jù)Im5的x值確定
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-1;%對車牌區(qū)域的校正
PX2=PX2+1;
dw=I(PY1:PY2-6,PX1:PX2 ,:);
figure(8),
subplot(1,2,1),
imshow(IY),
title('垂直方向合理區(qū)域');
figure(8),
subplot(1,2,2),
imshow(dw),
title('定位剪切后的彩色車牌圖像')
se=eye(2);
[m,n]=size(d); % d為二值圖像
if bwarea(d)/m/n>=0.365
d=imerode(d,se);
elseif bwarea(d)/m/n<=0.235
d=imdilate(d,se);
end
imwrite(d,'膨脹或腐蝕處理后.jpg');
figure(9),
subplot(3,2,5),
imshow(d),
title('5.膨脹或腐蝕處理后')
d=QieGe(d);%尋找連續(xù)有文字的塊
[m,n]=size(d);
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
j=j+1;
end
k1=j;
while s(j)~=0 && j<=n-1
j=j+1;
end
k2=j-1;
if k2-k1>=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0;
end
end
d=QieGe(d);
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide<y1
d(:,[1:wide])=0;
d=QieGe(d);
else
temp=QieGe(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all>y2
flag=1;word1=temp;
end
d(:,[1:wide])=0;d=QieGe(d);
end
end
function [word,result]=FenGe(d) %定義分割字符用函數(shù)(1)
word=[];flag=0;y1=8;y2=0.5;
while flag==0
[m,n]=size(d);
wide=0;
while sum(d(:,wide+1))~=0 && wide<=n-2
wide=wide+1;
end
temp=QieGe(imcrop(d,[1 1 wide m]));
[m1,n1]=size(temp);
if wide<y1 && n1/m1>y2
d(:,[1:wide])=0;
if sum(sum(d))~=0
d=QieGe(d); %切割出最小范圍
else word=[];flag=1;
end
else
word=QieGe(imcrop(d,[1 1 wide m]));
d(:,[1:wide])=0;
if sum(sum(d))~=0;
d=QieGe(d);flag=1;
else d=[];
end
end
end
result=d;
function e=QieGe(d) %定義分割字符用函數(shù)(2)
[m,n]=size(d);
top=1;bottom=m;left=1;right=n; % init
while sum(d(top,:))==0 && top<=m
top=top+1;
end
while sum(d(bottom,:))==0 && bottom>=1
bottom=bottom-1;
end
while sum(d(:,left))==0 && left<=n
left=left+1;
end
while sum(d(:,right))==0 && right>=1
right=right-1;
end
dd=right-left;
hh=bottom-top;
e=imcrop(d,[left top dd hh]);