www.pudn.com > car.rar > MyCarLocal.m


%程序功能:实现车牌自动定位 
%作者:重庆大学 田建国 QQ:363966533 
%编写时间:2007.04.10 
clear;clc;close all 
 
I=rgb2gray(imread('17.jpg')); 
%I=imread('14.bmp'); 
tic   %计时开始 
[height,width]=size(I); 
%预处理 
I_edge=zeros(height,width); 
for i=1:width-1 
    I_edge(:,i)=abs(I(:,i+1)-I(:,i)); 
end 
%I_edge(:,width)=0; 
I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge))); 
[I_edge,y1]=select(I_edge,height,width);% 
BW2 = I_edge;% 
 
%一些形态学处理 
SE=strel('rectangle',[10,10]); 
IM2=imerode(BW2,SE); 
IM2=bwareaopen(IM2,20); 
IM3=imdilate(IM2,SE); 
%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
%投影以粗略估计车牌位置 
p_h=projection(double(IM3),'h'); 
if(p_h(1)>0) 
    p_h=[0,p_h]; 
end 
p_v=projection(double(IM3),'v'); 
if(p_v(1)>0) 
    p_v=[0,p_v]; 
end 
 
%%%%%% 
p_h=double((p_h>5)); 
p_h=find(((p_h(1:end-1)-p_h(2:end))~=0)); 
len_h=length(p_h)/2; 
%%%%% 
p_v=double((p_v>5)); 
p_v=find(((p_v(1:end-1)-p_v(2:end))~=0)); 
len_v=length(p_v)/2; 
%%%%%%%%%%% 
%粗略计算车牌候选区 
k=1; 
for i=1:len_h 
    for j=1:len_v 
        s=IM3(p_h(2*i-1):p_h(2*i),p_v(2*j-1):p_v(2*j)); 
        if(mean(mean(s))>0.1) 
            p{k}=[p_h(2*i-1),p_h(2*i)+1,p_v(2*j-1),p_v(2*j)+1]; 
            k=k+1; 
        end 
    end 
end 
%进一步缩小车牌候选区 
for i=1:k-1 
   edge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2),p{i}(3):p{i}(4))),'canny')); 
 
   [x,y]=find(edge_IM3==1); 
   p{i}=[p{i}(1)+min(x),p{i}(2)-(p{i}(2)-p{i}(1)+1-max(x)),... 
         p{i}(3)+min(y),p{i}(4)-(p{i}(4)-p{i}(3)+1-max(y))]; 
   p_center{i}=[fix((p{i}(1)+p{i}(2))/2),fix((p{i}(3)+p{i}(4))/2)]; 
   p_ratio(i)=(p{i}(4)-p{i}(3))/(p{i}(2)-p{i}(1)); 
end 
clear edge_IM3;clear x; clear y;     % 清空部分变量 
%说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标; 
%存放格式为:p{k}=[x1,x2,y1,y2];x1,x2分别为行坐标,y1,y2为列坐标 
%p_center为一胞元,用于存放每个图像块的中心坐标,p_center{k}=[x,y];x,y分别为行,列坐标 
%p_ratio为一矩阵,用来存放图像块的长宽比例 
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
m=1;T=0.6*max(p_ratio); 
for i=1:k-1 
    if(p_ratio(i)>=T&p_ratio(i)<8) 
        p1{m}=p{i}; 
        m=m+1; 
    end 
end 
p=p1; 
k=m; 
d=zeros(k-1,k-1); 
for i=1:k-1 
    for j=i+1:k-1 
        d(i,j)=sqrt((p_center{i}(1)-p_center{j}(1))^2+(p_center{i}(2)-p_center{j}(2))^2); 
    end 
end 
%说明:d用于存放第i,j个图像块中心点的距离; 
 
%T=sqrt(height^2+width^2)/10;%阈值 
%[x,y]=find(d>0&d