900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【老生谈算法】基于matlab的车牌识别算法详解及程序源码——车牌识别算法

【老生谈算法】基于matlab的车牌识别算法详解及程序源码——车牌识别算法

时间:2024-04-02 00:01:39

相关推荐

【老生谈算法】基于matlab的车牌识别算法详解及程序源码——车牌识别算法

基于matlab的车牌识别系统设计与算法原理

大家好,今天给大家介绍基于matlab的车牌识别系统设计与原理。

车牌识别系统(License Plate Recognition ,简称LPR)是智能交通系统(ITS)的核心组成部分,在现代交通管理系统中发挥着举足轻重的作用。本项目运用神经网络算法从车牌图像预处理、车牌定位、车牌字符分割和车牌字符识别这几个方面对车牌识别技术进行研究,运用MATLAB仿真,实现对车牌识别系统的设计。

文章目录:

基于matlab的车牌识别系统设计与算法原理1、项目简介2、难度指数3、运行环境:4、项目详解:5、源码下载:

1、项目简介

汽车牌照自动识别系统是应用图像处理技术、模式识别技术和神经网络技术,从复杂背景中准确提取、识别出汽车牌照。自动车牌识别技术是解决交通管理问题的重要手段,是计算机图像处理技术和模式识别技术在智能交通领域的典型应用。由于神经网络具有良好的自学习和自适应能力,同时有很强的分类能力、容错能力和鲁棒性,可以实现输入到输出的非线性映射,可在有干扰的情况下对字符实现分类识别,能够解决车牌字符速度和识别正确率等问题,故被广泛地用于汽车牌照识别本系统设计使用BP神经网络运用MATLAB仿真,对车牌字符进行识别。

2、难度指数

本项目难度:中等难度

适用场景:相关题目的毕业设计及相关领域的应用研究


3、运行环境:

环境配置:

本项目所使用的MATLAB版本为MATLAB 7.8.0(Ra)

注:可适配绝大部分matlab版本

项目技术:

轮廓提取算法+ 图像分割算法 +神经网络算法+图像预处理+车牌定位+车牌字符分割+车牌识别等等


4、项目详解:

提示:以下为项目的详细介绍,项目源码及项目设计文档下载地址见文末~

4.1系统总体设计

车牌识别系统的构成如图所示

其中各个模块的研究内容包括:

1 .车牌图像采集:通过安装在过道路口或者车辆出入通道的摄像机实时捕捉车辆视屏图像,并传输到计算机上以便于实时的处理。

2.车牌图像预处理:主要完成包括图像灰度变化,图像边缘检测、图像二值化等来突出车牌的特征,以便于更好的车牌定位。

3.车牌定位:从摄入的汽车图像中找到车牌的位置,并把含有车牌图像的区域提取出来,以供后端的字符分割处理

4.车牌字符分割:对搜索定位后的车牌区域进行字符分割, 将车牌分为N个单一的字符

5.车牌识别:对于提取出的单个字符,先进行归一化操作,再运用训练好的神经网络进行字符识别。

6.结果显示:显示处理后的车牌并与原始车牌相比较

4.2各个模块设计及原理

4.2.1车牌图像采集

当系统发现有车辆通过感应线圈或监视图像发生变化时,触发图像采集系统,通过CCD摄像机摄取采集出车牌图像,然后车牌自动识别模块对车牌图像进行预处理、车牌定位、字符分割、字符识别等一系列处理识别出车牌号码,识别结果和原始车牌图像通过网络传输至监控中心,留待以后车牌查询和交通流量统计。本次设计主要是实现对已经采集到的车牌图像进行识别

4.2.2车牌图像预处理

汽车牌照中的字符主要由有限汉字、字母和数字组成,采用固定的印刷体格式。由于图像上字符光照不均、车牌本身污损、汽车行驶速度较快、牌照颜色类型较多、拍摄角度及地况等主客观原因会使车牌字符发生畸变,从而造成识别上的困难,因此,为提高牌照的字符识别率, 必须进行预处理, 以便得到较为清晰的待识别的单个字符.这些预处理包括灰度变换、边缘检测、腐蚀、填充、形态滤波处理等。预处理的效果对随后的定位处理有很大的影响,所以选择可靠的预处理算法也是非常重要的。

图像预处理程序设计流程图如下:

车牌图像预处理流程:

预处理的结果显示如下图:

4.2.3车牌定位

车牌定位方法的出发点是利用车牌区域的特征来判断牌照,将车牌区域从整幅车辆图像中分割出来。在车牌识别中,定位的成功与否以及定位的准确程度将会直接决定后期能否进行车牌识别以及识别的准确度。

车牌定位方法涉及到的具体方法有: 基于边缘检测的方法、区域生长法,构造灰度模型法,二值图像的数学形态学运算法,灰度图像的数学形态学运算法,自适应边界搜索法,DFT变换法,模糊聚类法等。这里采用基于边缘检测的方法,首先去除图像中的背景,然后得到汽车牌照的特征区域,再通过一定的方式定位这个区域,最后把汽车牌照从图像中分割出来。

