end
PY2=MaxY;
while ((B_y(PY2,1)>=10)&&(PY2<y))
PY2=PY2+1;
end
IY=I(PY1+1:PY2-1,:,:);
%%%%%% X方向 %%%%%%%%%
B_x=zeros(1,x);%进一步确定x方向的车牌区域
for j=1:x
for i=PY1:PY2
if(myI(i,j,1)==1)
B_x(1,j)= B_x(1,j)+1;
end
end
end
PX1=1;
while ((B_x(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((B_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
PX1=PX1-1;%对车牌区域的校正
PX2=PX2+1;
dw=I(PY1-2:PY2-2,PX1:PX2,:);
t=toc;
%显示行方向的切割结果
figure(6),imshow(IY),title('行方向合理区域');
%显示完美切割结果
figure(7),imshow(dw),title('定位剪切后的彩色车牌图像') ;
imwrite(dw,'dw.jpg'); End
算法的主要步骤如下:程序读入这个二值图像之后,开始检测车牌区域。首先生成一个y行1列的全零矩阵,用来保存二值图像中白色像素点的个数。然后按行扫描二值图像,计算每个像素行白色像素点的个数,保存在数组中。然后在数组中取到白色像素点最多的值的Y轴的坐标。然后进行搜索,只要当前满足白色像素点个数大于一个设定的阈值就认为它还是处于车牌区域,然后此Y轴坐标自减一,继续判断。知道跳出这个循环,表明已经不满足条件,就默认已经跳出车牌区域,所以这时候Y坐标的值就是车牌区域的最上端的坐标。第一个参数就求出来了。同理可以求到车牌区域最下端的Y轴坐标,这样就可以先把车牌区域Y方向切割出来。然后再处理X轴方向的,算法是一样的,就不做解释。具体流程图如下(图3-8):