实验总结:红绿灯颜色以及数字识别(二):提取信号灯区域
一、知识背景
这里放一些链接来供查阅参考:
1.连通量函数;
Matlab中bwlabel函数的使用
2.膨胀、腐蚀;
形态学操作:膨胀与腐蚀;
matlab中的腐蚀与膨胀,MATLAB中腐蚀、膨胀、开运算和闭运算;
3.imcrop函数;
MATLAB中imcrop函数
二、代码实现及注释
1.对有效部分的提取(大小过滤);
这里为红绿灯颜色以及数字识别(一)颜色识别的代码的续写:进一步实现对信号灯进行提取。
lightsrc0提取到的颜色部分可能不止存在于信号灯范围,周围环境可能也存在在信号灯筛选范围内的像素点,因此需要对信号灯部分进行一步筛选。
对提取的部分信号灯对应颜色部分进行二值化、膨胀、腐蚀处理。二值化将图像变为黑白使后续处理变得更加简单。膨胀、腐蚀处理让提取的部分比较散落的点相连通(信号灯实际提取有点像芝麻饼,信号灯上的像素点是离散的,芝麻饼上的芝麻也并不是都连在一起的)。
%lightsrc0是前面(一)的链接中用来对三色范围像素点进行存储
lightsrc=rgb2gray(lightsrc0);% 颜色部分二值化、膨胀、腐蚀(不同结构元)(闭运算)
T=graythresh(lightsrc);
lightsrc=im2bw(lightsrc,T);
se1=strel('disk',4);
lightsrc=imdilate(lightsrc,se1);
se2=strel('disk',4);
lightsrc=imerode(lightsrc,se2);
figure;
subplot 121;
imshow(lightsrc0);
title('提取对应颜色部分');
subplot 122;
imshow(lightsrc);
title('提取颜色部分并进行二值化、闭运算后的图像');
效果如下:(放大能看到右边有一个小白点,即周围环境在信号提取范围内的点)
2.连通域判断提取;
信号灯仍是提取后图像的主体,通过对连通量的像素点大小进行约束能够筛选出信号灯部分(这个约束范围也是需要根据图像进行调整)。
lightsrc1=lightsrc;%进行对比比较存档
[L1,n1]=bwlabel(lightsrc);% 信号灯提取,采用连通分量,n1为连通分量个数
lightx=zeros();%为下一步的信号灯区域裁剪做准备
lighty=zeros();
width=zeros();
height=zeros();
j=1;
for k=1:n1%对连通分量的范围进行约束
[r,c]=find(L1==k);
if size(r,1)<300 || size(r,1)>6000% 信号灯范围是300-6000
for i=1:size(r,1)
lightsrc(r(i),c(i))=0;%在信号灯范围之外,则将该连通分量置黑
end
else
lightx(j)=min(c);
lighty(j)=min(r);
width(j)=max(c)-min(c);
height(j)=max(r)-min(r);
j=j+1;
end
end
[L2,n2]=bwlabel(lightsrc);% 约束后的连通分量(信号灯)
figure;
subplot 121;
imshow(lightsrc1);
title('范围约束前');
subplot 122;
imshow(lightsrc);
title('范围约束后');
效果如下:(能看到右边的小白点消失)
3.信号灯部分截取;
因为后续会对信号灯进行形态识别(数字、方向),所以需要对每一个信号灯部分进行单独的截取。
(如果前面约束没有做好,后续的裁剪也会将非信号灯部分裁剪出来,提高后续的难度)
for k=1:n2%遍历连通域,对每个连通域都进行裁剪)
correct=0;
light=imcrop(src,[lightx(k) lighty(k) width(k) height(k)]);% 分割
lightgray=imcrop(lightsrc,[lightx(k) lighty(k) width(k) height(k)]);% 分割
[a,b]=size(lightgray);
figure;
subplot 131;
imshow(src);
title('原始图像');
subplot 132;
imshow(lightgray);
title('对连通区域进行分割');
subplot 133;
imshow(light);
title('分割图像在原图所对应图像');
效果如下:
三、作者有话说
1.完成红绿灯识别关键点个人认为在于对HSV分量进行合适的范围约束(与拍摄环境有一定关系);
2.HSV分量的约束范围,暂时未找到能够自适应的方法,所以我设计的是针对于我所拍摄的照片所使用的范围;
3.到这里已经完成信号灯红绿灯颜色识别以及信号灯提取,后续将会对红绿灯的形状进行进一步识别,随缘佛系更;
Original: https://blog.csdn.net/foxisantu/article/details/119507315
Author: 佛系三土
Title: matlab——红绿灯颜色及数字识别(二)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/633363/
转载文章受原作者版权保护。转载请注明原作者出处!