大学本科毕业论文(设计)
了初步的了解。在继承前人研究成果的基础上,我们对车牌识别系统中车牌的自动定位提出了新的方法,即利用车牌图像的灰度垂直边缘的特征,使用边缘检测算子,使其车牌区域的特征更加明显,同时尽可能抑制车身、环境中的干扰区域;利用形态学中的膨胀、腐蚀等运算对图像进行分割,滤除了图像中很多杂散区域,也使后续扫描的数据量大大减少,既提高了车牌定位的精度,减少了需要的存储空间,也使得系统的运行速度更加快捷,可以满足系统实际应用的要求。在车牌字符的识别过程中,我们提出了基于字符结构特征的识别方法,基于字符结构特征的识别方法识别速度快,无需倾斜校正、归一化等处理,尤其是使用该方法对字符进行识别可以使得字符识别的错识率降为零。
在车牌自动识别系统的研究中,还存在很多不足之处和值得改进的地方,主要体现在以下一些方面:
1. 在图像分割方面,阈值的选取方法还应该做一些新的尝试,寻找对不同灰度
条件下汽车图像都能取得较好分割效果的阈值选取方法。本文所采用的方法归根到底还是一种全局阈值法,它不可能适应所有的牌照。它的二值化方法还有很大的改进余地。比如,如果利用牌照的颜色和光照的不均匀的情况对牌照作不同的划分,然后自适应地选择二值化阈值,或者利用牌照的纹理特征对牌照区域作不同的划分,然后采用局部阈值法,应该会取得更好的效果。 2. 在形态学中结构算子的选取会影响到车牌的精确定位。结构算子选取得太
小,可能无 法把车牌连成一个连通的区域,这主要是在第二和第三字符之间;若选取过大,可能把车灯、保险杠等连通在一起了。因此结构算子的选取很大程度上决定了车牌能否精确定位。
在汽车车牌识别的整个过程中,查找了很多资料,综合了各方面的信息。
牌实现的每一步都有许多的方法,各种方法都有其优劣,但是对于具体的图像处理,并不是每一种理论在实践中都可以实现,即使实现了也很难说哪一种方法最合适,还得在具体的实验中比较选择。
车牌识别程序设计能够得以顺利完成。在很大程度上得利于MATLAB这套软件, MATLAB功能强大,它包括数值计算和符号计算,并且计算结果和编程可视化。这为编程调试创造了一个便利的环境。作为图像处理最适用的工具之一,其突出的特点是它包含一个图像处理工具包,这个工具包由一系列支持图像处理操
29
大学本科毕业论文(设计)
作的函数组成。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT 变换等) 、图像分析和统计、二值图像操作等。在图像的显示方面,MATLAB 提供了图像文件读入函数imread ( ) ,用来读取如: bmp 、tif 、jpg、pcx、tiff 、jpeg、hdf 、xwd 等格式图像文件;图像写出函数imwrite () ,还有图像显示函数image ( ) 、imshow() 等等。这些,都使编程效率大为提高。
附录:
1.车牌定位程序:
I=imread('car.jpg'); imshow(I); I1=rgb2gray(I); figure,imshow(I1);
I2=edge(I1,'robert',0.15,'both'); figure,imshow(I2); se=[1;1;1]; I3=imerode(I2,se); figure,imshow(I3); se=strel('rectangle',[25,25]); I4=imclose(I3,se); figure,imshow(I4); I5=bwareaopen(I4,2000); figure,imshow(I5); [y,x,z]=size(I5); myI=double(I5); tic
white_y=zeros(y,1); for i=1:y for j=1:x
30
大学本科毕业论文(设计)
if(myI(i,j,1)==1)
white_y(i,1)= white_y(i,1)+1; end end end
[temp MaxY]=max(white_y); PY1=MaxY;
while ((white_y(PY1,1)>=26)&&(PY1>1)) PY1=PY1-1; end PY2=MaxY;
while ((white_y(PY2,1)>=5)&&(PY2 IY=I(PY1:PY2,:,:); white_x=zeros(1,x); for j=1:x for i=PY1:PY2 if(myI(i,j,1)==1) white_x(1,j)= white_x(1,j)+1; end end end PX1=1; while ((white_x(1,PX1)<3)&&(PX1 while ((white_x(1,PX2)<3)&&(PX2>PX1)) 31 大学本科毕业论文(设计) PX2=PX2-1; end PX1=PX1-2; PX2=PX2+2; Plate=I(PY1-7:PY2+7,PX1:PX2,:); t=toc figure,plot(white_y);grid figure,plot(white_x);grid figure,imshow(IY); figure,imshow(Plate); 2.车牌识别程序 I = imread('car.jpg'); I2 = rgb2gray(I); I4 = im2bw(I2, 0.2); bw = bwareaopen(I4, 500); se = strel('disk',15); bw = imclose(bw,se); bw = imfill(bw,[1 1]); [B,L] = bwboundaries(bw,4); imshow(label2rgb(L, @jet, [.5 .5 .5])) hold on for k = 1:length(B) boundary = B{k}; plot(boundary(:,2),boundary(:,1),'w','LineWidth',2) end stats = regionprops(L,'Area','Centroid'); for k = 1:length(B) % 获取一条边界上的所有点 32