【问题标题】:Benchmark algorithm to change perceptive brightness?改变感知亮度的基准算法?
【发布时间】:2023-03-04 16:47:01
【问题描述】:

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

如果我有 RGB (120, 33, 213) 则 ( ... using ... (0.299*R + 0.587*G + 0.114*B) ....) 我得到 79.533 作为感知亮度,但我做到了没有办法将同一像素的亮度提高到 80,因为它有很多可能的值。

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

Formula to determine brightness of RGB color

但是这些算法是不可逆的。

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

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

谢谢-

【问题讨论】:

    标签: image algorithm colors rgb


    【解决方案1】:

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

    从你的例子:

    //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,17,107)。

    正如 Mark Ransom 在下面指出的那样,一旦您的某个值达到 255,您就必须做出选择。要增加超过该点的亮度,您将更改色调或饱和度(或两者)。他的回答here 很好地说明了两者的区别。

    【讨论】:

    • 这会很好,直到其中一个 RGB 值超过 255,然后您需要另一种策略。您可能会从 this answer 获得一些帮助,但需要针对所涉及的不同权重进行调整。
    • 好点,色调或饱和度必须在那个点改变。已编辑。
    • 我也尝试过,但不幸的是,当您使用比率时,RGB 的工作非常奇怪。虽然这适用于亮度,但使用此方法会失去其颜色变化的饱和度或色调。我已经放弃了这个选项,并开始使用以下算法使用 RGB 到 HSL 转换,它工作得非常整洁:1 - 转换 RGB -> HSL 2 - 将 L 更改为所需的值 3 - 转换 HSL -> RGB
    • 虽然这个过程看起来很慢,但是自定义实现 RGB 到 HSL 让我了解了如何从 RGB 中提取纯颜色。色调效果很好。对于那些感兴趣的人:“在 RGB 颜色中,对于每对 2 种颜色(例如 RG、RB、GB),而第 3 种颜色为“0”,如果我们将一种颜色的值固定为 255 并将其他颜色的值更改为“C *255/60"(其中 C 从 1 变为 60)我们得到纯色或纯色相。
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 2012-12-29
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多