1 简介
车牌识别系统(License Plate Recognition, LPR)在智能交通系统中占有非常重要的地位。同时,在智能交通领域的应用中,有很多基于图像处理、模式识别及机器视觉技术的研究课题,而其中重点之一即是车牌的自动识别,其主要包括车牌定位、倾斜矫正、字符分割及字符识别等四个部分。目前,车牌定位算法有很多种,且大部分都基于一定的理论知识体系,主要为:图像彩色信息、纹理分析、边缘检测、数学形态学、遗传学及神经网络,等等。车牌倾斜矫正主要有以下几种方法:基于几何与纹理分析的方法、基于Hough直线检测的方法及基于边缘检测的方法等。车牌字符分割主要有以下几种方法:基于纹理和投影特征的方法、基于SVM(Support Vector Machine,支持向量机)的聚类方法、基于区域生长的分割算法及基于先验知识的马尔可夫模型分割算法等。车牌字符识别主要有以下几种方法:模式匹配法、特征分类法及基于神经网络的分类方法等。充分考虑到汽车牌照在实际拍摄中往往存在着噪声污染、畸变扭曲、字符断裂、光照不均、车牌尺寸颜色多样化等不良因素,并在参考前人研究并综合考虑各种算法的优缺点的基础上,本论文提出了一套改进型车牌识别算法。在车牌定位部分,利用车牌纹理特征、投影特征及形状特征(长宽比)等有效信息,并应用Sobel y方向边缘检测、一阶水平差分、曲线平滑、波峰波谷检测法及波峰区域合并法,快速准确地实现车牌定位。在倾斜矫正部分,利用车牌字符的纹理分布特征,避免了车牌边缘被污染或不存在的影响及Hough直线检测复杂运算。在字符分割部分,在充分利用车牌字符的纹理特征、面积分布特征及形状特征(长宽比)等先验知识的前提下,结合投影特征和连通域特征来实现字符分割。在字符识别部分,采用了基于BP(Back Propagation,反向传播)神经网络的字符识别方法。同时,整个算法处理过程还应用到灰度变换、Otsu(Otsu,最大类间方差法)自适应阈值二值化、图像滤波、边缘检测等。本文首先介绍了车牌识别技术的研究背景及研究现状,并阐述了本文的主要研究内容、创新点及论文组织结构。其次介绍了一些本文应用到的相关知识及系统理论,包括数字图像处理的基础知识及其在相关方面的应用,数学形态学的基础知识及其在图像处理中的应用,BP神经网络理论基础及其在模式识别方面的应用。然后从车牌定位、车牌字符分割及车牌字符识别三个部分对本论文车牌识别算法进行了详细分析与介绍。最后从系统级上介绍了车牌识别技术的实现,对本论文算法进行仿真,并对结果进行分析、总结。实验证明,本论文中所述的改进型的车牌识别算法准确、有效、可靠。
2 部分代码
% clear% clc
%% 读取样本数据
% 神经网络训练过程,库中图片的读取,训练,构成神经网络知识库
DATADIR='.\sample\'; % 待处理图像目录
dirinfo=dir(DATADIR); % 获取图像目录所有文件信息
Name={dirinfo.name}; % 获取文件名
Name(1:2)=[]; % 去除文件夹固有信息
[nouse num_of_char]=size(Name); % 获取类别数量
count = 1;
images = [];
labels = [];
for cnt=1 :num_of_char % for 循环读取所有文件夹
pathname=horzcat(DATADIR, Name{cnt},'\'); % 把路径和名字融合一起
sub_dirinfo=dir(pathname); % 获取图像目录所有文件信息
sub_Name={sub_dirinfo.name}; % 获取文件名
sub_Name(1:2)=[];
[nouse num_of_image]=size(sub_Name);
for i = 1: num_of_image
image = imread(horzcat(pathname,sub_Name{i}));
if size(image,3) >1
image = rgb2gray(image);
end
bw = im2bw(image,graythresh(image));
bw1 = double(reshape(bw,288,1));
images = [images,bw1];
labels(count) = cnt;
count = count +1;
end
end
%% 设置神经网络参数并训练
input_layer_size = 288; % 12x24 输入图像大小
hidden_layer_size = 30; % 隐含层个数
num_labels = num_of_char; % 标签个数
X = images';
y = labels';
initial_Theta1 = randInitializeWeights(input_layer_size, hidden_layer_size); %初始化神经网络参数
initial_Theta2 = randInitializeWeights(hidden_layer_size, num_labels); %初始化神经网络参数
initial_nn_params = [initial_Theta1(:) ; initial_Theta2(:)];
options = optimset('MaxIter', 500);
lambda = 1;
costFunction = @(p) nnCostFunction(p, ... % 用训练样本计算最优参数
input_layer_size, ...
hidden_layer_size, ...
num_labels, X, y, lambda);
[nn_params, cost] = fmincg(costFunction, initial_nn_params, options);
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), ...
hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), ...
num_labels, (hidden_layer_size + 1));
%% 测试 可修改测试函数
% images_test0 = imread(['3.jpg']);
% images_test1 = imresize(images_test0,[24 12]);
% bw = im2bw(images_test1,graythresh(images_test1));
% images_test = double(reshape(bw,288,1));
% pred = predict(Theta1, Theta2, images_test');
% Name{pred}
3 仿真结果
4 参考文献
[1]刘岩. 基于MATLAB与神经网络的汽车牌照识别系统[J]. 时代农机, 2012, 39(007):52-53.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。