资源简介
程序运行无误,有注释,条理清晰。压缩包含所有.m文件
代码片段和文件信息
%ex1505
clc
clear
filename=‘E:\matlab7.0\car.jpg‘;%图片的路径
I=im2gray(filename);%调用自编函数读取图像,并转化为灰度图象;
tic %计时开始
[heightwidth]=size(I);
%预处理
I_edge=zeros(heightwidth);%创建height*width矩阵
for i=1:width-1%对每一列进行遍历
I_edge(:i)=abs(I(:i+1)-I(:i));%每列的值赋为原图像中左右两列相减的绝对值(即梯度)
end
% 归一化处理(0~255)
I_edge=(255/(max(max(I_edge))-min(min(I_edge))))*(I_edge-min(min(I_edge)));
[I_edgey1]=select(I_edgeheightwidth); %%%%%%调用select函数选择图像的某个区域
BW2 = I_edge;%
%%%%%%%%%%%%%%%%一些形态学处理
SE=strel(‘rectangle‘[1010]);%创建10*10的建构元素
IM2=imerode(BW2SE);%腐蚀
IM2=bwareaopen(IM220);%删除小面积
IM3=imdilate(IM2SE);%膨胀
%先腐蚀再膨胀,进行了开运算,消除小物体
%%%%%%%%%%%%%%%%%%投影以粗略估计车牌位置
p_h=projection(double(IM3)‘h‘); %调用projection函数,水平方向
if(p_h(1)>0)
p_h=[0p_h];
end
p_v=projection(double(IM3)‘v‘); %调用projection函数,垂直方向
if(p_v(1)>0)
p_v=[0p_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)+1p_v(2*j-1)p_v(2*j)+1];
k=k+1;
end
end
end
k=k-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%进一步缩小车牌候选区
for i=1:k
edge_IM3=double(edge(double(IM3(p{i}(1):p{i}(2)p{i}(3):p{i}(4)))‘canny‘));
[xy]=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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对上面参数和变量的说明:p为一胞元,用于存放每个图像块的左上和右下两个点的坐标;
%存放格式为:p{k}=[x1x2y1y2];x1x2分别为行坐标,y1y2为列坐标
%p_center为一胞元用于存放每个图像块的中心坐标p_center{k}=[xy];xy分别为行列坐标
%p_ratio为一矩阵,用来存放图像块的长宽比例
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%合并临近区域%%%%%%%
%如果有多个区域则执行合并
if k>1
n=0;
ncount=zeros(1k);
for i=1:k-1
%%%需要调整if条件中的比例
%%%需要调整
%检查是否满足合并条件
if(abs(p{i}(1)+p{i}(2)-p{i+1}(1)-p{i+1}(2))<=height/30&&abs(p{i+1}(3)-p{i}(4))<=width/15)
p{i+1}(1)=min(p{i}(1)p{i+1}(1));
p{i+1}(2)=max(p{i}(2)p{i+1}(2));
p{i+1}(3)=min(p{i}(3)p{i+1}(3));
p{i+1}(4)=max(p{i}(4)p{i+1}(4)); %向后合并
n=n+1;
ncount(n)=i+1;
end
end
%如果有合并,求出合并后最终区域
if(n>0)
d_ncount=ncount(2:n+1)-ncount(1:n); %避免重复记录临近的多个区域。
index=find(d_ncount~=1);
m=length(index);
for i=1:m
pp{i}=p{ncount(index(i))};
%重新记录合并区域的比例
pp_ratio(i)=(pp{i}(4)-pp{i}(3))/(pp{i}(2)-pp{i}(1));
end
p=pp; %更新区域记录
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1818 2014-02-22 13:02 matlab 车牌定位(源程序)\cp.jpg
文件 4281 2014-02-22 12:29 matlab 车牌定位(源程序)\ex1505.asv
文件 4340 2014-05-08 13:44 matlab 车牌定位(源程序)\ex1505.m
文件 1372 2014-02-22 10:47 matlab 车牌定位(源程序)\im2gray.m
文件 127 2010-08-29 09:16 matlab 车牌定位(源程序)\projection.m
文件 1250 2014-02-22 12:24 matlab 车牌定位(源程序)\select.asv
文件 1274 2014-02-22 12:25 matlab 车牌定位(源程序)\select.m
文件 17454 2014-05-08 13:49 matlab 车牌定位(源程序)\基于matlab的汽车牌照识别源程序.docx
目录 0 2015-04-21 16:11 matlab 车牌定位(源程序)
----------- --------- ---------- ----- ----
31916 9
- 上一篇:基于sift特征的人民币识别matlab版
- 下一篇:自动寻峰谷算法matlab实现
相关资源
- matlab 车牌定位与分割 详细注释
- 基于MATLAB的车牌定位.zip
- matlab车牌定位识别,完整案例
- 机动车辆车牌定位检测算法研究
- Matlab完整版车牌定位识别
- 基于MATLAB中GUI的完整的车牌识别程序
- MATLAB开发了一套车牌识别系统,完成
- matlab车牌定位识别,完整案例(基于
- 车牌定位及字符识别的MATLAB程序
- 基于阈值分割的车牌定位识别的matl
- matlab车牌定位程序
- matlab 车牌定位字符分割识别完整程序
- MATLAB 汽车牌照识别程序
- Matlab车牌定位源代码
- matlab的车牌定位提取
- 47457821nicecaridentity 一个很好的车牌识
- 利用边缘检测进行车牌的定位
- matlab基于彩色图像的车牌定位只适用
评论
共有 条评论