%% 车牌定位MATLAB程序
clear;clc;
tic;
filename='D:test.jpg';
pic1=imread(filename);
pic=rgb2gray(pic1);
[height width]=size(pic);
Bpic=edge(pic,'sobel');
m=1;
a=zeros(1,width);b=zeros(1,width);
for x=height:-1:1
tag=0;
for y=1:width-1
if Bpic(x,y)~=Bpic(x,y+1)
tag=tag+1;
end
end
if tag>24
a(m)=x;m=m+1;
end
end
n=1;
for m=1:height-2
if a(1,m)-a(1,m+1)~=1 && a(1,m+1)-a(1,m+2)==1
b(1,n)=a(1,m+1);b(1,n+1)=1;
end
if m~=1 &&a(1,m)-a(1,m+1)==1 &&a(1,m+1)-a(1,m+2)==1
b(1,n+1)=b(1,n+1)+1;
end
if m==1 && a(1,m)-a(1,m+1)==1 && a(1,m+1)-a(1,m+2)==1
b(1,n)=a(1,m);b(1,n+1)=2;
end
if a(1,m)-a(1,m+1)==1 && a(1,m+1)-a(1,m+2)~=1
b(1,n+1)=b(1,n+1)+1;n=n+2;
end
end
flag=0;temp=0;
for n=2:2:height
if b(1,n)>20 && flag==0
temp=n;flag=1;
end
end
u=b(1,temp-1);
d=u-b(1,temp)+1;
frame=round(4*(b(1,temp)));
p=1;
c=zeros(1,width-frame+1);
line=round(0.5*(u+d));max=0;left=0;
for x=1:width-frame
tag=0;
for y=0:frame-1
if Bpic(line,y+x)~=Bpic(line,y+1+x)
tag=tag+1;
end
end
c(1,p)=tag;
if tag>max
max = tag;
left=p;
end
p=p+1;
end
right = left+frame;
aa=sum(Bpic(d:u,left:right));
for x=1:round((right-left)*0.5)-1
if aa(x+1) - aa(x) >=5 && aa(x+1)-aa(x+2)<=5
left = left+x;
break;
end
end
imshow(pic()),figure;
imshow(pic(d:u,left:right,:));
toc;