Colors 如何判断xyY颜色是否在CIE 1931色域内?

Colors 如何判断xyY颜色是否在CIE 1931色域内?,colors,Colors,我试图用数学来绘制CIE 1931的色域 我使用Y固定为1.0的xyY颜色,然后将x和Y从0.0更改为1.0 如果我将得到的颜色绘制为图像(例如,(x,y)的像素是我的XYY颜色转换为RGB),我就可以看到其中的CIE 1931色域中的一个漂亮的图片,像这样: xyY从0.0到1.0: 现在我想要经典的舌形图像,所以我的问题是:如何剔除CIE 1931色域范围之外的像素 例如,我如何判断我的xyY颜色是否在CIE 1931颜色范围内/之外?您可以使用和颜色。是否在可见光谱范围内定义: >>将n

我试图用数学来绘制CIE 1931的色域

我使用Y固定为1.0的xyY颜色,然后将x和Y从0.0更改为1.0

如果我将得到的颜色绘制为图像(例如,(x,y)的像素是我的XYY颜色转换为RGB),我就可以看到其中的CIE 1931色域中的一个漂亮的图片,像这样:

xyY从0.0到1.0:

现在我想要经典的舌形图像,所以我的问题是:如何剔除CIE 1931色域范围之外的像素

例如,我如何判断我的xyY颜色是否在CIE 1931颜色范围内/之外?

您可以使用和
颜色。是否在可见光谱范围内
定义:

>>将numpy作为np导入
>>>在可见光谱范围内(np.数组([0.3205,0.4131,0.51]))
数组(True,dtype=bool)
>>>a=np.数组([[0.3205,0.4131,0.51],
...               [-0.0005, 0.0031, 0.001]])
>>>在可见光谱范围内(a)
数组([True,False],dtype=bool)

请注意,此定义需要CIE XYZ三刺激值,因此您必须使用
color.xyY_to_XYZ
definition将CIE xyY颜色空间值转换为XYZ。

我在搜索稍有不同但相关的问题时遇到了这个问题,我立即注意到顶部的渲染。这和我几个小时前制作的渲染是一样的,试图弄明白为什么它没有意义,部分原因是我来到这里

对于读者:渲染是从
{x转换时的结果∈ [0,1],y∈ [0,1],Y=1}
XYZ
,将该颜色转换为
sRGB
,然后将各个组件夹紧到
[0,1]

乍一看,它看起来还不错。再看一眼,它看起来像是。。。它似乎不像预期的那样饱和,并且在奇数角处有可见的过渡线。仔细观察后,很明显,初选之间并没有顺利过渡。例如,红色和蓝色之间的大部分范围都是洋红色,
R
B
几乎在它们之间的整个距离上都是100%。然后,如果添加复选框以跳过绘制任何具有超出范围组件的颜色,而不是夹紧,则所有颜色都将消失。这完全是五花八门。发生了什么事

我想我已经对色度学的一小部分有了至少80%的了解,所以我把它放在这里,大大简化了,供其他可能觉得有趣或有用的人参考。我也试着回答这个问题

(⚠️ 在我开始之前,有一个重要的注意事项:
xyY
空间中的有效RGB显示颜色可以在CIE 1931 2°标准观察者的边界之外。sRGB的情况并非如此,但显示P3、Rec.2020、CIE RGB和其他宽色域的情况就是如此。这是因为三个原色需要通过自身相加到白点因此,即使是单色原色,与同等照明下的相同波长相比,也必须具有难以置信的非自然发光。)

色度图的着色 xy色度图不仅仅是穿过
xyY
空间的切片。它本质上是二维的。
xy
平面中的一个点表示色度,除了亮度,因此在存在颜色的情况下,它尽可能只表示色度,而不是任何特定颜色。通常情况下,颜色看起来是最亮、最饱和的颜色,或者是显示器颜色空间中最接近的颜色,但这是一个任意的设计决定

这就是说:在某种程度上,绘制的说明性颜色必然是虚构的,就像给选举地图上色纯粹是一个数据可视化的问题一样:方便理解。只是,在这种情况下,我们使用颜色来可视化色度学的一个方面,所以很容易将这两个方面合并起来

当我们考虑在 XYY 空间中可见光谱的完整3D形状时,颜色的虚假性和必要性变得明显。经典的光谱轨迹(“马蹄”)很容易被视为准直布罗陀体积的基础,在光谱轨迹处最宽,在
{Y=1}
处变窄到顶点(白点)。如果将其视为自上而下的投影,则位于光谱轨迹上和附近的颜色将非常暗(尽管仍然是该色度中可能最亮的颜色),并且朝向中心逐渐发光。如果将其视为
xyY
体积的一部分,通过
Y
的特定值,颜色将同样发光,但整体上会变得更亮,并且边界形状会随着
Y
的增加而不均匀地收缩,直到完全消失。就我所知,这两种可能性都没有太多实际用途,尽管它们可能很有趣

相反,图表是由内而外着色的:绘制的色域以最大强度着色(每个主色域最亮,然后是内部的线性混合),色域外的颜色从内部色域三角形投影到光谱轨迹。这很烦人,因为您不能简单地使用矩阵变换将
xy
平面上的点转换为一种合理的颜色,但不幸的是,就实际传达有用且有些准确的信息而言,这似乎是不可避免的

(澄清一下:实际上可以将一个色度点移动到sRGB空间中,并用最明亮的饱和sRGB颜色逐像素地为色度图着色,这比简单的矩阵变换更复杂。为此,首先移动三坐标xyz色度