当前位置:   article > 正文

【车牌识别】模板匹配法新能源车牌识别【含Matlab源码 3675期】_车牌号识别matlab源代码

车牌号识别matlab源代码

在这里插入图片描述

⛄一、简介

1 在进行图像处理任务之前,首先要明确处理对象和处理流程
处理对象: 新能源车牌和蓝色车牌
处理流程:
在这里插入图片描述
2 由于要对蓝色和新能源车牌进行识别,而且新能源车牌是渐变色,所以直接通过设定阈值的方法去识别两种车牌并没有单独识别蓝色车牌的可靠性高。这里,我根据车牌字符的特征进行车牌位置定位:
2.1 根据字符特征初步找出车牌位置
在这里插入图片描述
2.2 根据车牌长宽比进行初步筛选
我们可以用最小外接矩形算法框出上一步已选出的区域,然后根据车牌长宽比设定阈值,将满足阈值的矩形筛选出来,当然但还是会存在一部分干扰区域。

2.3 对矩形内像素进行颜色统计
通过对初步筛选后剩余区域分别进行像素的颜色统计,我们即可准确找出车牌位置,与此同时车牌的类型(新能源或蓝牌)也可以在这里判断出来

3 倾斜校正
这一步是为后面垂直投影法分割字符和模板匹配做准备

简单来讲,使用霍夫线算法检测车牌上下边框所在直线,计算这条直线倾斜角度,之后对车牌进行旋转即可。当然复杂点的方法可以具体看我的源程序,具体效果如下图:
在这里插入图片描述

4 二值化、形态学处理、字符识别
4.1 二值化和形态学处理这里就不在赘述,很多博客已经讲的非常清晰
4.2 字符分割
在这里需要对字符进行准确的分割,在分割之前还是可能会有干扰,需要再次分割出车牌字符的准确位置。这里我的方法是:先向左投影,设定阈值,切割出上下边界,同理在切割出左右边界。但是这只适用于车牌边框明显的情况下,所以我不建议你使用这个方法,慎用!!!
在这里插入图片描述
到这里就可以使用垂直投影法进行字符分割,这里需要注意的是新能源车牌有八位,蓝牌有七位
分割结果如下图所示:
在这里插入图片描述
4.3 字符识别
这里使用模板匹配,因为新能源车牌字符和蓝牌字符不一致,所以要制作两套字符模板。另外需要注意的是,根据《中华人民共和国机动车号牌》序号编码规则,26个英文字符中“I“、”O“不能使用,所以不存在"1"和"I"、"0"和"O"字符混淆的问题

⛄二、部分源代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% resize的目标尺寸650*X
% 调参
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;

se1 = strel(‘rectangle’,[15 15]); %创建一个平坦的矩形结构
se2 = strel(‘rectangle’,[12 20]); %创建一个平坦的矩形结构
se3 = strel(‘rectangle’,[12 15]);
imgraw=imread(‘0.png’); %读取图

% se1 = strel(‘rectangle’,[15 25]); %创建一个平坦的矩形结构
% se2 = strel(‘rectangle’,[10 25]); %创建一个平坦的矩形结构
% se3 = strel(‘rectangle’,[14 19]);
% imgraw=imread(‘E:\matlab workspace\licenseplate\车牌2.jpg’); %读取图像

[m,~]=size(imgraw);
times = 650/m;
img=imresize(imgraw,times,‘nearest’);
g= fspecial(‘gaussian’,[5,5],1); %高斯滤波器
g_img = imfilter(img, g, ‘replicate’); %图像滤波
gray_img=rgb2gray(g_img); %转为灰色图像
open = imopen(gray_img,se1); %图像开操作
sub_img = imsubtract(gray_img,open); %图像相减
BW_img = imbinarize(sub_img); %使用Otsu方法确定全局阈值进行二值化
edge_img = edge(BW_img,‘canny’);
edge_img1 = imclose(edge_img,se2); %图像闭操作
edge_img2 = imopen(edge_img1,se3); %图像开操作

%%%%%%%%%%%%%%%%%%%%%%%%%%%使用车牌长宽比进行判断%%%%%%%%%%%%%%%%%%%%%%%%%%%

[B,L] = bwboundaries(edge_img2,‘noholes’);
num_rect = 0; %符合要求的矩形数量
matrix_rect = {}; %符合要求的矩形的坐标元胞矩阵
for k = 1:length(B)
boundary = B{k};
c = boundary(:,2);
r = boundary(:,1);
[rectx,recty,area,perimeter] = minboundrect(c,r,‘a’); %rectx,recty为逆时针排列
width = round(sqrt((recty(1)-recty(2))2+(rectx(1)-rectx(2))2));
leth = round(sqrt((recty(2)-recty(3))2+(rectx(2)-rectx(3))2));
if width > leth
temp = width;
width = leth;
leth = temp;
end
ratio = leth / width;
if ratio >2.5 && ratio <4.5
num_rect = num_rect + 1;
matrix_rect{num_rect} = [rectx,recty];
end
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]呙润华,苏婷婷,马晓伟.BP神经网络联合模板匹配的车牌识别系统[J].清华大学学报(自然科学版),2013,53(9):1221-1226.
[2]鲁扬.基于BP神经网络的车牌识别算法研究[D].大庆:东北石油大学,2018.
[3]李强,张娟.一种改进的基于模板匹配的污损车牌识别方法[J].智能计算机与应用. 2019,9(03).
[4] 梁凯.基于MATLAB的汽车车牌识别系统的设计与实现[D] .哈尔滨:黑龙江大学, 2018.
[5]刘雄飞,朱盛春.车牌字符多特征提取与BP神经网络的识别算法[J].计算机仿真,2014,31(10):161-164,290.
[6]乔有田.基于数学形态学和灰度跳变特征的车牌定位方法[J].工业控制计算,2015(2):77-78

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/732146
推荐阅读
相关标签
  

闽ICP备14008679号