投影法分割字符 网上找到的
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%计算车牌水平投影,并对水平投影进行峰谷分析
histcoll=sum(sbw2);
histrow=sum(sbw2');
figure;subplot(2,1,1);bar(histcoll);title('垂直投影(含边框)');
subplot(2,1,2),bar(histrow);title('水平投影(含边框)');
figure;subplot(2,1,1);bar(histrow);title('水平投影(含边框)');
subplot(2,1,2);imshow(sbw2);title('车牌二值子图');
%对水平投影进行投影分析
meanrow=mean(histrow);
minrow=min(histrow);
levelrow=(meanrow+minrow)/2;
count1=0;
l=1
for k=1:hight
if histrow(k)<=levelrow
count1=count1+1;
else
if countl>=l
markrow(l)=k; %上升点
markrow1(l)=countl; %谷宽度(下降点至下一个上升点)l=l+1;
end
count1=0;
end
end
markrow2=diff(markrow); %峰距离(上升点至下一个上升点)
[ml,nl]=size(markrow2);
nl=nl+1;
markrow(l)=hight;
markrow(l)=count1;
markrow2(nl)=markrow(l)-markrow(l-1);
l=0;
for k=1:nl
markrow3(k)=markrow(k+1)-markrow1(k+1); %下降点
markrow4(k)=markrow3(k)-markrow(k); %峰宽度(上升点至下降点)markrow5(k)=markrow3(k)-double(unit16(markrow4(k)/2)); %峰中心位置end
%去水平(上下)边框,获取字符高度
maxhight=max(markrow2);
findc=find(markrow2==maxhight);
rowtop=markrow(findc);
rowbot=markrow(findc+1)-markrow1(findc+1);
sbw2=sbw(rowtop:rowbot,:); %子图为(rowbot-rowtop+1)行
maxhight=rowbot-towtop+1; %字符高度(rowbot-rowtop+1)
%计算车牌垂直投影,去掉车牌垂直边框,获取车牌和字符平均宽度
histcol=sum(A); %计算垂直投影
figure,subplot(2,1,1),bar(histco l);title(‘垂直投影(去水平边框后)‘);
subplot(2,1,2),imshow(sbw2);
title([‘车牌字符高度:‘,int2str(maxhight)],’Color’,’r’)
meancol=mean(histcol);
mincol=min(histcol);
levelcol=(meancol+mincol)/4;
countl=0;
l=1;
for k=1:width
if histcol(k)<=levelcol
countl=countl+1;
else
if countl>=1
markcol(l)=k; %字符上升点
markcol1(l)=countl; %谷宽度(下降点至下一个上升点)
l=l+1;
end
count1=0;
end
end
markcol2=diff(markcol); %字符距离(上升点至下一个上升点)
[ml,nl]=size(markcol2);
nl=nl+1;
markcol(1)=width;
markcol1(1)=count1;
markcol2(nl)=markcol(1)-markcol(l-1);
%计算车牌上每个字符中心位置,计算最大字符宽度maxwidth
l=0;
for k=1:nl
markcol3(k)=markcol(k+1)-markcol1(k+1); %字符下降点
markcol4(k)=markcol3(k)-markcol(k); %字符宽度(上升点至下降点)
markcol5(k)=markcol3(k)-double(unit16(markcol4(k)/2)); %字符中心位置
end
markcol6=diff(markcol5); %字符中心距离(字符中心点至下一个字符中心点)maxs=max(markcol6); %查找最大值,即为第二个字符与第三个字符中心距离findmax=find(markcol6==maxs);
markcol6(findmax)=0; %将最大值清0
maxwidth=max(markcol6); %查找最大值,即为最大字符宽度
%提取分割字符,并变换为40*20的标准子图
l=1;
[m2,n2]=size(subcol);
figure;