我想修改彩色图像像素的亮度值。修改规则如下:
Assumption: Luminance values are normalised in [0, 1], 1 = White
我尝试过MATLAB的rgb2hsv()
和hsv2rgb()
函数将RGB图像转换为HSV,提取亮度通道,修改它,然后将图像更改回RGB。但结果不是我需要的。
我需要的是:
我有以下问题:
答案 0 :(得分:2)
那么,
您的第一个陈述是相反的,因此如果同时应用它们将反转图像。我想你只是指出了你想采取的两种不同的行动。
关于你的问题:
当我降低白色像素的亮度时,它会变为红色 黑色。
这不可能发生。你在这里犯了一些错误。如果你只修改亮度,那么颜色不会改变(从白色到红色)。
是否有可能在不修改的情况下实现上述目标 HSV图像的任何其他频道,如Hue / Chrominance?
这是唯一正确的方法。不要修改其他频道。
RGB和HSV之间的转换是否无损?
它足够失败。如果应用以下命令,结果将处于数值稳定性的边缘:
im2 = hsv2rgb(rgb2hsv(im));
im=im2double(im);
sum(im2(:)-im(:))
ans =
6.9403e-14
实现这一目标的理想方法是什么?
如果你没有任何具体的理由不相信,这种方法就足够了。
答案 1 :(得分:1)
你只是使用了错误的色彩空间。检查wikipedia article关于HSV和HSL的信息,特别是右边的比较图。当V = 1时,你会得到任何纯粹的"颜色。当你在谈论亮度时,你应该采用HSL的亮度通道。 rgb2hls可在matlab文件交换中使用。
参见1,使用HSL然后你必须改变L通道
如果要更改为黑白,可以检测要在HSL图像中修改的像素,并设置RGB图像中的像素。 RGB,HSV和HSL的颜色空间匹配您只有精度错误。使用标准化颜色(0,1)和双精度值时,这些错误很小。