所谓“边缘”就是指其周围像素灰度有阶跃变化的那些像素的集合。“边缘”的两侧分属于两个区域,每个区域的灰度均匀一致,而这两个区域的灰度在特征上存在一定的差异。边缘检测的任务是精确定位边缘和抑制噪声。

检测的方法有多种, 例如Roberts 边缘算子、Prewitt 算子、Sobel 算子以及拉普拉斯边缘检测。这些方法正是利用物体边缘处灰度变化剧烈这一特点来检测图像的边缘。各算子对不同边缘类型的敏感程度不同, 产生的效果也不同, 经过大量实验分析可知, Roberts边缘算子是一种利用局部方差算子寻找边缘的算子, 定位比较精确; Prewitt算子和Sobel算子对噪声有一定的抑制能力, 但不能完全排除伪边缘; 拉普拉斯算子是二阶微分算子, 对图像中的阶跃型边缘点定位准确且具有旋转不变性, 但容易丢失一部分边缘的方向信息, 同时抗噪能力较差。针对不同的环境和要求, 选择合适的算子来对图像进行边缘检测才能达到好的效果。

具体定位流程如下。

车牌处理结果如下图所示:

4.2.4车牌字符分割

字符的分割是指将车牌区域分割成若干个单个的字符区域,把单个有意义的字符从字符串中提取出来,作为独立的字符图像。字符分割的成败与否直接影响到单字的识别效果,如果分割出的字符出现了断裂、粘连,则系统难以识别。本次设计中采用的是垂直投影字符分割方法,即先将图像二值化,然后进行水平倾斜以及竖直倾斜校正,去除一些噪声,然后将车牌像素灰度值按垂直方向累加,即所谓的垂直投影。由于字符块的垂直投影必然在字符间距或字符内的间隙处取得局部最小值,所以分割位置应该在局部最小值处。

此方法比较简单易行,程序设计简单,便于设计和操作,因此比较常用。由于在车牌定位中得到的是彩色的车牌区域图像,故在字符分割前需对图像进行预处理。

列方向像素点灰度值累积和:

车牌字符分割结果:

车牌字符归一化后显示结果:

4.2.5车牌字符识别

4.2.5.1BP神经网络简介

BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

BP神经网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。

(1)节点输出模型

隐节点输出模型:Oj=f(∑Wij×Xi-qj)

输出节点输出模型:Yk=f(∑Tjk×Oj-qk)

f-非线形作用函数;q -神经单元阈值。

(2)作用函数模型

作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid函数: f(x)=1/(1+e)

(3)误差计算模型

误差计算模型是反映神经网络期望输出与计算输出之间误差大小的函数:Ep=1/2×∑(tpi-Opi)

tpi- i节点的期望输出值;Opi-i节点计算输出值。

(4)自学习模型

神经网络的学习过程,即连接下层节点和上层节点之间的权重拒阵Wij的设定和误差修正过程。BP网络有师学习方式-需要设定期望值和无师学习方式-只需输入模式之分。自学习模型为

△Wij(n+1)= h ×Фi×Oj+a×△Wij(n)

h -学习因子;Фi-输出节点i的计算误差;Oj-输出节点j的计算输出;a-动量因子。

下图为BP神经网络结构:

4.2.5.2神经网络训练

BP神经网络学习是典型的有导师学习,其训练主要是利用误差反向传播算法,不断修正网络权值矩阵。因为一般的车牌均由汉字、英文字母和数字组成,根据车牌字符的上述特点,在用BP神经网络进行训练和识别时,所选用的样本需包括字符的这些特点,加上本次实验的特殊性,由于待识别车牌图像有限,所得到的车牌字符不是很全,这里为简化起见,只对汉字渝,数字0~9和字母A、L、M、N、R这几个字符进行训练。训练样本如下图所示:

4.2.5.3神经网络识别结果

用训练好的神经网络对样本进行识别,下图为车牌识别结果:

4.2.5.3结论

汽车牌照的自动识别技术作为智能交通的一部分已经得到了越来越广泛的应用,良好的自动识别技术对现代化交通来说具有重要意义。本设计运用神经网络算法对汽车牌照进行识别,实现了对车牌预处理,车牌定位车牌分割,车牌识别,处在的不足在于,由于不同的汽车牌照其倾斜度和所在位置不一,对于不同的车牌需要改变分割参数才能实现。

4.3部分程序源码

