一、BP车牌识别简介

车牌识别系统设计与实现
车牌识别系统主要分为三部分:车牌图像预处理、特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示。

图1 车牌识别系统组成示意图

1 车牌图像预处理
车牌图像预处理是对车牌进行智能识别的基础,处理结果直接影响后续车牌识别的精度。车牌图像预处理过程主要包括车牌定位和字符分割,作用是将车牌从复杂的背景中分割出来,并按照国内车牌的设计规则,将其分割为7个字符块,以便进行后续的特征提取及字符识别。
1.1车牌定位
车牌定位主要采用图像处理中的一些去噪算法及数学形态学方法,流程图如图2所示。

图2 车牌定位流程图
主要步骤包括:
1)将图像灰度化以增强图像效果,如图3所示;
2)采用均值滤波平滑图像,去除图像中的噪声;
3) 利用Sobel算子对图像进行边缘提取 , 将图片中的车牌边缘保留, 如图4所示;

图3 图像灰度化前后图片

4) 利用HSV模型和RGB模型中的蓝色区域取交集, 得到疑似蓝色区域位置, 如图5所示;
5) 利用[15] 的矩形结构元素对图像先进行膨胀, 再进行腐蚀, 并和Sobel算子提取到的边缘信息取交集, 去掉无
用的边缘信息,选出竖向纹理复杂的疑似车牌区域,如图6所示;
6)利用结构元素为[1040]的矩形对疑似车牌区域进行闭运算,得到一些内部填充较为完整的区域,如图7所示;

图5 蓝色区域取交集

图6 疑似车牌区域

图7 闭运算后的图像
7)删除连通区域小于1300的小区域,如图8所示;
8)通过计算矩形区域的长宽比,去除长宽比低于2.5或大于3.8的区域[6],得到真正的车牌区域,并将车牌区域剪切出来,如图9所示。

图8 从图像中移除小对象

图9 剪切后车牌区域
1.2 字符分割
根据《中华人民共和国机动车号牌》行业标准,国内普通汽车车牌宽度为44cm,高度为14cm,字符宽度为4.5cm,高度为9cm[71。对车牌定位后得到的剪切后的车牌区域首先进行灰度化,再进行二值化,如图10所示。对图10中二值化后的车牌图像进行垂直方向像素统计,根据车牌字符的宽度和高度、字符间距离等特征,将车牌分为七个区域,最后归一化为32×40像素的统一格式,如图11所示。

图10 二值化图像

图11 字符分割后的车牌图像
2 车牌字符特征提取
对分割后的每个车牌字符二值图像进行基于白像素的特征提取,共提取13维特征。以上述字符分割后的第5个字符为例,将单个字符按照两行两列分为8块小区域,统计每个小区域中白像素的个数,得到第1-8维特征,如图12所示。
在水平方向画两条横线,将单个字符在水平方向上分为三部分,统计两条横线上的白色像素个数,得到第9-10维特征,如图13所示。在垂直方向上画两条竖线,将单个字符在垂直方向上分为三部分,统计两条竖线上的白色像素个数,得到第11-12维特征,如图14所示。最后,统计整个字符图片上白色像素的总点数,作为第13维特征。

图1 2 第1-8维特征

图1 3 第9、10维特征

图1 4 第11、12维特征
3 BP神经网络训练与分类
神经网络是由多输入、单输出或多输出的神经元连接而成的网络,能通过学习外界环境中的知识不断优化自身的网各参数,从而提高自身性能18]。由于神经网络可以采用并行方式大规模、高速地处理大型问题,目前已经被广泛应用在车牌识别领域19].
BP神经网络是一种基于最速下降法的多层前馈神经网络,由输入层、隐含层、输出层三部分构成,其拓扑结构如图15所示。BP神经网络的激活函数通常采用非线性转移函数,即S型函数-Sigmoid函数。BP神经网络主要通过来自每个神经元信息的前向传播和误差的反向传播来不断调整自身网络的权重和阈值,从而使整个网络的平方误差之和最小化。

