繁体   English   中英

单色增强-MATLAB

[英]Single Color Enhancement - MATLAB

我正在用Matlab编写RED交通灯检测器,并认为要做的第一件事就是增强输入RGB图像中的红色。

到目前为止,这是我使用的代码:

img_hsv = rgb2hsv(img_rgb);

h_channel = img_hsv(:,:,1);
s_channel = img_hsv(:,:,2);
v_channel = img_hsv(:,:,3);

s_channel = s_channel * 10;

img_hsv_enhanced = cat(3,h_channel,s_channel,v_channel);
img_rgb_enhanced = hsv2rgb(img_hsv_enhanced);

这是图像增强的结果:

在此处输入图片说明

我有3个问题:

  1. 到目前为止,我编写的代码是执行此操作的最佳方法吗? 即我已经增强了图像的饱和度,是否应该在其他频道上工作?

  2. 此代码导致所有3种颜色都得到增强,我如何才能选择性地仅增强红色通道?

  3. 使用函数hsv2rgb转换回rgb后,我的图像像素不再在[0,1]或[0,255]范围内,而是假定为十进制值,有时甚至为负数。 我该如何解决并将其恢复为[0 255]?

  1. 我认为饱和不是正确的方法,至少在最初不是这样。 如您所说,它增强了所有颜色,而不是红色。 但更重要的是,您可能需要区分与交通信号灯和其他物体相对应的红色斑块(图像中有一些出色的示例-路标,尾灯,行人灯),饱和度可能会导致信息丢失,从而可能有助于此过滤。
  2. 仅要增强红色通道,应使用RGB而不是HSV。 您可以执行以下操作:

     r_channel = img_rgb(:,:,1); r_channel = uint8(double(r_channel * 2)); 

    但是,您应该注意,这也可能导致您最重要的频道中的信息丢失,如上一项所述。

  3. 这是由于当您计算s_channel = s_channel * 10;时,饱和度值超过1引起的s_channel = s_channel * 10; 尝试添加s_channel = s_channel / max(s_channel(:)); 在那条线之后。 hsv2rgb的输出图像应在[0,1]范围内。 从那里通过重新缩放将其恢复为[0 255]。 确保将图像也恢复为原始数据类型(很可能是uint8): img_rgb_enhanced = uint8(img_rgb_enhanced * 255);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM