为什么计算 RGB 的平均值不产生像素的亮度?

Eya*_*yad 2 rgb image colors image-processing

我正在为我打算做的一个小项目做一些研究,其中包括确定像素的亮度。我想到的第一个想法就是计算,brightness = (R + G + B)/3但后来我偶然发现了这个答案,它有非常不同和特定的方程。为什么平均 RGB 值不起作用?

Cri*_*ngo 5

我们的眼睛对绿光更敏感,因此绿色通道中的 255 比红色或蓝色通道中的 255 导致更大的亮度感知。

国际照明委员会 (CIE) 在 1931 年创建了两个标准色彩空间(CIE 1931 XYZ 和 CIE 1931 RGB 色彩空间),源自 1920 年代进行的感知实验。这些实验和色彩空间是当今所有色度学的基础*。

在 CIE 1931 RGB 色彩空间中,亮度方程 Y 定义为:

Y = ( 0.17697 R + 0.81240 G + 0.01063 B ) / 0.17697
Run Code Online (Sandbox Code Playgroud)

但是,RGB 中 Y 的定义取决于用于 R、G 和 B 的原色(例如 LCD 显示器发出的三种纯色)以及它们相加产生的白色的颜色。例如,对于标准 D65 白点和来自Rec. 709sRGB,RGB 到 Y 的转换如下:

Y = 0.2126 R + 0.7152 G + 0.0722 B
Run Code Online (Sandbox Code Playgroud)

这个方程对绿色的权重大约是蓝色的十倍。这与已知的颜色感知相匹配,并解释了例如为什么在计算机屏幕上,黑色背景上的绿色文本很容易阅读,而相同背景上的蓝色文本更难阅读。

如果您想了解有关不同颜色空间的更多信息,以及如何在它们之间进行转换,您应该阅读Poynton 的颜色常见问题解答


*从那以后,人们对色彩感知有了很多了解,并且已经发布了 CIELAB 和 CIELUV 等新色彩空间,但 CIE XYZ 仍然是它们的基础。