【红绿灯识别】基于matlab红绿灯识别【含Matlab源码 1068期】

319 阅读3分钟

一、简介

红绿灯分为导向灯和圆形灯。一般圆形灯在路口只有一盏灯,红灯亮时禁止直行和左转,可以右转弯。导向灯市带有箭头的,可以有两个或三个,分别指示不同方向的行车和停车。按指示的灯即可,没有右转向导向灯的情况下可以视为可以右转。

RGB颜色空间以R(Red:红)、G(Green:绿色)、 B(Blue:蓝)三种基本色为基础,进行不同程度的叠加,产生丰富而广泛的颜色,所以俗称三基色模式。在大自然中有无穷多种不同的颜色,而人眼只能分辨有限种不同的颜色,RGB棋式可表示一千六百多万种不同的颜色,在人跟看起来它非常接近大自然的颜色,故又称为自然色彩模式。红绿蓝代表可见光谱中的三种基木颜色或称为三原色,每一种颜色按其亮度的不同分为256个等级。当色光三原色重叠时,由于不同的混色比例能产生各种中间色。

RGB颜色空间最大的优点就是直观,容易理解。缺点是R、G、B这三个分量是高度相关的,即如果一个颜色的某一个分量发生了一定程度的改变,那么这个相色很可能要发生改变;人眼对于常见的 红绿蓝三色的敏感程度是不一样的,因此RGB颜色空间的均匀性非常差,且两种颜色之间的知觉差异色差不能表示为改颜色空间中两点间的距离,但是利用线性或非线性变换,则可以从RGB颜色空间推导出其他的颜色特征空间。

二、源代码

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];
    

三、运行结果

在这里插入图片描述
在这里插入图片描述

四、备注

版本:2014a
完整代码或代写加1564658423