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

问题描述:

我试图用相同的感知亮度生成RGB颜色。如何计算具有相同感知亮度的RGB值

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

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

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

所以,为了使黄色的色调与蓝色一样暗淡,我可以简单地对每个RGB执行这种简单的计算组件:

  • dim_yellow =黄色* 0.0722/0.9278

但是,这样做相反的事时,因而“缩放”向上蓝色到相同的感知亮度为原始黄色,B成分明显超过1,这无法显示在电脑屏幕上。

我想从多余的B组件中缺失的亮度可以“重新分配”到R和G组件,伪造更亮的蓝色。那么计算这些最终RGB值的最佳一般方法是什么?

我建议您使用HSV颜色模型而不是RGB,因为您可以轻松地实现您只需修改值(亮度)组件的内容。 维基页面还包含如何将RGB转换为HSV和背部

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

+0

我知道HSL和HSV,但他们没有做什么你建议。具有完全饱和度和值的蓝色色调仍然会看起来是“更暗”或“更暗淡”,然后是具有完全饱和度和值的黄色色调。所以你的答案不能解决我的问题 – Askaga

+0

你是否尝试过像CIELAB这样的非线性空间? –