图1 5 BP神经网络的结构
基于BP神经网络的车牌字符识别算法主要分为以下三个步骤:建立BP神经网络、利用字符特征对BP神经网络进行训练、对输入车牌的字符特征进行分类。
3.1建立BP神经网络
根据国内普通车牌字符内容的特点, 基于MATLAB平台建立了三个BP子网分别识别不同位置的字符。其中第一个BP子网用于识别车牌的第一个汉字字符(由于数据采集局限性,选取6个汉字字符进行训练和测试),第二个BP子网用于识别车牌的第二个英文字母字符,第三个BP子网用于识别车牌的第3-7个字符,这5个字符为英文字母+数字组合形式。在数据进入神经网络之前, 首先采用pre mn mx函数对数据进行归一化, 防止出现较大误差。
对于第一个BP子网,建立13个输入、4个隐含层、6个输出的BP神经网络;对于第二个BP子网,建立13个输入、6个隐含层、24个输出的BP神经网络;对于第三个BP子网,建立13个输入、10个隐含层、34个输出的BP神经网络。三个BP子网的第一层神经元的激活函数均为log sig, 第二层均为pure lin, 学习方法均采用train gdx。
3.2训练BP神经网络
对于三个BP子网,分别输入其对应种类字符的13维特征值进行训练。对于第一个BP子网,收集了“沪”“京”“闽”“苏”“粤”“浙”六种汉字字符,共计1249幅字符图片进行13维特征提取,并输入BP子网进行训练,部分训练样本如图16所示。

图1 6 部分汉字字符训练库
对于第二个BP子网,由于车牌号中不含有字母“"和“O”,收集了除这两种字母之外的24种英文字母字符,共计3198幅字符图片进行13维特征提取,并输入BP子网进行训练,部分训练样本如图17所示。

图1 7 部分英文字母字符训练库
对于第三个BP子网,收集了上述24种英文字母字符以及数字0-9共34种字符,共计4285幅字符图片进行13维特征提取,并输入BP子网进行训练,部分训练样本如图18所示。

图1 8 部分英文字母+数字字符训练库
3.3 BP神经网络分类结果
对于每个测试字符,将提取到的13维特征输入训练好的BP神经网络进行分类,输出BP神经网络识别结果。对于上述车牌号为“京PKR 676”的原图, 识别结果正确显示为“京PKR 676”, 如图19所示。

图1 9 识别结果

二、部分源代码

function varargout = run(varargin)
% RUN MATLAB code for run.fig
%      RUN, by itself, creates a new RUN or raises the existing
%      singleton*.
%
%      H = RUN returns the handle to a new RUN or the handle to
%      the existing singleton*.
%
%      RUN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in RUN.M with the given input arguments.
%
%      RUN('Property','Value',...) creates a new RUN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before run_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to run_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help run% Last Modified by GUIDE v2.5 07-May-2016 15:41:22% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @run_OpeningFcn, ...'gui_OutputFcn',  @run_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before run is made visible.
function run_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to run (see VARARGIN)% Choose default command line output for run
handles.output = hObject;
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];axes(handles.axes1);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes2);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes3);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes4);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes5);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes6);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes8);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes9);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;axes(handles.axes12);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
axes(handles.axes13);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
axes(handles.axes14);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
axes(handles.axes15);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
axes(handles.axes16);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;
axes(handles.axes17);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;% Update handles structure
guidata(hObject, handles);% UIWAIT makes run wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = run_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
%%  读图
[filename, cd1] = uigetfile( ...{'*.tif;*.TIF;*.JPG;*.jpg;*.bmp;*.BMP;*.jpeg;*.JPEG;','Image file';...'*.*', 'All file (*.*)'},'Pick an Image');
axes(handles.axes1);
cla;
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filenamecd(cd1);d = imread(filename);cd(handles.cd0);handles.I = d;axes(handles.axes1);imshow(d);handles.filename = filename; box on;endhandles.Color = 0;
cd(handles.cd0);
set(handles.text2,'string','');
guidata(hObject, handles);% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
image =  handles.I;
gray = rgb2gray(image);     % 图像灰度化
axes(handles.axes2);
imshow(gray);% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
image =  handles.I;
gray = rgb2gray(image);
new_gray = histeq(gray);  % 直方图均衡 ,图像增强
axes(handles.axes3);
imshow(new_gray);% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
image =  handles.I;
gray = rgb2gray(image);
new_gray = histeq(gray);  % 直方图均衡 ,图像增强
if size(new_gray,1)>1000new_gray_1 = imresize(new_gray,0.1);
elsenew_gray_1  =new_gray;
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

