赞
踩
颜色空间:通常拍摄的图像是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)
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.红绿灯识别是我一门课的实验,在这里记录一个初学者的逼逼叨叨,应该还会有后续,佛系随缘更吧;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。