基于HOG特征和GRNN神经网络的车牌字符识别算法matlab仿真

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

      近年来,随着计算机科学技术和图像识别技术的快速发展,人们对于智能交通安全监控系统有了越来越多的研究。通常情况下,在智能交通监控系统中,车牌识别技术是一个重要的核心环节,其涉及到车牌图像的预处理技术,计算机视觉处理技术以及图像识别模式识别技术。一个完整的车牌识别技术包括如下几个方面:

第一、车辆图像的预处理技术,包括图像的去噪,锐化,边缘提取等多个算法。通常情况下,采集到的车牌图像,由于受到各种干扰因素的影响,如光照影响,遮挡,不同距离下的大小差异,拍摄就角度倾斜等因素。因此需要通过图像预处理技术对采集到的图像进行预处理,从而获得较为清晰的车辆图像。该技术的难点在于,实际采集的车牌,往往受到光线或拍摄角度等各种外在因素的影响,增加了车牌预处理的难度。在极端情况下,如果夜晚,且灯光较暗情况,车牌将无法被拍摄到,如果车牌中存在大面积的覆盖或者遮挡,那么也将导致处理失败。因此,在本课题的研究过程中,我们只考虑正常情况下拍摄得到的车牌图像。

第二、车牌定位技术,由于系统需要对车牌进行识别,因此首先要进行车牌的定位,通过该算法,可以有效提取车牌的区域,为车牌字符识别奠定基础。这个技术一般有基于颜色模型的车牌提取算法,基于车牌纹理的车牌提取算法,基于车牌边缘特征的车牌提取算法以及基于分形盒子维的车牌提取算法等等。在实际采集得到的车牌图像,由于环境中存在各种和车牌类似的区域,这将导致车牌定位出现错误。因此,在实际中,往往需要采取多种技术相互结合来实现车牌的定位。

第三、车牌字符切割技术,在进行车牌识别之前,首先需要对车牌中各个字符和数字进行分割,获得单独字符所在的图像区域,该技术涉及到图像的二值化处理,车牌像素的垂直映射,图像切割等技术。如果提取的车牌字符之间相互粘连程度较高,那么通过像素来进行切割会存在错误切割的问题,此外,车牌中不仅存在字母,还存在数字汉字等字符,因此在切割过程中需要考虑多种情况进行处理。

第四、车牌字符识别技术,主要是对切割之后的单独字符个体进行识别,通常情况下,可以作为识别功能的算法包括基于神经网络方面的识别算法,如BP神经网络(back propagation,BP),RBF神经网络(Radial Basis Function,RBF),GRNN神经网络(general regression neural network,GRNN);有机器学习方面的算法,如SVM支持向量机(Support Vector Machine, SVM);此外还有模版匹配法以及小波变换分析等等。在识别过程中,我们需要采集标志的字符库作为训练图像库,然后选择最优的机器学习算法对训练库进行学习,然后将学习得到的结果用于车牌字符的识别。


     基于HOG变换的图像特征提取算法,目前被广泛应用在图像识别领域,如车牌识别,人脸识别,车辆识别等。下面对HOG变换的基本原理进行介绍。HOG特征的提取其详细步骤如下:

     步骤一:细胞划分。如图所示,将每一张目标图像划分为多个小的图像区域,每个小的图像区域作为一个细胞单元(如图4.2左图所示),由四个细胞单元构成一个块单元:

 

       通过上述HOG向量的计算步骤可知,HOG特征向量的提取主要是基于局部图像得到的,因此其具体更强的抗干扰能力。 

       GRNN广义回归神经网络[28]是一种具有极强学习能力和适应能力的神经网络,其通过少量样本就可以实现对样本的训练和学习。此外,GRNN网络是一种基于非参数核回归实现方式的网络函数,其通过将样本数据作为后验概率进行验证,然后进行非参数估计。GRNN神经网络的基本原理为,假设GRNN网络中的任意两个变量为xy,其联合概率密度函数为f(x ,y),且x的观测样本为X,即条件均值为:

       公式即为人工神经网络的最终输出表达式。根据其公式可知,决定GRNN网络的输出结果误差主要参数变量为平滑因子。因此,GRNN神经网络具有极其简单的性能控制方式,通常情况下,对于不同的样本数据,采用不同的平滑因子来获得最优的训练效果。 

二、核心程序

clc;
clear;
close all;
addpath 'func\'
%STEP1
%**************************************************************************

I =imread('Images\a (5).JPG');
I =imresize(I,0.5);
I1=rgb2gray(I);
 

%车牌定位
Ip = func_position(I,I1,1.4,150);
 

%膨胀
se  = strel('ball',16,16);
Ip2 = uint8(imdilate(Ip,se));
Ip2 = 255*double(im2bw(Ip2));
 

%去掉小面积的噪声干扰
%Determine the connected components.
L   = bwlabeln(Ip2);
%Compute the area of each component.
S   = regionprops(L,'Area');
%Remove small objects.
bw2 = ismember(L, find([S.Area] >= 10000));
 


%提取车牌
PP   = im2bw(bw2);
Ipos = func_Pai_Position(I,PP);

 

save Result_STEP1.mat Ipos


 

%STEP2
%**************************************************************************


%提取的车牌
load Result_STEP1.mat 
 
%如果有角度倾斜,则旋转
Iang = func_angle(Ipos);
 
%车牌分割
I2 = uint8(255*im2bw(Iang,1.2*graythresh(Iang)));
 


tmps = func_fenge(I2);


save Result_STEP2.mat tmps Iang


%STEP3
%**************************************************************************



%提取的车牌
load Result_STEP2.mat 
word1=imresize(tmps{1},[40 20]);
word2=imresize(tmps{2},[40 20]);
word3=imresize(tmps{3},[40 20]);
word4=imresize(tmps{4},[40 20]);
word5=imresize(tmps{5},[40 20]);
word6=imresize(tmps{6},[40 20]);
word7=imresize(tmps{7},[40 20]);

figure;
subplot(241);imshow(word1);
subplot(242);imshow(word2);
subplot(243);imshow(word3);
subplot(244);imshow(word4);
subplot(245);imshow(word5);
subplot(246);imshow(word6);
subplot(247);imshow(word7);
A10-53

三、仿真结论

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/130049604