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

Modifying luminance values of image wrt. a threshold

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

  1. 如果所选像素的亮度值高于阈值(例如 thresh=0.5,像素亮度值 = 0.8),则将其更改为较低的值(例如 0.3),因此当图像二值化时,该像素是显示为黑色像素。
  2. 类似地,如果所选像素的亮度值低于阈值,则会增加亮度,使其二值化为白色。

我试过 MATLAB 的 rgb2hsv()hsv2rgb() 函数将 RGB 图像转换为 HSV,提取亮度通道,修改它,然后将图像改回 RGB。但是结果不是我想要的

我需要的是:

  1. 如果亮红色像素的亮度降低,它应该变成暗红色,所以它二值化为黑色。
  2. 如果白色像素的亮度降低,它应该变成黑色。
  3. 如果黑色像素的亮度增加,它应该变成白色。

我关注issues/questions:

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

嗯,

你的第一个语句是相反的,所以如果同时应用它们会反转图像。我猜你只是指出了你想要采取的 2 个不同的行动。

关于您的问题:

When I decrease the luminance of a white pixel, it turns red instead of black.

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

Is it possible to achieve the above mentioned goals without modifying any other channels of the HSV image, like Hue/Chrominance?

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

Is the conversion between RGB and HSV loss-less?

够无损的。如果您应用以下命令,结果将处于数值稳定的边缘:

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

ans =

   6.9403e-14

What would be an ideal way to achieve this?

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

  1. 你只是用错了颜色space。检查 wikipedia article about HSV and HSL, especially the comparison graphic on the right. With V=1 you get any "pure" colour. As you are talking about luminance you should probably take the lighness channel of HSL. rgb2hls 在 matlab 文件交换中是否可用。

  2. 看1,用HSL就得换L通道

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