本次大报告利用MATLAB函数功能,设计和实现了一个车牌识别系统。车牌识别系统的基本原理为:将手机拍摄到的包含车辆牌照的图像输入到计算机中进行预处理,再对牌照进行搜索、检测、定位,并分割出包含牌照字符的矩形区域,然后对牌照字符进行二值化并将其分割为单个字符,然后将其逐个与创建的字符模板进行匹配,匹配成功后输出车牌号码的数字。车牌识别的工作流程如下图:
一、 图像预处理 预处理的具体操作是规整大小、噪声滤波、规整为统一大小便于后续处理的参数设置,提高定位精确度以及识别正确率。规整大小函数为imresize(I,[row,col]) 接着进行图像平滑滤波。RGB图像的平滑滤波,需要将R、G、B三个色道分别提取出来,分别滤波。这里采用3x3的中值滤波算子,对三个色道分别滤波,然后使用cat函数将三色道整合起来。 代码
%% 加载图片
I=imread('Lisence.jpg');
figure(1),imshow(I);title('original image');%显示车牌原图
%% RGB 转 Gray
I1=rgb2gray(I);
figure(2),subplot(121),imshow(I1);title('gray image');
figure(2),subplot(122),imhist(I1);title('the histogram of the picture');
%% 使用 roberts 算子进行边缘检测
I2=edge(I1,'roberts',0.18,'both');% select the threshold=0.18
figure(3),imshow(I2);title('roberts operator edge detection image');
%% 腐蚀操作
se=[1;1;1];
I3=imerode(I2,se);%对图像进行腐蚀操作,即膨胀的反操作
figure(4),imshow(I3);title('corrosion image');
%% 平滑图片
se = strel('rectangle',[25,25]);
I4 = imclose(I3,se);%图形聚类、填充图形
figure(5),imshow(I4);title('smoothing image');
%% pick out the small objects
I5=bwareaopen(I4,2000);%remove the part smaller than 2000
figure(6),imshow(I5);title('remove the small objects');
二、 车牌定位 车牌定位依据的是车牌蓝色底色的特点,即颜色区分法,因此,确定车牌底色的蓝色RGB值范围非常重要。先打开一幅车牌图片,查看下车牌底色的RGB值。车牌底色为蓝色,因此B值较高,R和G值较小,初步考虑车牌底色RGB范围应是:R=5&&(PY1>1))
PY1 = PY1-1;
end
PY2 = MaxY;
while(Blue_y(PY2,1)>=5&&(PY220;
if I==1 % 第一个汉字识别
kmin=37;
kmax=43;
elseif I==2 %第二位A~Z字母识别
kmin=11;
kmax=36;
else l>=3 % 第三位以后是字母或数字识别
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat('字符模板\', liccode(k2), '.jpg');
SamBw2=imread(fname);
SamBw2=double(SamBw2)>1;
for i=1:40
for j=1:20
SubBw2(i,jP)=SegBw2(i,j)-SamBw2(i,j);
end
end
% 以上相当于两幅图相减得到第三幅图
Dmax=0;
for k1=1:40
for l1=1:20
if(SubBw2(k1,l1)>0 | SubBw2(k1,l1) |