基于 MATLAB 的车牌模糊识别
丁伍洋
(广东工业大学 计算机学院 广州,510006)
摘要:智能交通的快速发展给车牌识别系统提出了更高的要求。利用 Matlab 在图像处
理中优势,对车牌图像进行二值化,灰度化,字符分割等预处理,用模糊信息处理算
法对字符进行识别,将有效地提高识别准度。
关键词:二值化;字符分割;模糊识别
License Plate Fuzzy Recognition Based on MATLAB
(Guangdong University of Technology,Guangzhou 51006,China)
DingWuYang
intelligent
transportation put
Abstract: The rapid development of
forward higher
requirements for license plate recognition system.It will effectively improve the accuracy of
recognition by using MATLAB and fuzzy information processing algorithems.For MATLAB
is suitable for the license plate image binarization,graying , chracter segmentation and
character recognition.
Keywords: Binarization; character segmentation; fuzzy recognition
1 引言
信息技术的快速发展给现代交通运输体系进步带来了巨大的飞跃,智能交通系统
也随之应运而生。然而,交通运输网络的不断成长,车牌识别技术也将会拥有更加广
阔的前景。
车牌识别主要包含车牌图像的处理与字符识别,用 MATLAB 软件实现车牌图像的
处理,采用模糊模式识别的算法来识别字符,在保证准确性的前提下,也兼顾了实时
性。车牌识别主要包括:图像预处理,字符分割,模板建立,字符识别等步骤。
2 车牌模糊识别的原理
2.1 图像预处理
灰度化:三色基原理中灰度值取值是从 0 到 225,当 R、G、B 分量取值都为 0 时
图像呈现为黑色,当 R、G、B 3 分量取值都为 225 时图像呈现为白色。 因此在图像中
灰度值大的像素点比灰度值小的像素点要亮 图像的预处理过程中图像的灰度。根据
RGB和 YUV 颜色空间的变化关系在此建立亮度Z与 RGB3 个颜色分量的对应:
Z=0.3R+0.59G+0.11B (1)
二值化:图像的二值化就是将图像上的像素点的灰度值设置为 0 或 255 再以一定
的标准划分为黑白两种颜色。
nmp
),(;1
),(;0
Tnmp
T
(2)
nmp
),(
在 MATLAB 中实现为:
a=imread('chepai.jpg');
b=rgb2gray(a);
imwrite(b,'1.车牌灰度图像.jpg');
g_max=double(max(max(b)));
g_min=double(min(min(b)));
T=round(g_max-(g_max-g_min)/3);
[m,n]=size(b);
d=(double(b)>=T); % d:二值图像
imwrite(d,'2.车牌二值图像.jpg');
车牌校正:由于拍摄的角度不同,采集到图像上的字体可能是倾斜的,因此用 radon
变换检测倾角θ,然后以
),( yxp
为旋转中心点进行校正。则任意一点
),( yxm
校正后
),( yxq 满足下面的等式:
的点
(
xxyx
)
xxyy
)
(
cos
y(
)y
sin
sin
(
)yy
cos
(3)
(4)
滤波,膨胀和腐蚀处理:对图像进行滤波主要是为了消除图像中存在的噪声,利
用滤波可以从复杂的信号中提取出所需要的信号,抑制不需要的信号。在图像处理中
滤波常用来修改或增强图像,以提高图像的信息量。
2.2 字符分割
将得到的车牌区域图像进行预处理后对图像进行垂直投影,投影图上有明显的类
似于峰谷的波形起伏变化通过对投影图上的波形从左向右进行扫描。根据谷和峰的特
征就可以判断出每个字符的位置,计算垂直峰,检测合理的字符高宽比然后进行分割。
MATLAB 中实现如下:
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(d);
[m,n]=size(d);
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)1=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; % 分割
end
end
利用上面的算法可以依次将车牌上的字符分割出来。
2.3 建立模板
模板的建立直接影响到识别的结果,在此,采用标准的车牌图像,过程如以上步
骤;依次进行二值化,校正,滤波等预处理后,分割成 20*40 的标准模板,建立识别
所需参照的模板库。如下例子:
图一
可以建立各个省区简称的汉字,0 到 9 十个数字字符,26 个字母字符的标准模板库,
并以汉字,字母,数字的顺序进行存储。
2.4 字符识别
基于择近原则的模式识别原理:设给定论域 U 上的模糊子集
2~,1~
AA
,....
nA
~
及另一
个模糊子集B~ ,若贴近度:
则认为
iB A~与~
最接近。
)~,~(
iAB
=V
)~,~(
iAB
(
1
ni
) (5)
读取待识别车牌字符信息建立模糊矩阵 iA~ ,有模板库中得图像信息建立模糊集
iB~ ,由于待识别的字符与模板库是以相同的方式获取,只是模板库中字符更加规范,
因而采用海明贴近度:
)~
BAN
~(
1
ni
/
在 MATLAB 中实现如下:
n
i
1
]*[|
kmBkmA
]*[
(6)
l=1;
for l =1:7
ii=int2str(l); %将整数转换为字符串
t=imread([ii,'.jpg']);
d1=imresize(t,[40 20],'nearest'); %实用最近邻插值法放大图像
if l==1
kmin=37;
kmax=60;
%第一位汉字识别
elseif l==2
%第二位 A~Z 字母识别
kmin=11;
kmax=36;
else l>=3
%第三位以后是字母或数字识别
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat('d1\',liccode(k2),'.jpg');
d1= imread(fname);
for
i=1:40
for j=1:20
d1(i,j)=d1(i,j)-d1(i,j);
end
end
% 以上相当于两幅图相减得到第三幅图
Dmax=0;
for k1=1:40
for l1=1:20
( d1(k1,l1) > 0 | d1(k1,l1) <0 )
Dmax=Dmax+1;
if
end
end
end
Error(k2)=1-1/n*Dmax;
end
Error1=Error(kmin:kmax);
MaxError=max(Error1);
findc=find(Error1==MaxError);
l=l+1;
end
3 仿真结果
原始图像如图二所示:
图二
图三
灰度化后的图像如图三所示:
预处理后的结果如图四所示:
字符分割后的结果如图五所示:
识别结果如图六所示:
图四
图五
图六
4 结语
准确快速的车牌识别系统正越来越广泛地应用于智能交通系统。本文利用
MATLAB 软件结合模糊模式识别的相关知识实现了对车牌字符的识别。然而,由于受
坏境的影响,获取的车牌图像的优劣以及处理过程的误差会仍会对识别结果产生重大
的影响。
参考文献:
[1] 王广宇.车辆牌照识别系统的原理及算法研究[D].郑州:郑州大学,2000.
[2] 蔡 波,朱玉玉.车辆识别中的快速区域定位方法研究[J ] .西南科技大学学报 ,2004 ,6
(2) :26228.
[3] 刘为国. MATLAB 程序设计教程[M] .北京:中国水利水电出版社 ,2005.
[4] 刘位滚, 邓荣标, 孔嘉圆.一种车牌识别算法的实现 中国科技信息[J],2005,23(2)
[5] 李世勇,工程模糊数学及应用[M],哈尔滨工业大学出版社.