一、原理
车辆牌照识别系统工作原理
车辆牌照识别系统的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后输入JPEG或BMP格式的数字,输出则为车牌号码的数字。
二、车辆牌照识别系统组成
图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。
车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。
字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像
字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。
三、处理过程
3.1 图像预处理与车牌定位
输入的彩色图像包含大量颜色信息,会占用较多的存储空间,且处理时也会降低系统的执行速度,因此对图像进行识别等处理时,常将彩色图像转换为灰度图像,以加快处理速度。对图像进行灰度化处理、边缘提取、再利用形态学方法对车牌进行定位。具体步骤如下:首先对图像进行灰度转换,二值化处理然后采用4X1的结构元素对图像进行腐蚀,去除图像的噪声。采用25X25的结构元素,对图像进行闭合应算使车牌所在的区域形成连通。在进行形态学滤波去除其它区域。
I=imread('微心: matlab2022.jpg');%读取图像
figure(); subplot(3,2,1),imshow(I), title('原始图像');
3.2 图像灰度化
I1=rgb2gray(I);%转化为灰度图像
subplot(3,2,2),imshow(I1),title('灰度图像');
3.3 图像边缘检测
I2=edge(I1,'roberts',0.09,'both');%采用roberts算子进行边缘检测
subplot(3,2,3),imshow(I2),title('边缘检测后图像');
3.4 图像形态学处理
se=[1;1;1]; %线型结构元素
I3=imerode(I2,se); %腐蚀图像 二值化处理然后采用4X1的结构元素对图像进行腐蚀, %去除图像的噪声
subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');
3.5 车牌定位
[y,x,z]=size(I5);
I6=double(I5); % size(I6)为480*640,I6为二值化后的矩阵,只有0和1
Y1=zeros(y,1); % 把Y1初始化为全为0的480维列向量
for i=1:y %以下循环统计每行的像素点灰度值累积和,是为了找出车牌位置是以哪行开始以及截止
for j=1:x
if(I6(i,j,1)==1) % I6(i,j,1)就表示I6(i,j)那个1表示第三维度,I6(i,j,2)就会出错,超出矩阵维度
Y1(i,1)= Y1(i,1)+1;
end
end
end
[temp MaxY]=max(Y1); % temp=259是列向量Y1的最大值, MaxY=175是最大值对应索引值
figure();
subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和'),xlabel('行值'),ylabel('像素');
%%%%%%%求的车牌的行起始位置PY1和终止位置PY2%%%%%%%%%
%%% Y1是列向量,每个元素是每行的元素为1的总和
PY1=MaxY; %列向量Y1的最大值索引值赋给PY1,即该行的白点(因为白色是车牌号,黑色是背景) %最多即是车牌的行起始位置?错,行起始位置不一定白点最多,所以才有下面的对PY1 %的操作
%%%索引值自减直到索引到Y1中某行白点个数小于50为止的行数即为车牌行数起始位置
while ((Y1(PY1,1)>=50)&&(PY1>1)) %当Y1最大值>=50并且最大值索引>1时。MATLAB的索引从1开始
PY1=PY1-1; % 索引值自减1
end
PY2=MaxY; %PY2是行终止位置
%%%索引值自增直到索引到Y1中某行白点个数小于50为止的行数即为车牌行数起始位置
while ((Y1(PY2,1)>=50)&&(PY2<y)) %当Y1最大值>=50并且最大值索引<y时,停止循环
PY2=PY2+1; % 索引值自加1
end
IY=I(PY1:PY2,:,:); %把从PY1到PY2的所有行赋给IY
X1=zeros(1,x); % 把Y1初始化为全为0的640维行向量
for j=1:x %以下循环统计每列的像素点灰度值累积和
for i=PY1:PY2
if(I6(i,j,1)==1)
X1(1,j)= X1(1,j)+1;
end
end
end
subplot(3,2,2),plot(0:x-1,X1),title('列方向像素点灰度值累计和'),xlabel('列值'),ylabel('像数');
3.6 字符切割
if isrgb(I)
I1 = rgb2gray(I); %将RGB图像转化为灰度图像
else I1=I; end
g_max=double(max(max(I1)));
g_min=double(min(min(I1)));
T=round(g_max-(g_max-g_min)/3); % T为二值化的阈值
[m,n]=size(I1); % d:二值图像
%h=graythresh(I1); %graythresh是一个函数,功能是使用最大类间方差法找
%到图片的一个合适的阈值。利用这个阈值通常比人为设定阈
%值能更好地把一张灰度图像转换为二值图像
I1=im2bw(I1,T/256);
subplot(3,2,4);
imshow(I1),title('二值化车牌图像');
3.7 车牌字符识别
字符识别方法主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法是首先将分割后的字符二值化,并将其尺寸缩放为字符数据库中模板的大小,然后与所有模板进行匹配,最后选取最佳匹配作为结果。建立数字库对该方法在车牌识别过程中很重要, 数字库准确才能保证检测出的数据正确。基于人工神经元网络的算法有两种,一种是先对特征提取待识别字符,然后用所获得的特征训练神经网络分配器;另一种是直接将待处理图像输入网络由网络自动实现特征提取直至识别结果。在本程序中用基于人工神经元网络识别车牌字符。在车牌字符识别部分, 字符集中包含约50个汉字, 26个大写英文字母及10个阿拉伯数字。总的字符样本并不太多。
s=strcat('渝',str1,str2,str3,str4,str5,str6);
figure();
imshow(dw),title(s);