%% 主程序%%clc;close all;clear all;I=imread('C:\wangyuanyuan\DSC01317.jpg');dw=cpdw(I);%车牌定位[PIN0,PIN1,PIN2,PIN3,PIN4,PIN5,PIN6]=zffg(I);%字符分割及处理PIN0=ycl(PIN0);PIN1=ycl(PIN1);PIN2=ycl(PIN2);PIN3=ycl(PIN3);PIN4=ycl(PIN4);PIN5=ycl(PIN5);PIN6=ycl(PIN6);P0=[PIN0',PIN1',PIN2',PIN3',PIN4',PIN5',PIN6'];%%%%归一化训练样本%%%%I0=ycl(imread('C:\wangyuanyuan\yangben\0.jpg'));I1=ycl(imread('C:\wangyuanyuan\yangben\1.jpg'));I2=ycl(imread('C:\wangyuanyuan\yangben\2.jpg'));I3=ycl(imread('C:\wangyuanyuan\yangben\3.jpg'));I4=ycl(imread('C:\wangyuanyuan\yangben\4.jpg'));I5=ycl(imread('C:\wangyuanyuan\yangben\5.jpg'));I6=ycl(imread('C:\wangyuanyuan\yangben\6.jpg'));I7=ycl(imread('C:\wangyuanyuan\yangben\7.jpg'));I8=ycl(imread('C:\wangyuanyuan\yangben\8.jpg'));I9=ycl(imread('C:\wangyuanyuan\yangben\9.jpg'));I10=ycl(imread('C:\wangyuanyuan\yangben\A.jpg'));I11=ycl(imread('C:\wangyuanyuan\yangben\L.jpg'));I12=ycl(imread('C:\wangyuanyuan\yangben\M.jpg'));I13=ycl(imread('C:\wangyuanyuan\yangben\N.jpg'));I14=ycl(imread('C:\wangyuanyuan\yangben\R.jpg'));%输入样本%P=[I0',I1',I2',I3',I4',I5',I6',I7',I8',I9',I10',I11',I12',I13',I14'];%输出样本%T=eye(15,15);% 建立神经网络模型%%%bp神经网络参数设置%%;net=newff(minmax(P),[100,15],{'logsig','logsig','logsig'},'trainrp');net.inputWeights{1,1}.initFcn ='randnr';net.layerWeights{2,1}.initFcn ='randnr';net.trainparam.epochs=5000;net.trainparam.show=50;net.trainparam.lr=0.003;net.trainparam.goal=0.0000000001;net=init(net);%%%训练样本%%%[net,tr]=train(net,P,T);%%%%测试字符,得到识别数值%%%%for i=2:7T0=sim(net,P0(:,i));T1 = compet (T0) ;d = find(T1 == 1) - 1;if (d==10)str='A';elseif (d==11)str='L';elseif (d==12)str='M';elseif (d==13)str='N';elseif (d==14)str='R';elsestr=num2str(d);endswitch icase 2str1=str;case 3str2=str;case 4str3=str;case 5str4=str;case 6str5=str;otherwisestr6=str;endend%%%显示定位后分割出的车牌彩图,识别结果以标题形式显示在图上%%%s=strcat('渝',str1,str2,str3,str4,str5,str6);figure();imshow(dw),title(s);车牌定位程序function [ dw ]= cpdw( I )subplot(3,2,1),imshow(I),title('原始图像');I1=rgb2gray(I);%转化为灰度图像subplot(3,2,2),imshow(I1),title('灰度图像');I2=edge(I1,'roberts',0.09,'both');%采用robert算子进行边缘检测subplot(3,2,3),imshow(I2),title('边缘检测后图像');se=[1;1;1];I3=imerode(I2,se); %腐蚀图像subplot(3,2,4),imshow(I3),title('腐蚀后边缘图像');se=strel('rectangle',[25,25]);I4=imclose(I3,se);%图像聚类、填充图像subplot(3,2,5),imshow(I4),title('填充后图像');I5=bwareaopen(I4,2000);%去除聚团灰度值小于2000的部分subplot(3,2,6),imshow(I5),title('形态滤波后图像');[y,x,z]=size(I5);I6=double(I5);Y1=zeros(y,1);for i=1:yfor j=1:xif(I6(i,j,1)==1) Y1(i,1)= Y1(i,1)+1; end end end[temp MaxY]=max(Y1);%%%%%%%求的车牌的行起始位置和终止位置%%%%%%%%%PY1=MaxY;while ((Y1(PY1,1)>=50)&&(PY1>1))PY1=PY1-1;end PY2=MaxY;while ((Y1(PY2,1)>=100)&&(PY2<y))PY2=PY2+1;endIY=I(PY1:PY2,:,:);X1=zeros(1,x);for j=1:xfor i=PY1:PY2if(I6(i,j,1)==1)X1(1,j)= X1(1,j)+1;end end end%%%%%求的车牌的列起始位置和终止位置%%%%%%PX1=1;while ((X1(1,PX1)<3)&&(PX1<x))PX1=PX1+1;end PX2=x;while ((X1(1,PX2)<3)&&(PX2>PX1))PX2=PX2-1;endPX1=PX1-1;PX2=PX2+1;


5、源码下载:

本项目及一些精选的matlab车牌识别项目源码如下,有需要的朋友可以点击进行下载

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。