车牌照自动识别系统
北京航空航天大学
车牌自动识别系统
数字图像处理与识别课程实验
38173106 杨继光
2011/6/16
[在此处键入文档摘要。摘要通常为文档内容的简短概括。在此处键入文档摘要。摘要通常为文档内容的简短概括。]
《图像处理与识别》实验报告 车牌识别实验
车牌识别系统
摘 要:利用MATLAB工具进行车牌字符的识别,从而熟悉数字图像处理的基本方法和原理,加深对课本知识的认识。本报告对车牌识别系统的实现思路和具体算法按步骤做出了说明,但实验是一步步做的,因此并没有对整个大的实验程序进行整理。
引言:
近年来,汽车车牌识别问题己成为现代交通
领域中研究的重点和热点问题之一,车辆牌照识别系统可用于一切需要对车辆进行管理的场合,比如公路收费站、停车场、十字路口等交通关卡等处,对于道路交通、园区和停车场车辆管理具有巨大的经济价值和现实意义。将图像通过视频采集卡输入计算机进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,归一化后输入字符识别系统进行识别,这样一连串过程是车牌识别系统较为成熟思路。
系统组成模块
汽车车牌的识别过程主要包括车牌定位、车牌字符分割和车牌字符识别三个关键环节。 图像预处理 边缘提取 车牌定位 字符分割 字符匹配识别
形态学运算 投影检测 Cany算子 最小距离分滤波
类器 边界增强 具体实验过程:
(一) 车牌的分割思路:
对采集到的图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选
区,然后对这些侯选区域做进一步
、评判,最后选定一个最佳的区域作为牌照
区域,并将其从图像中分割出来。
Figure 1原图
- 1 -
《图像处理与识别》实验报告 车牌识别实验
A=imread('*.jpg');
I= rgb2gray(A); %转换成灰度图
figure,imshow(I),title('黑白图像');
Figure 2 灰度图
s=strel('disk',20);%strei函数
B=imopen(I,s);%打开图像
figure,imshow(B,[]),title('背景图
像'); %得到背景
Figure 3 取背景
C=imsubtract(I,B);%两幅图相减
figure,imshow(C),title('增强后的
黑白图像');
Figure 4 增强后的图像
thresh=graythresh(I);
bw=im2bw(I,thresh);% matlab自
适应阈值二值化
imshow(bw);
Figure 5二值化
G=fspecial('log',5,0.5);
Gg=imfilter(I,G,'corr','replicate');%Log算子锐化处理
figure,imshow(uint8(abs(Gg)),[]);
grd=edge(Gg,'canny');%用canny算子识别边界
figure,imshow(grd),title('边缘提取');%输出图像边缘
Figure 6取边缘
- 2 -
《图像处理与识别》实验报告 车牌识别实验
bg1=imclose(grd,strel('rectangle',[5
,15]));%取矩形框的闭运算
figure,imshow(bg1);title('图像闭
运算[5,15]');%输出闭运算的图像
Figure 7形态学运算1
bg3=imopen(bg1,strel('rectangle',[
5,15]));%取矩形框的开运算
figure,imshow(bg3);title('图像开
运算[5,15]');%输出开运算的图像
Figure 8形态学运算2
bg2=imopen(bg3,strel('rectangle',[
20,1]));%取矩形框的开运算
figure,imshow(bg2);title('图像开
运算[20,1]');%输出开运算的图像
取长宽 >> D.BoundingBox; 比接近3Figure 9形态学运算3 >> D.BoundingBox 的 ans =
虽然9号图显示的为D=regionprops(L,'area','Boundin 0.5000 0.5000 698.0000
三个连通区域,但用软gBox','ConvexHull'); 398.0000
件识别时为5个。 D.Area ans = 舍去过 >> [L ans = 202.5000 110.5000 88.0000 大区域 num]=bwlabel(It2,8); 130933 46.0000
>> num ans = ans =
num = 3004 311.5000 189.5000 107.0000
ans = 41.0000
5 4034 ans =
ans = 371.5000 23.5000 22.0000
286 13.0000
ans = ans =
4280 434.5000 116.5000 123.0000
46.0000
- 3 -
《图像处理与识别》实验报告 车牌识别实验
[Q W E R T]=D.ConvexHull; k=K(189:189+41,311:311+107);
>> size(Q) >> imshow(k);
ans = >> 去掉边 2193 2 k=K(189-5:189+41-5,311-6:311+107-6); 缘 >> size(W) >> imshow(k);
ans = >>
取形状 112 2 k=K(189+5:189+41-5,311+6:311+107-6);
规则的 >> size(E) >> imshow(k);
ans = >>
140 2 k=K(189+8:189+41-8,311+6:311+107-6);
>> size(R) >> imshow(k);
ans = >>
71 2 k=K(189+11:189+41-8,311+6:311+107-6);
>> size(T) >> imshow(k);
ans =
194 2
Figure 10分割所得车牌
(二) 字符分割投影法:
分割出来并大小归一化为16*8模板字符
像素大小的字符
分割字符取骨架细化 模板归一化并取骨架
- 4 -
《图像处理与识别》实验报告 车牌识别实验 (三)字符识别思路:
模板字符与待识别字符图像分别存储为一维特征向量,并组合成模板向量空间和待
识别字符向量空间,用待识别字符的向量分别与模板向量空间中的向量求距离,最
短者为识别字符。
本例中模板与待识别字符均归一化为16*8像素大小,因此每个特征向量是1*128
维度大小,各自组成的向量空间为6*128维度大小。
两个向量空间存储字符顺序一致,为A,9,8,5,3,2;由以下程序看出最终识别结果
class应该是class=[1,2,3,4,5,6],最终结果为class=[1,2,1,4,4,6],分析得出8,3没有得到
有效识别。
过程如下:
骨骼细化并取特征向量 a=imread('.jpg'); thresh=graythresh(a); b=im2bw(a,thresh);% matlab自适应阈 值二值化 subplot(1,3,1);imshow(b); s=imresize(b,[16 8]);%变换为22行*14列标 准子图 subplot(1,3,2);imshow(s); c=bwmorph(s,'skel',2); subplot(1,3,3);imshow(c); m1=c(:); 识别环节: Figure 11结果图 class=zeros(1,6); for ii=1:6 for jj=1:6 h(jj)=norm(m(ii,:)-d(jj,:)); end [minjuli class(ii)]=min(h); end
结论:
本系统在MATLAB环境下实现车牌字符的识别,从实验结果上分析,该算法可实现较好的车牌定位,但是如果遇到图像不清晰,环境条件复杂时,用形态学算法定位时会找到大量的连通区域,不容易找到车牌。车牌最后的识别环节准确率不高,可能是字符归一化后太小或者方法本身不适合。整个实验并没有完整的代码,绕过了编大段代码的困难,采取一步步进行,写短代码的方式,因此完成并不是太好,但确实理解了图像处理背后的原理,加深了对课程的认识。
- 5 -