tic % 测定算法执行的时间,开始计时 Blue_y=zeros(y,1); for i=1:y for j=1:x
if(myI(i,j,1)==1) % 寻找y轴方向的白色区域
Blue_y(i,1)= Blue_y(i,1)+1; % 是蓝色区域的则进行计数 end end end
[temp MaxY]=max(Blue_y);%Y方向车牌区域确定 temp(最多点数):所有行中,最多的累积 PY1=MaxY;
while ((Blue_y(PY1,1)>=5)&&(PY1>1)) PY1=PY1-1; end %Y轴方向的上限 PY2=MaxY;
while ((Blue_y(PY2,1)>=5)&&(PY2 %%%%%% X方向 %%%%%%%%% Blue_x=zeros(1,x);%进一步确定x方向的车牌区域 for j=1:x for i=PY1:PY2 %只需要扫描PY1:PY2 的部分,简化程序 if(myI(i,j,1)==1) Blue_x(1,j)= Blue_x(1,j)+1; end end end PX1=1; while ((Blue_x(1,PX1)<3)&&(PX1 end %确定x轴的右边界 PX2=x; while ((Blue_x(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end %确定x轴的左边界 PX1=PX1-1;%对车牌区域的校正 PX2=PX2+1; dw=I(PY1:PY2-8,PX1:PX2,:); %确定图片的截取区域 t=toc; % 读取程序的运行时间 a=imread('dw.jpg'); %读入已经截取好的图像 A=size(a); if length(A)==3 b=rgb2gray(a); else b=a; end figure(8);subplot(3,2,1),imshow(b),title('1.车牌灰度图像') g_max=double(max(max(b))); g_min=double(min(min(b))); T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值 [m,n]=size(b); d=(double(b)>=T); % d:二值图像 imwrite(d,'2.车牌二值图像.jpg'); figure(8);subplot(3,2,2),imshow(d),title('2.车牌二值图像') figure(8),subplot(3,2,3),imshow(d),title('3.均值滤波前') % 滤波 h=fspecial('average',3); %进行均值滤波 imwrite(d,'4.均值滤波后.jpg'); figure(8),subplot(3,2,4),imshow(d),title('4.均值滤波后') % 某些图像进行操作 % 膨胀或腐蚀 se=eye(2); % eye(n)可返回一个2*2单位矩阵 [m,n]=size(d);%图像为二值图像,x,y为坐标 if bwarea(d)/m/n>=0.365 %计算二值图像中对象的总面积 d=imerode(d,se); %实现图形的腐蚀 elseifbwarea(d)/m/n<=0.235 d=imdilate(d,se);%实现图像的膨胀 end imwrite(d,'5.膨胀或腐蚀处理后.jpg'); figure(8),subplot(3,2,5),imshow(d),title('5.膨胀或腐蚀处理后') % 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割 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; % k1+num+5列的位置赋值为黑色,分割 end end % 再切割 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