⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycarlocal.m

📁 MATLAB的车牌定位程序~能够实现车牌的定位~不过效果有待提高~请高手们指点指点~
💻 M
字号:
%程序功能:实现车牌自动定位
%作者:重庆大学 田建国 QQ:363966533
%编写时间:2007.04.10
clear;clc;close all

I=rgb2gray(imread('5.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<T); 
%for i=1:length(x)
%    p{x(i)}(1)=min(p{x(i)}(1),p{y(i)}(1));
%    p{x(i)}(2)=max(p{x(i)}(2),p{y(i)}(2));
%    p{x(i)}(3)=min(p{x(i)}(3),p{y(i)}(3));
%    p{x(i)}(4)=max(p{x(i)}(4),p{y(i)}(4));
%end
%
toc%计时结束
figure;
subplot(221);imshow(I);
subplot(222);imshow(BW2);
subplot(223);imshow(IM2);
subplot(224);imshow(IM3);

figure;
for i=1:k-1
    subplot(1,k-1,i);
    index=p{i};
    imshow(I(index(1):index(2),index(3):index(4)));
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -