se=[1;1;1];
I3=imerode(I2,se);% 腐蚀Imerode(X,SE).其中X是待处理的图像,SE是结构元素对象
figure('name','腐蚀后图像'),imshow(I3);title('腐蚀后的图像');
se=strel('rectangle',[20,20]);% 25X25的矩形strel???
I4=imclose(I3,se);% 用25*25的矩形对图像进行闭运算(先膨胀后腐蚀)有平滑边界作用figure('name','平滑处理'),imshow(I4);title('平滑图像的轮廓');
I5=bwareaopen(I4,1000);% 从二进制图像中移除所有少于2000像素的连接对象,消失的是连续的白色像素数量少于2000的字符
figure('name','移除小对象'),imshow(I5);title('从对象中移除小对象');
[y,x,z]=size(I5);% y是行数,x是列数,z是维数
myI=double(I5);% 转成双精度型
tic % 开始计时
Blue_y=zeros(y,1);% zeros(M,N) 表示的是M行*N列的全0矩阵
for i=1:y
for j=1:x
if(myI(i,j,1)==1) %% 判断蓝色像素
Blue_y(i,1)= Blue_y(i,1)+1;% 蓝色像素点统计
end
end
end
[temp MaxY]=max(Blue_y);% Y方向车牌区域确定[temp MaxY]临时变量MaxY
PY1=MaxY; % 以下为找车牌Y方向最小值
while ((Blue_y(PY1,1)>=5)&&(PY1>1))%% 为什么判断蓝色像素点>=5(才算蓝色)????
PY1=PY1-1;
end
PY2=MaxY; % 以下为找车牌Y方向最大值???难道最大值不是MaxY????
while ((Blue_y(PY2,1)>=5)&&(PY2PY2=PY2+1;
end
% IY=I(PY1:PY2,:,:);
%%%%%%%%%%%%%%%%% X方向%%%%%%%%%
Blue_x=zeros(1,x);% 进一步确定x方向的车牌区域
for j=1:x
for i=PY1:PY2 % 只需扫描的行
if(myI(i,j,1)==1) %% 判断蓝色像素
Blue_x(1,j)= Blue_x(1,j)+1; % 蓝色像素点统计
end
end
end
PX1=1;% 以下为找车牌X方向最小值
while ((Blue_x(1,PX1)<3)&&(PX1PX1=PX1+1;
end