提取车牌的具体步骤如下:
1、提取原始图像的行,列和维数,并将数字图像坐标化;
2、对汽车图像进行行扫描,并对此方向进行像素分析,将蓝像素点三基范围的颜坐标统计并记录下来,记入一个矩阵IY中,IY为包含行方向车牌像素点的一幅数字图像;
3、对数字图像IY进行列方向扫描,同时进行蓝像素点统计,将统计的像素点记入矩阵Plate中,Plate就是要提取的目标图像,即车牌图像;
4、保存车牌图像,便于下一步提取图像。
基于颜提取汽车车牌的程序如下所示:
I=imread('DSC00944.JPG');
subplot(2,3,1),imshow(I);
title('原始图像');
[y,x,z]=size(I);
myI=double(I);
Blue_y =zeros(y,1);
fori=1:y
for j=1:x
if(((myI(i,j,1)<=55)&&(myI(i,j,1)>=0))&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=30))&&...
((myI(i,j,3)<=200) &&(myI(i,j,3)>=90)))
%蓝RGB的颜范围
Blue_y(i,1)=Blue_y(i,1)+1;
%蓝像素点统计
end
end
end
[tempMaxY]=max(Blue_y);
%Y方向车牌区域确定
PY1=MaxY;
while((Blue_y(PY1,1)>=5)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while((Blue_y(PY2,1)>=5)&&(PY2<y))
PY2=PY2+1;
end
IY=I(PY1:PY2,:,:);
subplot(2,3,2),plot(Blue_y);grid
title('Y方向统计')
subplot(2,3,4),imshow(IY);
title(' Y方向车牌区域确定')
%X方向统计
Blue_x=zeros(1,x);
%进一步确定X方向的车牌区域
for j=1:x
fori=PY1:PY2
if((myI(i,j,1)<=55)&&myI(i,j,1)>=0&&((myI(i,j,2)<=100)&&(myI(i,j,2)>=30))&&...
((myI(i,j,3)<=200)&& (myI(i,j,3)>=90)))
Blue_x(1,j)=Blue_x(1,j)+1;
end
end
end
PX1=1;
while((Blue_x(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while((Blue_x(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
subplot(2,3,3),plot(Blue_x);grid
title('X方向统计')
%对车牌区域的修正
PX1=PX1-2;
PX2=PX2+2;
Plate=I(PY1:PY2,PX1-2:PX2,:);
subplot(2,3,5),imshow(Plate);
title('车牌显示');
imwrite(Plate,'chepai.bmp');
程序输出结果如下:
图4.1 车牌定位结果
4.4 图像的预处理
4.4.1预处理方法流程
由于本系统的车牌图像是在室外进行拍摄,因此不可避免地会受到自然季节、光线等因素的影响。光照条件影响车牌图像的对比度,车辆外表环境会带来不必要的影响,车辆行驶状态也会影响到车牌的正常结构等;要去除这些干扰就得先对车牌图像进行预处理,预处理阶段处理的好坏直接影响到车牌提取与分割以及车牌字符识别的准确性[4][6-7][11][33]。
本文的图像预处理算法流程如图4.2所示
4.4.2图像的灰度化
通过摄像头采集的车牌图像是彩的,图像包含了大量的颜信息,对系统的存储与处理能力要求比较高,且存在差。
经常会出现图像的灰度范围[a, b]没有利用显示装置所允许的最大灰度范围[c, d] 这样的情况,从而导致图像的对比度太低,使一些细节不易被观察到。而解决这个问题的最简单的方法是进行灰度的线性变换,可有如下数学式表达:
图4.2 预处理算法流程
假定原图像f(x, y)的灰度范围为[a, b],变换后图像g(x, y)的灰度范围希望扩展到[c,d],线性变换表示式为:
汽车车牌 4.1
对灰度作线性变换以后,把原始图像f(x, y)的灰度范围[a, b]强行扩展为显示装置所允许的最大灰度范围[c,d],从而提高了整幅图像的对比度,原来观察不到的一些图像细节可能突出了。灰度变换函数为:
I1=rgb2gray(I)
效果图如下:
原始图像灰度图像
图4.3 灰度处理
4.4.3中值滤波
数字图像中往往存在各种类型的噪声,产生噪声的途径与生成图像的方法有关。对于数字图像,获取数据的设备、扫描操作以及电子传输等都可能引起噪声。工具箱提供了多种方法来减少和删除图像中的噪声,常用的方法有线性滤波、中值滤波和自适应滤波。本文用中值滤波方法可以有效去除图像中的噪声点,同时保护图像边缘的细节。
中值滤波是一种非线性滤波,通过在图像上移动一个滑动窗口,它把邻域内的所有像素按灰度值进行排序,然后取中间值作为窗口中心位置的象素值 [13]。因此关键在于滑动窗口的选
取,本文采用3×3 方形窗口进行滤波。使用中值滤波器去除噪声的方法有很多,常用的一种方法是先使用小尺度邻域,后逐渐加大邻域尺寸进行处理;也可以交替使用一维滤波和二维滤波进行处理。此外还有对输入图像反复进行迭代操作,直到输出不再有变化为止[6][8][13]。中值滤波的突出优点是不仅消除噪声,还能很好的消除图像中孤立噪声点的干扰,有效的保护边界信息。
可以用函数imfilter来进行中值滤波:
rgb2 = imfilter(rgb, H)
其中H表示滤波器的种类,中值滤波的H可以设为,滤波结果如下:
图4.4 中值滤波结果
4.4.4图像的二值化及其阀值处理
车牌二值化是识别图像的一个关键步骤,其目的是得到鲜明分离目标和背景的二值图[32]。原始图像的数据一般比较大,对其进行处理的时间也较长,而由于实时性的要求,车牌的提取需要一次性处理就能把绝大多数特征提取出来,要求转化的结果图像不丢掉有用的形状信息,产生额外的空缺,必须具有良好的保形性等。把得到的图像转化为二值图像,这样数据量就会大大减少。在车牌识别中,通过图像的二值变化将车牌与背景分割开来,其关键在于确定合适的阀值。阈值设置过小易产生噪声,阈值设置过大会降低分辨率,使非噪声信号被视为噪声而滤掉。考虑到车牌字符具有规律性排列的特点,字符和牌照底在灰度值上存在突变,因此选取了初始阈值进行图像二值化处理。其原理是统计每幅图像灰度的分布特性,阈值设为T =(fmax +fmin )/2,fmax , fmin为图像中最大和最小灰度值。在MATLAB中用函数im2bw来进行图像二值化处理。二值化结果如图4.4所示。
发布评论