基于matlab的车牌识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汽车车牌的号码识别
1.车牌号码识别的基本工作原理为:将摄像头拍摄到的包含车辆牌照的图像通过视频卡输入到计算机中进行预处理,再由检索模块对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单
个字符,得到输出结果。
2.车牌号码识别系统原理图各部分说明如下:
(1)图像预处理:对汽车图像进行图像转换、图像增强和边缘检测等。
(2)车牌定位:从预处理后的汽车图像中分割出车牌图像。即在一幅车辆图像中找到车牌所在的位置。
(3)字符分割:对车牌图像进行几何校正、去噪、二值化以及字符分割以从车牌图像中分离出组成车牌号码的单个字符图像。
(4)字符识别:对分割出来的字符进行预处理(二值化、归一化),然后分析提取,对分割出的字符图像进行识别给出文本形式的车牌号码。
3.源程序代码及图形
(1)I=imread('F:\tu\yuan.bmp');
figure;
subplot(2,2,1);
imshow(I);
title('原图');
I1=rgb2gray(I);%图像灰度化subplot(2,2,2);
imshow(I1);
title('灰度化图');
m2=medfilt2(I1,[5,5]);
subplot(2,2,3);
imshow(m2);
title('中值滤波');
w2=wiener2(I1,[5,5]);%维纳滤波subplot(2,2,4);
imshow(w2);
title('维纳滤波');
(2)图像二值化
原图灰度化图
中值滤波维纳滤波
fmax1=double(max(max(I1)));
fmin1=double(min(min(I1)));
level=(fmax1-(fmax1-fmin1)/3)/255;
bw2=im2bw(I1,level);
bw22=double(bw2);
figure,imshow(bw22),title('图像二值化 ');
图像二值化
(3)图像算法处理
lubo=edge(bw22,'log');
figure;
subplot(2,2,1);
imshow(bw2);title('Log算子边缘检测');%图像边缘检测
bg1=imclose(lubo,strel('rectangle',[1,33]));
subplot(2,2,2),imshow(bg1);title('图像闭运算[1,33]');
bg3=imopen(bg1,strel('rectangle',[1,33]));
subplot(2,2,3),imshow(bg3);title('图像开运算 [1,33]');
bg2=imopen(bg3,strel('rectangle',[12,1]));
subplot(2,2,4),imshow(bg2);title('图像开[15,1]');
Log算子边缘检测图像闭运算[1,33]
图像开运算 [1,33]图像开[15,1]
(4)图像标记
[L,num] = bwlabel(bg2,8);%标注二进制图像中已连接的部分
%Feastats = imfeature(L,'basic');%计算图像区域的特征尺寸
%Area=[Feastats.Area];%区域面积
%BoundingBox=[Feastats.BoundingBox];%[x y width height]车牌的框架大小%RGB = label2rgb(L, 'spring', 'k', 'shuffle'); %标志图像向RGB图像转换figure,imshow(L);title('图像标记 ');%输出框架的彩色图像
图像标记
(5)形态滤波
I5=bwareaopen(L,1200);%去除聚团灰度值小于2000的部分
figure,imshow(I5),title('形态滤波后图像');
形态滤波后图像
(6) [y,x,z]=size(I5);
I6=double(I5);
Y1=zeros(y,1);
for i=1:y
for j=1:x
if(I6(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1;
end
end
end
[temp MaxY]=max(Y1);
figure();
subplot(3,2,1),plot(0:y-1,Y1),title('行方向像素点灰度值累计和’),xlabel('行值'),ylabel('像素');
PY1=MaxY;
while ((Y1(PY1,1)>=50)&&(PY1>1))
PY1=PY1-1;
end
PY2=MaxY;
while ((Y1(PY2,1)>=50)&&(PY2 PY2=PY2+1; end IY=I(PY1:PY2,:,:); X1=zeros(1,x); 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('像数'); PX1=1; while ((X1(1,PX1)<3)&&(PX1 PX1=PX1+1; end PX2=x; while ((X1(1,PX2)<3)&&(PX2>PX1)) PX2=PX2-1; end PX1=PX1-1;