matlab——红绿灯颜色及数字识别(一)

实验总结:红绿灯颜色以及数字识别(一):颜色识别

一、知识背景

颜色空间:通常拍摄的图像是RGB颜色空间,图片的像素点是由R、G、B分量来表示肉眼所看到的颜色。

比如:红色为(255,0,0),黄色为(255,255,0),查找颜色对应的RGB值可查阅相关资料。(个人jio得阔以理解为色彩由红绿蓝三种颜色调和)*

这里附上一个链接: 常用颜色的RGB值.

进行红绿灯识别时,需要转换到HSV空间:H(色调)、S(饱和度)、V(亮度)来进行信号灯识别。(个人认为转到HSV空间更便于由亮度对信号灯区域进行识别)

二、代码实现及注释

1.读入图像并将其从RGB空间转为HSV空间
代码如下:

%% 读入图像并将其从RGB空间转为HSV空间
src=imread('F:\王美丽\图片\红绿灯\6.jpg');

light_hsv=rgb2hsv(src);% rgb2hsv:色调、对比度、亮度
H=light_hsv(:,:,1);
S=light_hsv(:,:,2);
V=light_hsv(:,:,3);

figure;% 作图
subplot 221;
imshow(src);
title('原始图像');
subplot 222;
imshow(H);
title('H分量');
subplot 223;
imshow(S);
title('S分量');
subplot 224;
imshow(V);
title('V分量');

结果如下:
可以通过鼠标观察信号灯区域的HSV值(Index)原图以及HSV分量图
2.对红绿灯颜色设置HSV阈值范围
可以通过对H、S、V三个分量上设置阈值对红绿灯进行范围区分,信号灯的像素点在哪个范围的点最多,信号灯就为对应的颜色。

对于阈值的设置:可通过观察HSV分量或者查表得到(不同环境下的HSV分量的阈值有不同)
代码如下:

% 设置阈值范围
lightsrc0=zeros(size(src));% 设置lightsrc0来对三色范围像素点进行存储
[rowG,colG]=ind2sub(size(light_hsv),find(H>0.4 & H<0.55 & S>0.16 & S<1 & V>0.9));% 绿色阈值范围
[rowR,colR]=ind2sub(size(light_hsv),find(H>0.01 & H<0.2 & S>0.08 & S<1 & V>0.9));% 红色阈值范围
[rowY,colY]=ind2sub(size(light_hsv),find(H>0.09 & H<0.4 & S>0.16 & S<1 & V>0.8));% 黄色阈值范围

lightcolor=[size(rowG,1),size(rowR,1),size(rowY,1)];%各颜色范围像素点

if max(lightcolor)==size(rowG,1)% 找包含最多像素点的颜色阈值范围,输出结果
    for i=1:length(rowG)
        lightsrc0(rowG(i),colG(i))=src(rowG(i),colG(i));% 将对应颜色区域进行提取
    end
    figure;
    imshow(src);
    title('信号灯为绿色');% 绿色范围像素点最多
else
    if max(lightcolor)==size(rowR,1)
        for i=1:length(rowR)
            lightsrc0(rowR(i),colR(i))=src(rowR(i),colR(i));
        end
        figure;
        imshow(src);
        title('信号灯为红色');
    else
        for i=1:length(rowY)
            lightsrc0(rowY(i),colY(i))=src(rowY(i),colY(i));
        end
        figure;
        imshow(src);
        title('信号灯为黄色');
    end
end

结果如下:
图片的标题为信号灯的颜色

三、作者有话说

1.这是本人第一次写,有许多不足的地方请温柔指出,交流促使进步;

2.悄咪咪说一句,这个格式是真的难调啊,我现在都不清楚如何段前空两格,sos;

3.红绿灯识别是我一门课的实验,在这里记录一个初学者的逼逼叨叨,应该还会有后续,佛系随缘更吧;

4.后续:matlab——红绿灯颜色及数字识别(二)

  • 33
    点赞
  • 170
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值