【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面

1 简介

伴随汽车数目的急剧增长,如何解决交通拥挤问题已经成为交通管理中最棘手的问题。智能交通系统成为解决交通问题的有效途径。车牌识别系统是智能交通系统的重要应用,应用于小区智能化管理、电子警察和停车场管理等方面,具有较高的社会价值。传统的车牌图像识别系统在核心技术字符识别部分,采用的多是模板匹配法或NN神经网络法进行识别,研究结果表明,模板匹配对字母和数字的识别率不高,对汉子的识别率很高;神经网络对字母和数字的识别率很高。因此,本文提出一种基于神经网络的车牌识别系统,同时结合模板匹配法对汉子进行识别,大大提高了车牌识别的准确性。论文包含车牌定位、倾斜矫正、字符分割、字符识别、GUI界面设计共五个模块。车牌定位模块采用基于颜色边缘检测的定位方式,利用颜色跳变点确定车牌区域。倾斜矫正模块选取了Radon变换对倾斜车牌进行矫正。字符分割模块是按照车牌的第二个字符与第三个字符之间的间距是所有车牌字符中的最大间距的特点,通过寻找车牌的最大间距对字符进行分割。在分割的过程中,若后5个字符中某个字符的宽度过小,可以确定该字符为数字‘1’。字符识别模块是将模板匹配与BP神经网络两种字符识别方法的优缺点相结合,选取模板匹配方识别汉字字符,多个NN神经网络互相配合识别字母和数字字符。GUI界面设计模块是对设计好的车牌识别系统进行界面设计。测试结果表明,本设计的车牌图像识别系统可以准确地识别大部分车牌号码。

我们获得的车牌图像通常都是彩色图像,由于这些彩色图像尺寸不一、干扰噪声大,而且需要很大的存储开销,所以首先要对它进行预处理。车牌图像的预处理是车牌识别中一个非常重要的模块,直接影响到后续车牌字符分割、字符特征提取和字符识别的效果。通过车牌图像预处理模块,不但能去除图像噪声、提高图像质量、降低车牌字符识别中要遇到的各种阻扰因素,而且可以有效地降低系统的存储空间需求。

1.1 图像的格式转换及尺寸归一化

图像预处理的第一步就是要进行图像的格式转换及尺寸归一化:即将图像统一转换为同一种图像格式以及将图像大小缩放到统一尺寸。这样可以有效地减小图像特征提取的计算复杂度和准确度,以及降低对系统的存储空间需求。图像格式转换和尺寸变换有几种方法:一种方法是纯粹由手工操作图像处理类软件诸如ACDSEE 或者光影魔术手等来实现;第二种方法在系统中加入相应的处理模块由系统根据需要自动处理完成。不同的图像处理类软件由于采用的算法都不尽相同,所以处理出来的效果虽然肉眼看不出差别,但是在特征匹配时的出入非常大,有时甚至会造成图像失配。因此,应尽量采用统一的格式转换和尺寸变换算法。

1.2 图像的灰度化

一般所采集的车牌图像都是通过数码相机拍摄获取的,因此预处理前的图像都是彩色图像。彩色图像又称 RGB 图像,它是利用 R、G、B 三个分量表示一个像素的颜色,R、G、B 分别代表红、绿、蓝三种颜色,通过这三个基本色可以合成出任意的颜色。因此,对一个尺寸为 M*N 大小的彩色图像来说,存储该图像需要一个 M*N*3 的三维数组。彩色图像包含了大量的颜色信息,不但在存储空间上开销很大,而且在处理上也会降低系统的执行速度。因为图像的每个像素都具有 R、G、B 三个不同的颜色分量,识别上并用不着其中很多无关的信息,这对进一步的识别也是不利的。因 此,在对图像进行进一步的处理之前,需要将彩色图像转换成为灰度图像,目的就是为了节省存储空间和加快处理速度。在 RGB 模型中,如果 R=G=B,则颜色表示一种灰度颜色,其中 R=G=B 的值叫做灰度值。而由彩色图像转换为灰度图像的过程就叫做图像的灰度化处理。灰度图像就是只有强度信息,而没有颜色信息的图像。存储一个灰度图像只需要一个二维的矩阵,矩阵的每个元素表示对应位置的像素的灰度值。彩色图像的像素色为 RGB(R, G, B),灰度图像的像素色为 RGB(r,r, r),R、G、B 可由彩色图像的颜色分解获得。R、G、B 的取值范围为 0-255,所以灰度的级别只有 256 级。灰度化的处理方法主要采用加权平均值法:根据某个指标例如重要性给 R、G、B 赋予不同的权值,并使 R、G、B 等于它们的值的加权和平均。即:

R=G=B=(R*WR+G*WG+B*WB)/3 式(2-1)

其中,WR,WG,WB分别是 R、G、B 的权值。由于人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,研究表明,当 WR=0.30,WG=0.59, WB=0.11 时,可以得到由彩色图像转换过来的最合理的灰度图像。

1.3 图像的增强

图像增强是指为了改善视觉效果,便于人和机器对图像的理解和分析,根据图像的特点或存在的问题采取的改善方法和措施。由于客观条件的限制,获取和传输图像的过程往往会发生失真,所得到的图像与原始的图像存在某种程度的差别。如果这种差别程度过大,是不能被接受的。在很多时候,人们可以根据经验估计出导致图像降质的具体原因,针对这些原因采取简单有效的弥补方法,得到改善图像的效果。通常可以采用对比度增强、直方图均衡、滤波等方式进行图像增强。考虑到所获取的车牌图像的具体情况,我们发现直方图均衡并不是很适合, 当使用直方图均衡算法来调整车牌图像的亮度时,我们发现字符图像中的字符和背景的明暗对比会被削弱。这对后续字符的识别是很不利的。通常可以采用以下这种方法来进行图像的亮度矫正:首先对灰度图像的像素进行统计,找到值 V1,V2,使得亮度值 xÎ[min,V1]的像素个数占整个图像像素数的 5%;xÎ[V2,max]的像素个数占整个图像像素数的5%。其中,min 表示图像中亮度的最小值,max 表示图像中亮度的最大值。然后,我们将亮度值小于 V1 的像素值置为 V1,同样,把亮度值大于 V2 的像素值置为V2。这样,我们就削去了个别的特别暗的点和特别亮的点。接下来,我们按照比例将图像亮度从[V1,V2]拉伸到[0,255],从而就完成了亮度调整。完成图像亮度矫正之后,可以通过图像的滤波来使图像得到进一步的增强。通常采用空间域法对车牌图像进行滤波处理,目的是为了去除图像中的噪声。通常使用线性滤波、中值滤波和自适应滤波等方法。2.1.4图像的二值化二值化图像是指整幅图像画面内只有黑、白两个颜色的图像。图像二值化算法原理比较简单,即选定一个阈值,当灰度图像某像素的亮度值低于该阈值时,我们设该像素值为 0;当灰度图像某像素的亮度值大于等于该阈值时,我们就设该像素值为 1,这样我们就完成了灰度化的过程。

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第1张图片

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第2张图片

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第3张图片

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第4张图片

2 部分代码

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});
end

if nargout
  [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
   gui_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;



% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject   handle to pushbutton10 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)
%% 这个按钮关闭软件
close all;
clear;
clc;

3 仿真结果

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第5张图片

【图像识别】基于神经网络求解车牌识别问题matlab代码含GUI界面_第6张图片

4 参考文献

[1]朱凤霞. (2020). 基于神经网络和图像识别的车牌识别技术. 电子设计工程, 28(2), 5.

你可能感兴趣的:(图像处理,matlab,神经网络,计算机视觉)