修改图像的亮度值。一个门槛

时间:2015-01-21 07:23:22

标签: matlab image-processing

我想修改彩色图像像素的亮度值。修改规则如下: Assumption: Luminance values are normalised in [0, 1], 1 = White

  1. 如果所选像素的亮度值高于阈值(例如阈值= 0.5,像素亮度值= 0.8),则将其更改为较低值(例如0.3),以便在图像被二值化时,该像素显示为黑色像素。
  2. 同样,如果所选像素的亮度值低于阈值,则亮度会增加,以便将其二进制化为白色。
  3. 我尝试过MATLAB的rgb2hsv()hsv2rgb()函数将RGB图像转换为HSV,提取亮度通道,修改它,然后将图像更改回RGB。但结果不是我需要的。

    我需要的是:

    1. 如果亮红色像素的亮度降低,它应该变为深红色,因此它会变成黑色。
    2. 如果白色像素的亮度降低,则应该变为黑色。
    3. 如果黑色像素的亮度增加,则应该变为白色。
    4. 我有以下问题:

      1. 当我降低白色像素的亮度时,它会变为红色而不是黑色。
      2. 是否有可能在不修改HSV图像的任何其他频道的情况下实现上述目标,如Hue / Chrominance?
      3. RGB和HSV之间的转换是否无损?
      4. 实现这一目标的理想方法是什么?

2 个答案:

答案 0 :(得分:2)

那么,

您的第一个陈述是相反的,因此如果同时应用它们将反转图像。我想你只是指出了你想采取的两种不同的行动。

关于你的问题:

  

当我降低白色像素的亮度时,它会变为红色   黑色。

这不可能发生。你在这里犯了一些错误。如果你只修改亮度,那么颜色不会改变(从白色到红色)。

  

是否有可能在不修改的情况下实现上述目标   HSV图像的任何其他频道,如Hue / Chrominance?

这是唯一正确的方法。不要修改其他频道。

  

RGB和HSV之间的转换是否无损?

它足够失败。如果应用以下命令,结果将处于数值稳定性的边缘:

im2 = hsv2rgb(rgb2hsv(im));
im=im2double(im);
sum(im2(:)-im(:))

ans =

   6.9403e-14
  

实现这一目标的理想方法是什么?

如果你没有任何具体的理由不相信,这种方法就足够了。

答案 1 :(得分:1)

  1. 你只是使用了错误的色彩空间。检查wikipedia article关于HSV和HSL的信息,特别是右边的比较图。当V = 1时,你会得到任何纯粹的"颜色。当你在谈论亮度时,你应该采用HSL的亮度通道。 rgb2hls可在matlab文件交换中使用。

  2. 参见1,使用HSL然后你必须改变L通道

  3. 如果要更改为黑白,可以检测要在HSL图像中修改的像素,并设置RGB图像中的像素。 RGB,HSV和HSL的颜色空间匹配您只有精度错误。使用标准化颜色(0,1)和双精度值时,这些错误很小。