【问题标题】:Single Color Enhancement - MATLAB单色增强 - MATLAB
【发布时间】:2014-05-15 18:42:14
【问题描述】:

我正在 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. 到目前为止,我编写的代码是不是最好的方法? IE。我增强了图像的饱和度,我应该在不同的通道上工作吗?

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

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

【问题讨论】:

  • 也许从这里开始阅读:mathworks.de/discovery/image-enhancement.html。谈到图像增强,我会期待一些不同于过饱和的东西。
  • @Daniel - 感谢您的链接,我已经浏览过了。我正在寻找有关此特定主题的专家的建议,这些链接非常笼统。
  • 为什么图像过度饱和?我不明白您的方法的意图,因此我只能建议使用所描述的方法之一。

标签: image matlab image-processing colors computer-vision


【解决方案1】:
  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 / max(s_channel(:));。 hsv2rgb 的输出图像应在 [0,1] 范围内。从那里通过重新缩放将其恢复到 [0 255]。请务必将图像恢复为原始数据类型(很可能是 uint8):img_rgb_enhanced = uint8(img_rgb_enhanced * 255);

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 2014-10-10
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多