热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

交通标志识别基于matlabGUIBP神经网络交通标志识别(带面板)含Matlab源码1647期

篇首语:本文由编程笔记#小编为大家整理,主要介绍了交通标志识别基于matlabGUIBP神经网络交通标志识别(带面板)含Matlab源码1647期相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了交通标志识别基于matlab GUI BP神经网络交通标志识别(带面板)含Matlab源码 1647期相关的知识,希望对你有一定的参考价值。






一、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 &#61; 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 &#61; TRAFFIC_IDEN returns the handle to a new TRAFFIC_IDEN or the handle to
% the existing singleton*.
%
% TRAFFIC_IDEN(&#39;CALLBACK&#39;,hObject,eventData,handles,...) calls the local
% function named CALLBACK in TRAFFIC_IDEN.M with the given input arguments.
%
% TRAFFIC_IDEN(&#39;Property&#39;,&#39;Value&#39;,...) 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&#39;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.5 01-Jan-2022 11:02:35
% Begin initialization code - DO NOT EDIT
gui_Singleton &#61; 1;
gui_State &#61; struct(&#39;gui_Name&#39;, mfilename, ...
&#39;gui_Singleton&#39;, gui_Singleton, ...
&#39;gui_OpeningFcn&#39;, &#64;Traffic_Iden_OpeningFcn, ...
&#39;gui_OutputFcn&#39;, &#64;Traffic_Iden_OutputFcn, ...
&#39;gui_LayoutFcn&#39;, [] , ...
&#39;gui_Callback&#39;, []);
if nargin && ischar(varargin1)
gui_State.gui_Callback &#61; str2func(varargin1);
end
if nargout
[varargout1:nargout] &#61; 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 &#61; hObject;
handles.cd0 &#61; cd;
handles.Color &#61; 0;
handles.I &#61; [];
axes(handles.axes1);
set(gca,&#39;Xtick&#39;,[]);
set(gca,&#39;Ytick&#39;,[]);
box on;
axes(handles.axes2);
set(gca,&#39;Xtick&#39;,[]);
set(gca,&#39;Ytick&#39;,[]);
box on;
axes(handles.axes3);
set(gca,&#39;Xtick&#39;,[]);
set(gca,&#39;Ytick&#39;,[]);
box on;
axes(handles.axes4);
set(gca,&#39;Xtick&#39;,[]);
set(gca,&#39;Ytick&#39;,[]);
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 &#61; 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
varargout1 &#61; handles.output;
% --- Executes on button press in radiobutton3.
function radiobutton3_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,&#39;Value&#39;) returns toggle state of radiobutton3
% --- Executes on button press in radiobutton4.
function radiobutton4_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,&#39;Value&#39;) returns toggle state of radiobutton4
% --- Executes on button press in radiobutton5.
function radiobutton5_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,&#39;Value&#39;) returns toggle state of radiobutton5
% --- 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] &#61; uigetfile( ...
&#39;*.tif;*.TIF;*.JPG;*.jpg;*.bmp;*.BMP;*.jpeg;*.JPEG;&#39;,&#39;Image file&#39;;...
&#39;*.*&#39;, &#39;All file (*.*)&#39;,&#39;Pick an Image&#39;);
axes(handles.axes1);
cla;
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filename
cd(cd1);
d &#61; imread(filename);
cd(handles.cd0);
handles.I &#61; d;
axes(handles.axes1);
imshow(d);
handles.filename &#61; filename;
box on;

end
handles.Color &#61; 0;
cd(handles.cd0);
set(handles.text2,&#39;string&#39;,&#39;&#39;);
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)
%% 提取标志
% 按照颜色来分
Color &#61; 0; % 颜色标记 1是红 2 是蓝 3是黄色
if get(handles.radiobutton3,&#39;Value&#39;)

Color &#61; 1;

elseif get(handles.radiobutton4,&#39;Value&#39;)

Color &#61; 2;

elseif get(handles.radiobutton5,&#39;Value&#39;)

Color &#61; 3;
end
handles.Color &#61; Color;
Image &#61; handles.I;
switch Color

case 1

DI &#61; Image(:,:,1);
GI &#61; (Image(:,:,1)>110 & Image(:,:,2)<150 & Image(:,:,3)<150 ...
& abs(double(Image(:,:,2))-double(Image(:,:,3)))<50 & abs(double(Image(:,:,1))-double(Image(:,:,2)))>30);

case 2

DI &#61; Image(:,:,3);
GI &#61; (Image(:,:,1)<100 & Image(:,:,2)<150 & Image(:,:,3)>120 ...
& abs(double(Image(:,:,2))-double(Image(:,:,3)))>30);

case 3

DI &#61; rgb2gray(Image);
GI &#61; (Image(:,:,1)>160 & Image(:,:,2)>90 & Image(:,:,3)<90 ...
& abs(double(Image(:,:,1))-double(Image(:,:,2)))<100 & abs(double(Image(:,:,1))-double(Image(:,:,3)))>90);

end

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社&#xff0c;2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社&#xff0c;2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社&#xff0c;2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社&#xff0c;2015.
[5]张兴国,刘晓磊,李靖,王环东.BP神经网络下的限速交通标志实时检测识别[J].西安电子科技大学学报. 2018,45(05)







推荐阅读
  • 时域|波形_语音处理基于matlab GUI音频数据处理含Matlab源码 1734期
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了语音处理基于matlabGUI音频数据处理含Matlab源码1734期相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • 开发笔记:图像识别基于主成分分析算法实现人脸二维码识别
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了图像识别基于主成分分析算法实现人脸二维码识别相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 1简介本文结合数字信号处理课程和Matlab程序设计课程的相关知识,给出了基于Matlab的音乐播放器的总体设计方案,介绍了播放器主要模块的功能,设计与实现方法.我们将该设 ... [详细]
  • 开发笔记:读《分布式一致性原理》JAVA客户端API操作2
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了读《分布式一致性原理》JAVA客户端API操作2相关的知识,希望对你有一定的参考价值。创 ... [详细]
  • 6(自)、交换机之关键字模式
    上一节中的我们的日志系统将所有消息广播给所有消费者,对此我们想做一些改变,例如我们希望将日志消息写入磁盘的程序仅接收严重错误(error),而不存储那些警告(warnning)或者 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
author-avatar
我细细
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有