修改图像的亮度值。一个门槛
Modifying luminance values of image wrt. a threshold
我想修改彩色图像像素的亮度值。修改规则如下:
Assumption: Luminance values are normalised in [0, 1], 1 = White
- 如果所选像素的亮度值高于阈值(例如 thresh=0.5,像素亮度值 = 0.8),则将其更改为较低的值(例如 0.3),因此当图像二值化时,该像素是显示为黑色像素。
- 类似地,如果所选像素的亮度值低于阈值,则会增加亮度,使其二值化为白色。
我试过 MATLAB 的 rgb2hsv()
和 hsv2rgb()
函数将 RGB 图像转换为 HSV,提取亮度通道,修改它,然后将图像改回 RGB。但是结果不是我想要的
我需要的是:
- 如果亮红色像素的亮度降低,它应该变成暗红色,所以它二值化为黑色。
- 如果白色像素的亮度降低,它应该变成黑色。
- 如果黑色像素的亮度增加,它应该变成白色。
我关注issues/questions:
- 当我降低白色像素的亮度时,它会变成红色而不是黑色。
- 是否可以在不修改 HSV 图像的任何其他通道的情况下实现上述目标,例如 Hue/Chrominance?
- RGB和HSV的转换是无损的吗?
- 实现此目标的理想方法是什么?
嗯,
你的第一个语句是相反的,所以如果同时应用它们会反转图像。我猜你只是指出了你想要采取的 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?
如果您没有任何具体理由不相信,这种方法就足够了。
你只是用错了颜色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 文件交换中是否可用。
看1,用HSL就得换L通道
因为要改成黑白,可以在HSL图像中检测要修改的像素点,在RGB图像中设置像素点。 RGB、HSV 和 HSL 的颜色 space 匹配你只有精度错误。使用标准化颜色 (0,1) 和双精度值时,这些错误很小。
我想修改彩色图像像素的亮度值。修改规则如下:
Assumption: Luminance values are normalised in [0, 1], 1 = White
- 如果所选像素的亮度值高于阈值(例如 thresh=0.5,像素亮度值 = 0.8),则将其更改为较低的值(例如 0.3),因此当图像二值化时,该像素是显示为黑色像素。
- 类似地,如果所选像素的亮度值低于阈值,则会增加亮度,使其二值化为白色。
我试过 MATLAB 的 rgb2hsv()
和 hsv2rgb()
函数将 RGB 图像转换为 HSV,提取亮度通道,修改它,然后将图像改回 RGB。但是结果不是我想要的
我需要的是:
- 如果亮红色像素的亮度降低,它应该变成暗红色,所以它二值化为黑色。
- 如果白色像素的亮度降低,它应该变成黑色。
- 如果黑色像素的亮度增加,它应该变成白色。
我关注issues/questions:
- 当我降低白色像素的亮度时,它会变成红色而不是黑色。
- 是否可以在不修改 HSV 图像的任何其他通道的情况下实现上述目标,例如 Hue/Chrominance?
- RGB和HSV的转换是无损的吗?
- 实现此目标的理想方法是什么?
嗯,
你的第一个语句是相反的,所以如果同时应用它们会反转图像。我猜你只是指出了你想要采取的 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?
如果您没有任何具体理由不相信,这种方法就足够了。
你只是用错了颜色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 文件交换中是否可用。
看1,用HSL就得换L通道
因为要改成黑白,可以在HSL图像中检测要修改的像素点,在RGB图像中设置像素点。 RGB、HSV 和 HSL 的颜色 space 匹配你只有精度错误。使用标准化颜色 (0,1) 和双精度值时,这些错误很小。