【车牌识别】基于matlab GUI BP神经网络车牌识别【含Matlab源码 669期】相关推荐

  1. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板)【含Matlab源码 790期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  2. 【身份证识别】基于matlab GUI BP神经网络身份证识别【含Matlab源码 2239期】

    ⛄一.身份证号码识别简介 1 引言 当今是一个信息高度发达的时代,对于每个公民而言身份证那一连串的数字体现了个人信息的唯一性,出于保障公民合法权益和社会治安的考虑,越来越多的行业都开始建立自己的安全保 ...

  3. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板+语音播报)【含Matlab源码 1220期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  4. 【运动学】基于matlab GUI三体运动模拟【含Matlab源码 871期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[运动学]基于matlab GUI三体运动模拟[含Matlab源码 871期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  5. 【音乐播放】基于matlab GUI动感音乐播放【含Matlab源码 778期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐播放]基于matlab GUI动感音乐播放[含Matlab源码 778期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  6. 【雷达通信】基于matlab GUI相控阵雷达方向图【含Matlab源码 1048期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[雷达通信]基于matlab GUI相控阵雷达方向图[含Matlab源码 1048期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  7. 【数据分析】基于matlab GUI齿轮箱振动数据分析【含Matlab源码 2122期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[数据分析]基于matlab GUI齿轮箱振动数据分析[含Matlab源码 2122期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方 ...

  8. 【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI维达尔之眼计算[含Matlab源码 2545期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  9. 【光学】基于matlab GUI双孔干涉【含Matlab源码 2119期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双孔干涉[含Matlab源码 2119期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费 ...

  10. 【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI双缝干涉和牛顿环[含Matlab源码 2165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

最新文章

  1. linux screen 常用命令
  2. python教程书籍-大牛推荐的10本学习 Python 的好书
  3. python集合数据对象_python学习第七天 基础数据类型补充 深浅copy 集合 关键字后面加可迭代对象...
  4. mysql delete|删除 命令的注意点
  5. restlet使用_使用Restlet Framework构建联网汽车
  6. servlet ---- 案例(简单)优化
  7. 2020-08-17每日一句
  8. 请求 Provisional headers are shown 问题
  9. 咸鱼Maya笔记—Maya 平滑多边形
  10. [Place 30-58] IO placement is infeasible. Number of unplaced terminals (1) is greate
  11. 网页开发工具VSCode的使用
  12. k3s 离线部署指南
  13. 两条边延长角会有什么变化_《直线、射线、线段和角》教学设计
  14. dnf剑魂buff等级上限_DNF:国服鬼剑85版本以来的变迁,剑魂最惨,阿修罗起伏不大...
  15. 视频教程- 项目管理工具(1) WBS-工作分解结构-研发管理
  16. 写在入职两周年纪念日
  17. 全网最详细地介绍mybatis-plus框架
  18. 嵌入式ARM64 Linux内核FIT uimage方式启动
  19. 接口规范、容错处理规则、aph备份数据规则
  20. python 图标拖_托盘图标在Python中的应用,图标是gon

热门文章

  1. Message Unable to connect to SQL Server '(local)'
  2. AC日记——「SCOI2015」情报传递 LiBreOJ 2011
  3. ecshop删除购物流程中的配送方式和支付方式
  4. Win7系统做路由器
  5. OpenCV4.5.1 | 使用一行代码将图像匹配性能提高14%
  6. learning opencv3: 一:overview 打开自己的视频文件加上暂停快进按钮
  7. 第4章 最基础的分类算法-k近邻算法 kNN 学习笔记 上
  8. spss数据调整后重新计算
  9. unity通过脚本获取一个物体的所有子物体孙子物体.....并从里面找到有动画的物体
  10. Atitit webserver tomcat 7 8.0 8.5 9.0新特性 Tomcat 7 的七大新特性 - 编程语言 - ITeye资讯.html tomcat 8.0特性 - CSD