【红绿灯识别】基于matlab红绿灯识别【含Matlab源码 1068期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【红绿灯识别】基于matlab红绿灯识别【含Matlab源码 1068期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、红绿灯识别简介
截至2015年,世界范围内盲人的患病率为0.49%,约有3600万盲人,我国50岁以上的盲人有532万。盲人出行困难重重。目前市面上针对盲人出行识别红绿灯的研究并不多,识别红绿灯的图像识别技术往往应用于无人驾驶技术上。本文设计了一种使用直方图阈值分割以及HSV颜色识别的红绿灯识别方法。
阈值分割是较常见的一种图像处理方法,由于其计算速度快、实现简单,因此被广泛应用在图像处理中。该方法主要是依据直方图的概率分布计算相应的准则函数,同时运用智能优化算法加快阈值搜索速度,从而选取合适的阈值进行分割。其中,直方图阈值法是依据图像的直方图,对其进行分析来实现对图像的分割。HSV颜色空间的3个分量具有相对独立性,而H和S分量受光照及阴影遮挡的影响很小。使用HSV色彩空间,利用不同颜色的阈值进行红绿灯颜色识别,排除大部分外界环境干扰,精确可靠。
1 预处理
摄像头自然拍摄的街景图像包含的图形复杂繁琐,并且外界光线的变化对图像的清晰度、分辨度有一定影响。街景图像的预处理主要包括图像增强等工作,简单预处理的方法包括灰度化、图像增强等步骤。韩征等提出基于蒙特卡洛模拟的图像二值化增强算法。现阶段,机器视觉的准确性不足。在工业实际应用上,机器视觉的准确性远低于实验的测试结果,当测量的环境发生改变后,得出的结果会发生较大的偏差,对环境的适应性较差。外界环境的变化影响街景图像的拍摄效果,对红绿灯的定位识别具有干扰。为了减少外界环境因素无关因素的干扰,对图像进行灰度化、锐化及增强降噪处理。预处理流程如图1所示。
图1 预处理流程
2 红绿灯的定位
对于一张灰度图像,图像的直方图[8]可以看作是像素灰度值概率密度分布函数的一个近似。假设一张图像里仅包括目标物体和背景,那么此图像的直方图分布可看作是仅有目标物体与背景的像素概率密度分布。
假设一张灰度图像的直方图灰度级范围为i=0,1,2……k,则此图像的总像素为:
灰度级i出现的概率为:
使用直方图阈值分割算法实现图像的分割,提出双曲线二维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阈值,判断图像中何种颜色的分量占据多数,即可判断出此刻红绿灯的状态。
三、部分源代码
clc
clear all
close all
a=imread('mode1.jpg');
figure(1),imshow(a);title('检测图像');%读入图像并显示
hsv=rgb2hsv(a);
h=hsv(:,:,1);
s=hsv(:,:,2);
v=hsv(:,:,3);
figure(2),imshow(hsv);title('HSV图像');%转换为hsv图像并显示
bw1=h>0.9|h<0.05;
bw1=bw1.*(s>0.5);%检测红色区域
se=strel('disk',3);%创建一个指定半径R的平面圆盘形的结构元素
bw2=imopen(bw1,se);%用结构元素SE实现二值图像的bw1的形态开运算。SE可以是单个结构元素对象或者结构元素对象数组。
bw2=bwfill(bw2,'holes');%空洞填充,填充二进制图像的背景色
% % % figure
% % % imshow(bw2)
[L,num]=bwlabel(bw2,8);%标记各区域,这里num返回的就是BW2中连通区域的个数。
STATS = regionprops(L,'area','BoundingBox');%%对二值化数据进行连通域数据分析获取标记后的图像面积。外接长方形、和面积
bw_area=zeros(1,num);
bw_circle=zeros(1,num);
% % % bw_center=zeros(num,2);
figure(1),imshow(a);title('检测图像');%读入图像并显示
hold on
for i=1:num
[r,c]=find(L==i);%返回的是L矩阵中数值为i的坐标
sizer=size(r,1);
bw_area(i)=length(r);
if bw_area(i)<200|bw_area(i)>10000
continue;
end %去掉过大过小区域
bw_center=[];
bw_center(1:sizer,1)=round(mean(r));%行坐标,求区域中心;mean(A)求每一列的均值;Round返回按指定位数进行四舍五入的数值
bw_center(1:sizer,2)=round(mean(c));%列坐标
rc=[r,c];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
四、运行结果
五、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)
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/118301835
- 点赞
- 收藏
- 关注作者
评论(0)