应用数字图像处理相关知识和技术实现某一应用,如人脸识别、动物识别、水果识别等综合性任务,题目自选。
本文在matlab R2018b开发环境下,实现基于模板匹配的汽车牌照识别。
车牌识别在现代交通管理系统中起着至关重要的作用,具有广阔的应用前景,例如红灯抓拍、超速抓拍、小区记录、公路管理等。如何高效快速地准确识别出汽车牌照成为发展趋势,现如今,随着卷积神经网络的不断改进和壮大,其在车牌识别领域发挥着主要作用。但传统识别作为基础而言,是必须理解并能应用的技术,也是为发展神经网络的奠基石,因此,本文采用传统识别模式匹配技术,进行车牌识别。
确定车牌的上边界up和下边界down,,得到分割后的车牌图像image_seg1。
%step5-1 水平扫描确定上下车牌边界
[image_scan1,result1]=projection(image_fill,0);%水平扫描
[width,height]=size(image_fill);%获得图像尺寸
temp1=1; %暂存的上边界
temp2=1; %暂存的下边界
T_max=0; %暂存的车牌宽度
result1_mean=mean(result1);%求水平投影的平均值
result1_min=min(result1);%求水平投影的最小值
result1_level=(result1_mean+result1_min)/2;%求水平投影的平均值
for row=1:width-1
if result1(row)>result1_level
temp2=temp2+1;
else
if(abs(temp2-temp1)>T_max)
up=temp1;
down=temp2;
T_max=abs(temp2-temp1);
end
temp1=row;
temp2=temp1;
end
end
确定车牌的左边界left和右边界right,得到分割后的车牌图像image_seg2。
%step5-2 垂直扫描确定左右车牌边界
[image_scan2,result2]=projection(image_seg1,1);%垂直扫描
[width,height]=size(image_seg1);%获得图像尺寸
result2_mean=mean(result2);%求垂直投影的平均值
result2_min=min(result2);%求垂直投影的最小值
result2_level=(result2_mean+result2_min)/2;%求垂直投影的平均值
temp1=1;%暂存的左边界
temp2=1;%暂存的第一个字符的右边界
left=temp1;%左边界
T_char=45/140*width;%实际字符宽度
for col=1:height
if result2(col)>result2_level
temp2=temp2+1;
else
if (abs(temp2-temp1)>=T_char&&abs(temp2-temp1)/width<=2*T_char)
left=temp1;
break;
end
temp1=col;
temp2=temp1;
end
end
<1> 方法一:根据垂直扫描确定的车牌左边界,由车牌标准计算右边界。
right=left+ceil((down-up)/2*7+(6*10+12));%右边界
<2> 方法二:垂直扫描分别确定车牌的左右边界。
% temp1=height;%暂存的右边界
% temp2=height;%暂存的最后一个字符的左边界
% right=temp1;
% for col=height:-1:1
% if result2(col)>result2_level
% temp2=temp2-1;
% else
% if (abs(temp2-temp1)/width>=T_char&&abs(temp2-temp1)/width<=2*T_char)
% right=temp1;
% break;
% end
% temp1=col;
% temp2=temp1;
% end
% end
垂直扫描确定字符的左右边界,得到左边界数组temp1和右边界数组temp2。
[image_scan3,result3]=projection(image_seg2,1);%垂直扫描
[width,height]=size(image_seg2);%获得图像尺寸
temp1=ones(1,7); %存放每个字符的左边界
temp2=ones(1,7); %存放每个字符的右边界
for pos=1:7
for col=temp1(pos):height
if result3(col)>T_char/2
temp2(pos)=temp2(pos)+1;
else
if temp1(pos)~=temp2(pos)
temp1(pos+1)=temp2(pos);
temp2(pos+1)=temp2(pos);
break;
end
temp1(pos)=temp1(pos)+1;
temp2(pos)=temp1(pos);
end
end
end
temp2=temp2-1;%多读一列位置,回退
建立模板库字符索引,对待识别字符进行模板匹配。
char_code=char(['0':'9' 'A':'H' 'J':'N' 'P':'Z' '浙豫苏陕鲁辽京']);%部分字符
char_length=36-2+7;
Y=zeros(7,1);
result=zeros(7,1);
for point=1:7
%判断待识别字符所处位置
if point==1
start=36-2+1;
ending=36-2+7;
elseif point==2
start=10+1;
ending=10+26-2;
else
start=1;
ending=36-2;
end
%获取待识别字符图像
imageU=image_normal_char(:,:,point);
[width,height]=size(imageU);
U=sum(sum(imageU==1));
%遍历模板库
for k=start:ending
fname=strcat('D:\1、数字图像处理\2、习题\大作业\字符模板\',char_code(k),'.jpg');
imageT=imread(fname);
imageT=im2bw(imageT);
imageT=imresize(imageT,[90 45]);
imageV=imageU&imageT;
imageX=xor(imageV,imageU);
imageW=xor(imageV,imageT);
T_char=sum(sum(imageT==1));
V=sum(sum(imageV==1));
X=sum(sum(imageX==1));
W=sum(sum(imageW==1));
TUV=(T_char+U+V)/3;
temp=V/((W/T_char)*(X/U)*sqrt(((T_char-TUV)^2+(U-TUV)^2+(V-TUV)^2)/2));
if temp>Y(point)
Y(point)=temp;
result(point)=k;
end
end
end
灰度处理后的图像
过滤背景后的图像
二值化——迭代法
去噪——均值滤波