【交通标志识别】基于matlabGUIBP神经⽹络雾霾天⽓交通标志识别(带⾯
板)【含Mat。。。
⼀、BP神经⽹络交通标志识别简介
道路交通标志⽤以禁⽌、警告、指⽰和限制道路使⽤者有秩序地使⽤道路, 保障出⾏安全.若能⾃动识别道路交通标志, 则将极⼤减少道路交通事故的发⽣.但是由于道路交通错综复杂, 且智能识别技术尚未成熟, 为了得到⾼效实⽤的道路标志识别系统, 仍需进⾏⼤量的研究.限速交通标志的检测识别作为道路交通标志识别系统的⼀个重要组成部分, 对它的研究具有⾮常重要的意义。
⽬前国内已有不少学者针对道路交通标志牌的智能识别进⾏了研究, 针对复杂环境背景下交通标志牌难以定位识别的问题, 提出⼀种基于交通标志牌特定颜⾊以及多尺度Retinex的图像增强和仿射变换的道路交通标志牌定位算法以及基于⽀持向量机的标志牌识别算法, 经试验验证,该检测识别⽅法可将⽬标识别率达到90%以上, 但是其基于个⼈计算机 (Personal Computer, PC) 实现的检测算法, 不适⽤于影像序列的交通标志牌检测.⽂献[7]提出⼀种Adaboost算法与⽀持向量机 (Support Vector Machine, SVM) 算法融合⽤于⾃然场景下的交通标志识别的算法.该算法⾸先通过Adaboost筛选出最可能的候选⼦图像集合, 接着利⽤SVM对候选集合进⾏最终识别, 从⽽将识别正确率提升⾄96%以上.以上这些算法虽然在⼀定程度上取得了⼀定的识别效果, 但是⽬前常⽤⽅法均存在误识别率较⾼, 检测时间过长等缺陷.笔者提出算法的创
新之处在于, 椭圆检测定位过程中采⽤帧间加速法、连续⾃适应均值漂移算法 (Continuously adaptive mean-Shift, CamShift) 和光流法缩短定位时间, 再对定位结果进⾏反向传播 (Back Propagation, BP) 神经⽹络识别, 从⽽提⾼检测效率, 能够实现实时视频处理。
1 限速交通标志的检测与识别
⽂中提出的算法主要包括两部分:限速交通标志的检测与识别.⾸先利⽤交通标志牌的颜⾊以及形状特征将交通标志牌从复杂环境背景下检测出来;接着利⽤BP神经⽹络对正负样本进⾏训练, 形成训练集, 从⽽实现对检测出的交通标志牌的识别;最后再通过帧间加速法、CamShift法和光流法⽐较智能检测识别的耗时情况.
1.1 限速交通标志的检测
交通标志的⾃动识别⾸先需要对标志牌进⾏准确定位.为了解决复杂环境背景下的限速标志牌定位问题, 通过查阅《道路交通标志和标线》中对限速标志牌制作的规定, 按照规定限速标志牌外围均呈红⾊, 利⽤这⼀特征⾸先对原始影像进⾏颜⾊分割, 将红⾊区域分割出来, 排除⼀些不必要的噪声, 接着对影像进⾏滤波;然后进⾏边缘提取, 椭圆拟合;最终将圆形标志检测出来.
1.1.1 颜⾊分割
数码相机拍摄的彩⾊影像⼀般分为红绿蓝 (Red Green Blue, RGB) 3个通道, 有时为了突出某些颜⾊的特征, 需要将其转换到⾊度-饱和度-纯度⾊彩模型 (Hue-Saturation-Value, HSV) 空间, ⽂中为了对⽐RGB和HSV空间中红⾊信息的区别, 分别在RGB和HSV空间进⾏颜⾊分割, 其原理分别是:
(1) RGB空间颜⾊分割.对RGB影像逐像素进⾏判断, 若G-B R<0.1, R≥160, G-B<30, G<120, B<120这5个条件同时满⾜, 则将该区域赋为⽩⾊;否则, 将其变为⿊⾊.这样⽩⾊区域即为感兴趣区域, 分割完毕.得到的颜⾊分割效果图如图1 © 所⽰.
(2) HSV空间颜⾊分割.⾸先将原始影像 (图1 (a) ) 从RGB转到HSV空间, 然后逐像素进⾏判断, 若V≥0.15且S≥0.1且H≤7或H≥170, 则将该区域赋为⽩⾊;否则, 将其变为⿊⾊.这样⽩⾊区域即为感兴趣区域, 分割完毕.得到的颜⾊分割效果如图1 (b) 所⽰.
未识别的网络图1 颜⾊分割实验
通过对⽐实验可见, 基于RGB空间的颜⾊分割在影像光照条件不⾜的情况下难以将标志牌分割出来, ⽽
HSV空间对光线要求较低, 可以较好地识别红⾊区域, 所以⽂中采⽤HSV空间的颜⾊分割优于其他⽂献提出的RGB颜⾊分割效果。
1.1.2 影像平滑与边缘提取
由于道路交通背景较为复杂, 颜⾊分割之后仍有部分噪声, 为了过滤该噪声, ⽂中采⽤3次⾼斯平滑的⽅法除去噪声, 为下⼀步边缘提取提供便利, 实验结果如图2所⽰.由实验结果可以看出, 经过⾼斯滤波后, 图像既保持了基本轮廓, 同时对噪声也起到⼀定的抑制作⽤。
图2 影像平滑与边缘提取
边缘是图像灰度变化率最⼤的地⽅, ⼀般含有⼗分重要的特征信息, 常被⽤于物体检测⽅⾯.图像边缘不但保留了原始图像中⾮常重要的信息,⽽且极⼤降低了数据量, 完全符合特征提取的要求, 因此⽂中采⽤canny边缘提取进⾏图像边缘提取.
1.1.3 椭圆拟合
椭圆拟合法即从⼀组样本点寻⼀最接近样本点的椭圆, 也就是说, 将图像中的⼀组数据以椭圆⽅程为模型进⾏拟合, 使某⼀椭圆⽅程尽量满⾜这些数据, 最终确定最佳拟合椭圆.
最⼩⼆乘法作为数据拟合中的基本⽅法, 最早被应⽤于椭圆拟合, 其基本思路就是使⽅程整体误差最⼩化, 即根据给定数据集不断假设椭圆⽅程, 计算每个待定点到该椭圆的距离之和, 最终求出距离之和最⼩的椭圆⽅程即为最佳拟合椭圆.
⽂中利⽤最⼩⼆乘法对椭圆进⾏拟合, 由于道路背景较为复杂, 初步拟合的椭圆含有较多⼲扰信息 (如图3 (a) 所⽰) , 因此, 对拟合出的椭圆扁率进⾏限制, 若扁率e介于0.8~1.2之间, 即0.8≤e≤1.2时, 则认为是圆形交通标志牌区域;否则, 为⼲扰信息.其最终检测结果如图3 (b) 所⽰.
图4 同⼼圆去除
1.1.4 同⼼圆去除
由于在提取边缘操作之后会出现内外两个红⾊圆形标志圈, 所以进⾏椭圆拟合后易出现同⼼圆现象, 如图4 (a) 所⽰.针对这⼀问题, ⽂中采⽤⼀种排列组合距离⽐较法进⾏同⼼圆去除, 即对所有检测出的椭圆中⼼距离进⾏两两⽐较, 若两中⼼之间的欧式距离⼩于最⼩设置距离, 那么只保留最⼤圆, 去除最⼩圆;反之, 则认为这两个圆⾮同⼼圆, 全部进⾏保留.图4 (b) 为去除同⼼圆之后的检测结果.
1.2 基于BP神经⽹络的限速标志识别
在上节中, 从复杂环境背景下将道路交通标志牌检测了出来, 接下来需要对检测出的交通标志牌进⾏⾃
动识别, 因此需要⽤到图像识别技术.近年来, ⼈⼯神经⽹络因其强⼤的学习能⼒和并⾏计算能⼒, 常被应⽤于图像识别等领域.虽然该⽅法属于机器学习范畴, ⽆法完全跟⼈脑进⾏媲美, 但其拥有⾃适应学习能⼒, 能够通过⼀系列指定的学习特征对样本进⾏学习, 即通过对⼈脑神经元进⾏抽象, 形成某种简单的模型, 接着依照不同的连接⽅式形成不同的⽹络, 从⽽实现适应性处理信息的能⼒.⽬前⼈⼯神经⽹络因其强⼤的模糊学习能⼒已被应⽤于医疗、交通、⼯业、运输、航空和航天等各个领域.⽂中项⽬需要对交通标志进⾏实时检测识别, 因此, 可通过BP神经⽹络对标志牌进⾏识别.
1.2.1 BP神经⽹络的算法描述
BP神经⽹络包括训练过程和学习过程.
(1) 训练过程.⾸先输⼊层接收来⾃外界的信号, 然后传递给中间层的各神经元;中间层通过改变不同的隐层结构将这些信息进⾏变换;最后信息被传递到输出层, 这就是⼀次学习的正向传播处理过程.
当实际输出与期望输出存在差异时, 将会进⼊误差反向传播过程.误差反传即通过隐含层反传输出误差到输⼊层, 在反传过程中将误差分配到每⼀层, 从⽽在各层获得调整各单元权值的依据.通过正向反向传播, 直到达到训练终⽌条件为⽌.
(2) 学习过程.⼈⼯神经⽹络的学习过程⾸先需要对⽹络进⾏初始化, 即分配连接权, 设定误差函数, 学习
的最⼤次数等;接着输⼊训练样本, 计算各隐藏层的输⼊和输出, 调整连接权值;最后计算全局误差, 判断其是否满⾜终⽌条件, 从⽽完成学习过程[10].
1.2.2 输⼊向量的计算
输⼊向量⽤来代表图案的特征向量, 不同的标志具有不同的特征向量, 利⽤特征向量的差异来区分不同的标志图案, 从⽽达到识别分类的⽬的.
⽂中样本图像均统⼀⾄30×30像素, 并设定63个输⼊节点, 以图案的红绿蓝 (RGB) 3个通道灰度值为基础进⾏特征向量的计算, 充分利⽤图像颜⾊信息, 从⽽较⼤增加了识别率.
前3个节点的计算⽅法为:计算红绿蓝3个通道的平均值, 并将其归⼀化到0~1范围内, 计算公式如下:
然后, 计算30个垂直⽅向vi和⽔平⽅向hi上的投影值:
其中, Y为灰度矩阵, T为阈值.Yi, j和T的表达式为
这63个节点依序作为输⼊向量的值, 进⾏⽹络训练。
1.2.3 期望输出的确定
期望输出⽤来判定⽹络的训练误差和决定输出值, 该输出可以是⼀个值或者⼀个向量, ⽂中以6种不同限速标志为训练样本.由于期望输出得到的值在0~1区间内, 为了更好地区分不同类别限速标志, 这⾥将期望输出设定为⼀个六维向量.向量构造⽅法为:第N个训练样本的期望输出向量的第N维的值为1, 其他维的值都为0.即6种训练标志的期望输出向量按⾏排列在⼀起会形成⼀个6×6的单位矩阵。
⼆、部分源代码
function varargout =Traffic_Iden(varargin)
% TRAFFIC_IDEN MATLAB code for Traffic_Iden.fig
%      TRAFFIC_IDEN, by itself, creates a new TRAFFIC_IDEN or raises the existing
%      singleton*.
%
%      H = TRAFFIC_IDEN returns the handle to a new TRAFFIC_IDEN or the handle to
%      the existing singleton*.
%
%TRAFFIC_IDEN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in TRAFFIC_IDEN.M with the given input arguments.
%
%TRAFFIC_IDEN('Property','Value',...) creates a new TRAFFIC_IDEN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Traffic_Iden_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Traffic_Iden_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 Traffic_Iden
% Last Modified by GUIDE v2.501-Jan-202211:02:35
% Begin initialization code - DO NOT EDIT
gui_Singleton =1;
gui_State =struct('gui_Name',      mfilename,...
gui_State =struct('gui_Name',      mfilename,...
'gui_Singleton',  gui_Singleton,...
'gui_OpeningFcn', @Traffic_Iden_OpeningFcn,...
'gui_OutputFcn',  @Traffic_Iden_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 Traffic_Iden is made visible.
function Traffic_Iden_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 Traffic_Iden (see VARARGIN)
% Choose default command line output for Traffic_Iden
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;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Traffic_Iden wait for user response (see UIRESUME)
%uiwait(handles.figure1);
%--- Outputs from this function are returned to the command line. function varargout =Traffic_Iden_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