当前位置:文档之家› 投影法分割字符 网上找到的

投影法分割字符 网上找到的

%计算车牌水平投影,并对水平投影进行峰谷分析
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;
for k=findmax-1:findmax+5
cleft=markcol5(k)-maxwidth/2;
cright=markcol5(k)+maxwidth/2-2;
SegGray=subcol(rowtop:rowbot,cleft:cright);
SegBw1=sbw(rowtop:rowbot,cleft:cright);
SegBw2=imresize(SegBw1,[40 20]); %变换为32行*16列标准子图Subplot(2,nl,1),imshow(SegGray);
if l==7
title([‘车牌字符宽度:‘,int2str(maxwidth)],’Color’,’r’);
end
subplot(2,nl,nl+1),imshow(SegBw2);
l=l+1;
end。

相关主题