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