Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 改变感知亮度的基准算法?_Image_Algorithm_Colors_Rgb - Fatal编程技术网

Image 改变感知亮度的基准算法?

Image 改变感知亮度的基准算法?,image,algorithm,colors,rgb,Image,Algorithm,Colors,Rgb,改变RGB像素感知亮度的基准算法是什么。例如: 如果我有RGB(120,33,213),那么(…使用…(0.299*R+0.587*G+0.114*B)我得到79.533作为感知亮度,但我没有办法将同一像素的亮度提高到80,因为它有许多可能的值 我已经寻找了一段时间的解决方案,但没有得到它。有一些算法可以计算亮度,例如: 但这些算法是不可逆的 此外,除非有人能纠正我,否则我不会考虑使用HSL或HSV作为正确的方法 编辑:使用HSL颜色空间,我可以在很大程度上保持颜色的同时控制亮度,但我想知道是

改变RGB像素感知亮度的基准算法是什么。例如:

如果我有RGB(120,33,213),那么(…使用…(0.299*R+0.587*G+0.114*B)我得到79.533作为感知亮度,但我没有办法将同一像素的亮度提高到80,因为它有许多可能的值

我已经寻找了一段时间的解决方案,但没有得到它。有一些算法可以计算亮度,例如:

但这些算法是不可逆的

此外,除非有人能纠正我,否则我不会考虑使用HSL或HSV作为正确的方法

编辑:使用HSL颜色空间,我可以在很大程度上保持颜色的同时控制亮度,但我想知道是否有更好的方法


谢谢-

您不需要反转亮度方程,只需计算出与所需亮度的比率即可

从你的例子来看:

//target luminance = 80

srcR = 120
srcG = 33
srcB = 213
srcLum = 79.533

destLum = 80
ratio = (destLum / srcLum) = 1.0058717...

destR = (srcR * ratio) = 120.705
destG = (srcG * ratio) = 33.194
destB = (srcB * ratio) = 214.251
您必须决定如何对它们进行四舍五入以获得int值,但这是一般的想法。不过,从79.5升到80并没有太大变化,所以你不会看到太多变化。如果你到了40岁,你会得到RGB(60,17107)


正如MarkRansom在下面指出的,一旦您的一个值达到255,您就必须做出选择。要增加超过该点的亮度,您可以更改色调或饱和度(或同时更改两者)。他的回答很好地显示了两者之间的差异。

这将非常有效,直到其中一个RGB值超过255,然后您需要另一种策略。你可能会从中得到一些帮助,但它需要调整不同的权重。好的一点,色调或饱和度必须在这一点上改变。编辑。我也试过,但不幸的是,RGB的工作非常奇怪,当你使用的比率。虽然这对亮度正确有效,但使用此方法会降低其颜色变化饱和度或色调。我已经放弃了这个选项,转而使用以下算法使用RGB到HSL的转换,它的工作非常灵活:1-转换RGB->HSL 2-将L更改为所需的值3-转换HSL->RGB虽然这个过程看起来很慢,但RGB到HSL的自定义实现让我了解了如何提取纯色。色调从RGB和它的作品伟大。对于那些感兴趣的人:“在RGB颜色中,对于每对2种颜色(例如RG、RB、GB),第三种颜色为“0”,如果我们将一种颜色的值固定为255,并将另一种颜色的值更改为“C*255/60”(其中C从1更改为60),我们将得到纯颜色或纯色调”。