一、红绿灯识别简介

截至2015年,世界范围内盲人的患病率为0.49%,约有3600万盲人,我国50岁以上的盲人有532万。盲人出行困难重重。目前市面上针对盲人出行识别红绿灯的研究并不多,识别红绿灯的图像识别技术往往应用于无人驾驶技术上。本文设计了一种使用直方图阈值分割以及HSV颜色识别的红绿灯识别方法。

阈值分割是较常见的一种图像处理方法,由于其计算速度快、实现简单,因此被广泛应用在图像处理中。该方法主要是依据直方图的概率分布计算相应的准则函数,同时运用智能优化算法加快阈值搜索速度,从而选取合适的阈值进行分割。其中,直方图阈值法是依据图像的直方图,对其进行分析来实现对图像的分割。HSV颜色空间的3个分量具有相对独立性,而H和S分量受光照及阴影遮挡的影响很小。使用HSV色彩空间,利用不同颜色的阈值进行红绿灯颜色识别,排除大部分外界环境干扰,精确可靠。

1 预处理
摄像头自然拍摄的街景图像包含的图形复杂繁琐,并且外界光线的变化对图像的清晰度、分辨度有一定影响。街景图像的预处理主要包括图像增强等工作,简单预处理的方法包括灰度化、图像增强等步骤。韩征等提出基于蒙特卡洛模拟的图像二值化增强算法。现阶段,机器视觉的准确性不足。在工业实际应用上,机器视觉的准确性远低于实验的测试结果,当测量的环境发生改变后,得出的结果会发生较大的偏差,对环境的适应性较差。外界环境的变化影响街景图像的拍摄效果,对红绿灯的定位识别具有干扰。为了减少外界环境因素无关因素的干扰,对图像进行灰度化、锐化及增强降噪处理。预处理流程如图1所示。
【红绿灯识别】基于matlab GUI红绿灯识别【含Matlab源码 1908期】_计算机视觉
图1 预处理流程
2 红绿灯的定位
对于一张灰度图像,图像的直方图[8]可以看作是像素灰度值概率密度分布函数的一个近似。假设一张图像里仅包括目标物体和背景,那么此图像的直方图分布可看作是仅有目标物体与背景的像素概率密度分布。
假设一张灰度图像的直方图灰度级范围为i=0,1,2……k,则此图像的总像素为:
【红绿灯识别】基于matlab GUI红绿灯识别【含Matlab源码 1908期】_计算机视觉_02
灰度级i出现的概率为:
【红绿灯识别】基于matlab GUI红绿灯识别【含Matlab源码 1908期】_预处理_03
使用直方图阈值分割算法实现图像的分割,提出双曲线二维Otsu阈值分割算法,使用模糊直方图模型进行运动目标追踪,本文使用直方图阈值分割法,适用于简单的红绿灯分割。依据灰度图像的直方图可分析出图像的分割阈值,对于具有明显波峰波谷的灰度图,此方法分割准确。红绿灯分割定位结果如图2所示。图2中第一张图为首次分割后的图像,可见其轮廓模糊,不利于后续准确定位。对其进行腐蚀操作,轮廓较之前清晰。可以看到,在第二张二值图像中存在零零星星的噪点,使用中值滤波进行降噪处理,得到最终二值化图像。红绿灯的底盘颜色均为黑色,且在实时拍摄的图像中,红绿灯的位置通常位于图像的中间偏上位置,在所得到的图像中,找出图像矩阵中最小的元素,它所对应的行即为该二值图像中黑色像素点最多的行。因为在日常生活中,无论是横向红绿灯或竖向红绿灯,红绿灯的长度、宽度以及面积是固定不变的,由此可确定红绿灯在图像中的位置。

3 红绿灯颜色识别
RGB色彩空间:RGB色彩模式是工业界最常用的一种模式,其中包括红色(R)、绿色(G)和蓝色(B)。一幅图像由这3个通道组成。HSV色彩空间:HSV模型中颜色的参数是色调(H)、饱和度(S)和亮度(V)。

RGB模型是人们最熟悉的彩色模型,但RGB 3个分量的相关性高,不能用于分离两个颜色相近区域。HSV模型同样属于彩色模型,HSV(hue,saturation,value)分别表示色调、饱和度和明度,HSV模型比RGB模型更接近人们对色彩的感知;HSV模型消除了3个分量之间的相关性,在处理颜色相近的图像时有更好的效果。

对于HSV图像进行颜色识别,通过红绿红3种颜色的HSV值不同,判断红绿灯此刻亮起的颜色是何种颜色。首先,将RGB色彩转换成HSV模型,使用两个模型之间的差值进行数值转换。红黄绿3种颜色的HSV各不相同,根据红色的HSV数值,分别设置红色、绿色、黄色HSV值的上下限。除此之外,考虑到各地红绿灯颜色可能有些许差异,如某些红绿灯的红灯更偏于橙色,绿色更偏于为青色,而且在强光弱光的环境下灯光还显现出白色,在设置HSV数值时,将橙色青色白色的HSV上下限值加入到算法中。提取分割后的红绿灯图像中HSV三通道的值,依据所设置的HSV阈值,判断图像中何种颜色的分量占据多数,即可判断出此刻红绿灯的状态。

二、部分源代码

function varargout = Maindeng(varargin)
% MAINDENG MATLAB code for Maindeng.fig
% MAINDENG, by itself, creates a new MAINDENG or raises the existing
% singleton*.
%
% H = MAINDENG returns the handle to a new MAINDENG or the handle to
% the existing singleton*.
%
% MAINDENG('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MAINDENG.M with the given input arguments.
%
% MAINDENG('Property','Value',...) creates a new MAINDENG or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Maindeng_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Maindeng_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 Maindeng

% Last Modified by GUIDE v2.5 21-Jun-2022 22:14:12

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Maindeng_OpeningFcn, ...
'gui_OutputFcn', @Maindeng_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 Maindeng is made visible.
function Maindeng_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 Maindeng (see VARARGIN)

% Choose default command line output for Maindeng
handles.output = hObject; %下面全部为设定作图区域属性
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];

axes(handles.axes1);
set(gca,'Xtick',[]);
set(gca,'Ytick',[]);
box on;

三、运行结果

【红绿灯识别】基于matlab GUI红绿灯识别【含Matlab源码 1908期】_直方图_04
【红绿灯识别】基于matlab GUI红绿灯识别【含Matlab源码 1908期】_预处理_05

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]桂欣悦,李振伟,吴晨晨,李彦玥.基于MATLAB的红绿灯识别系统研究[J].电子设计工程. 2020,28(16)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除