matlab车牌定位与识别代码,哪位大神能给逐句注释一下

figure(7),subplot(1,2,1),imshow(IY),title('行方向合理区域');
figure(7),subplot(1,2,2),imshow(dw),title('定位剪切后的彩色车牌图像')
imwrite(dw,'dw.jpg');
[filename,filepath]=uigetfile('dw.jpg','输入一个定位裁剪后的车牌图像');
jpg=strcat(filepath,filename);
a=imread('dw.jpg');
b=rgb2gray(a);
imwrite(b,'车牌灰度图像.jpg');
figure(8);imshow(b),
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3);
[m,n]=size(b);
d=(double(b)>=T);
imwrite(d,'车牌二值图像.jpg');
figure(9);imshow(d),title('车牌二值图像')
figure(10),subplot(3,2,3),imshow(d),title('均值滤波前')
h=fspecial('average',3);%创建3x3的均值滤波器
d=im2bw(round(filter2(h,d)));
imwrite(d,'均值滤波后.jpg');
figure(10),subplot(3,2,4),imshow(d),title('均值滤波后')
rotate=0;
e=imread('车牌二值图像.jpg');
bw=edge(e);
[m,n]=size(e);
theta=1:179;
[r,xp]=radon(bw,theta);
i=find(r>0);
[foo,ind]=sort(-r(i));
k=i(ind(1:size(i)));
[y,x]=ind2sub(size(r),k);
[mm,nn]=size(x);
if mm~=0 && nn~=0
j=1;
while mm~=1 && j<180 && nn~=0
i=find(r>j);
[foo,ind]=sort(-r(i));
k=i(ind(1:size(i)));
[y,x]=ind2sub(size(r),k);
[mm,nn]=size(x);
j=j+1;
end
if nn~=0
if x % Enpty matrix: 0-by-1 when x is an enpty array.
x=x;
else % 可能 x 为空值
x=90; % 其实就是不旋转
end
e=imrotate(e,abs(90-x)); % 旋转图像
rotate=1;
end
end
imwrite(e,'Radon 变换旋转后的二值图像.jpg');
figure(11),imshow(e),title('Radon 变换旋转后的二值图像')
pause;
% 某些图像进行操作
% 膨胀或腐蚀
% se=strel('square',3);
se=eye(2); % eye(n) returns the n-by-n identity matrix 单位矩阵
[m,n]=size(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(12),imshow(d),title('膨胀或腐蚀处理后')
d=qiege(d);
[m,n]=size(d);
figure,subplot(2,1,1),imshow(d),title(n)
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; % 分割
% 再切割
d=qiege(d);
% 切割出 7 个字符
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; % WORD 1
end
d(:,[1:wide])=0;d=qiege(d);

逐句 可能没法呢 寡人已经在论坛解释过了 有问题呼我把

首先
1、定位部分 [temp MaxY]=max(white_y); %temp为向量white_y的元素中的最大值,MaxY为该值的索引(在向量中的位置),也就是说temp为车牌矩阵每一列求和的最大值,即车牌x方向最多像素的地方,(姑且叫他像素中线)那么
while ((Blue_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1; 就可以确实车牌上边缘,同理
while ((Blue_y(PY2,1)>=5)&&(PY2<y)) PY2=PY2+1;确定下边缘 。为什么是大于5呢,刚才已经知道是车牌x方向所有列的和,也就是宽,车牌单个字符,那么范围为0-128px,如果值越大,则上下边缘就像素中线就近了,那么车牌车牌横向就短了嘛
,同理。while ((Blue_y(1,PX1)<3)&&(PX1<x)) PX1=PX1+1;
为什么是3呢。,车牌单个字符的,值确定,那么车牌车牌纵向区域就窄了

2、分割:

首先对车牌图像自左向右逐列扫描,寻找连续有文字的区间块,将该区间块的有效宽度与某一固定阈值(本文设定的阈值为10,可更改)进行比较,若小于该设定阈值,则认为是左侧干扰,裁剪干扰区域;反之,分割出该模糊

字符块。

3)判断该字符区域是否为有效区域。首先建立矩阵,依据车牌先验知识,分析该字符区域的有效宽度及宽高比(1:2),即可判断是否为干扰区域,若为字符区域,进一步去除伪字符区域,则分割出第一个字符;反之,认为是左侧干扰区域进行裁剪。

解释:本程序对于定位部分比较理想的情况下 分割率为50%+,但对川字车牌没有鲁棒性,由于川字未连通,所以会被当作背景而切除,其他省份,暂时没有遇到过。当然如果定位后的车牌倾角大于20度这样,那么必须校正,否则会出错

3、分割:这部分就悲剧了,采用的是单纯的模板相减,并且程序没有标准模板
建议计算相关系数,用距离变换进行匹配把追问

能给个网址吗?小弟去那学习学习

追答

百度搜索 matlab中文论坛

追问

内容太多啊,大侠,能给个网址吗

追答

加q把
没法发网址了 一发 百度 又要审核了半天

追问

317377996

温馨提示:答案为网友推荐,仅供参考
相似回答