为什么1931年CIE xyY色度图中的颜色是白色的?

时间:2019-06-19 13:33:30

标签: colors rgb srgb gamut chromaticity

当我们查看在xyY空间的xy平面内表示的1931年CIE色度图时,它会在亮度点(如此处突出显示的D65点)上渲染 white 颜色(或接近白色)。 E

1931 cie chromaticity diagram

但是为什么会这样呢? D65的点应该表示为x = 0.33, y = 0.33。给定公式Y = 1 - x - y,这是否意味着Y为0.34?

根据我发现的every converter0.33,0.33,0.34处的sRGB相关系数或xyY为158.4182, 155.5676, 176.8565。这是浅棕色,而不是在每张1931年色度图中看到的近白色。

似乎我需要缩放Y才能获得每个通道的正确亮度值。

使用Y = 1 - x - y公式,我的图表看起来像一个静音图表:

Wrong chromaticity diagram

我不明白什么?

修改

设置Y = 1,该图看起来如下图所示。

enter image description here

编辑

现在看起来像下面的

enter image description here

2 个答案:

答案 0 :(得分:1)

CIE 1931的白点不在x=1/3y=1/3中,白色不是x=1/3y=1/3Y = 1/3

根据Wikipedia

  

D65的CIE 1931色彩空间色度坐标是
  x = 0.31271
  y = 0.32902

     由于D65代表白光,因此它的坐标也是白点,对应于6504 K的相关色温。在HDTV系统中使用的709将CIE 1931坐标截断为x = 0.3127,y = 0.329。

x = 1/3,y = 1/3的含义不同:

  

在波长方面具有平坦功率谱的光(每1 nm间隔相等的功率)对应于点(x,y)=(1/3,1/3)。

重要提示: D65不是“平坦功率谱”

计算机系统(PC)使用sRGB颜色格式。
在sRGB中,颜色分量在 gamma 之后(与应用线性曲线的CIE 1931相反)。

在xyY颜色空间中,x,y是色度,Y是亮度。
x=0.31271y=0.32902是没有亮度的色度,并应用灰度色度。
对于白色,请使用Y = 1


  

记录HDTV系统中使用的709会将CIE 1931坐标截断为x = 0.3127,y = 0.329

让我们计算x=0.3127y=0.329Y = 1的sRGB:

X = (Y/y)*x = 0.95046
Y = 1
Z = Y/y*(1-x-y) = 1.0891

Rlinear 3.240600 -1.537200 -0.498600 X 0.99984
Glinear = -0.968900 1.875800 0.041500 * Y = 1.00010
Blinear 0.055700 -0.204000 1.057000 Z 1.00007

假设结果为1, 1, 1

上一阶段正在应用伽玛将“线性sRGB”转换为sRGB。
由于所有值均为1,因此结果为sRGB = 1, 1, 1


我们可以为Y = 0.2重复计算,结果是线性sRGB = 0.2, 0.2, 0.2

应用伽玛:
gamma(u) = 1.055*u^(1/2.4) - 0.055代表u > 0.0031308

1.055*0.2^(1/2.4) - 0.055 = 0.48453
因此sRGB = 0.48453, 0.48453, 0.48453

要转换到标准范围[0,255](每个颜色通道一个字节),我们需要按255缩放并舍入结果:RGB888 = 124, 124, 124

答案 1 :(得分:1)

色度图的解释有些不精确。

CIE xyY是3D图形。通常,我们只看到一个投影(通常不是相交的平面,而只是一个投影)。

一个常见的投影是“加法” xy色度图。您可能会注意到它,因为它的边框处为黄色,而中心附近处为白色。在这样的投影中,您将显示给定色度x,y的最大Y。

公用图也是“减法”图,就像您的第二张图一样。没有黄色,没有白色。该图仅包含基色的减色混合,因此较亮的颜色是基色,并且它们之间变暗。

注意:通常,色度图也会扩展到整个色域之外,因此像您的图一样,原色不再是真正的原色,白色也不能是白色,黄色也可以被切掉。您可以首先尝试仅选择基元之间的三角形,然后进行扩展。调试起来更容易。

白色将恰好位于3D图形的顶部。在第一种情况下,采用色域的外表面,因此得到白色。在第二种情况下,您会在图形内获得一个平面,因此您永远不会变白。但这仍然是xy色度图。

对于您的情况,我认为您剪切了颜色值(注1 ),这是错误的:通过剪切,您将无法获得正确的色度(通过剪切,一个色度值将被删除)颜色,因此无法保持通道之间的比例)。在进行归一化(通道值范围为0至255)之前,应使用浮点数或更大的数字进行计算。 [归一化(在这种情况下):保持色度,但调整Y以使最终颜色在色域内]。实际上:您在RGB之间获得最大值,并将每个通道乘以255/max(R,G,B)

注意:这不是完全正确/精确。上面的归一化应该在线性空间(线性混合光)中进行,并且只有在归一化之后,才应使用伽马函数。另一方面,在上面的图中,我们没有为每个点x,y提供正确的颜色。我们只能在(色域)三角形上正确地做到这一点。通过将屏幕上的可用颜色扩展到完整的xz色度,我们会产生错误/不确定。因此,在进行伽玛校正之前或之后的规范化并没有太大的意义(而且只是稍微改变了颜色)。

注1:从评论开始:这是不正确的(剪裁),OTOH是蓝色(深蓝色)的极小部分,而洋红色和青色过多,让我考虑了一些数字问题)