如何计算具有相同感知亮度的 RGB 值

Ask*_*aga 5 language-agnostic math rgb colors

我正在尝试生成具有相同感知亮度的 RGB 颜色。

函数 R*0.2126+ G*0.7152+ B*0.0722 据说可以计算给定 RGB 颜色的感知亮度(或等效灰度颜色)。

假设我们对所有 RGB 值使用区间 [0,1],我们可以计算以下内容:

  • 黄色 = RGB(1,1,0) => 亮度=0.9278
  • 蓝色 = RGB(0,0,1) => 亮度=0.0722

因此,为了使黄色色调与蓝色色调一样暗淡,我可以简单地对每个 RGB 分量的黄色执行以下简单计算:

  • 暗淡黄色 = 黄色 * 0.0722 / 0.9278

然而,当做相反的事情,从而将蓝色“缩放”到与原始黄色相同的感知亮度时,B分量明显超过1,这无法在计算机屏幕上显示。

我猜想,多余的 B 分量所缺失的亮度可能会“重新分配”到 R 和 G 分量,从而呈现出更亮的蓝色。那么计算最终 RGB 值的最佳通用方法是什么?

Dmi*_*nov 0

我建议您使用HSV颜色模型而不是 RGB,因为您只需修改值(亮度)组件即可轻松实现您想要的效果。wiki 页面还包含如何将 RGB 转换为 HSV 并返回

编辑:尝试使用CIELAB色彩空间,因为它接近人类的视觉

  • 我了解 HSL 和 HSV,但它们不按照您的建议执行。具有完全饱和度和明度的蓝色色调仍然会比具有完全饱和度和明度的黄色色调显得“更暗”或“更暗淡”。所以你的回答并不能解决我的问题 (3认同)