1

CIE XYZ 空间中颜色的坐标代表了我们眼睛中每种视锥细胞类型的刺激——因此是三刺激值。并非所有坐标都有(x, y, z)意义(例如,在任何锥体中都不能有负刺激),因此 XYZ 空间中所有可能组合的域将是一个 blob。有时您会发现描绘的 blob,例如在 Wikipedia 上

在此处输入图像描述

(斑点上的颜色毫无意义,因为它们实际上无法在标准 RGB 显示器上显示。)

我现在问自己为什么这个 blob 是有界的。难道我不能(x, y, z)在斑点中选择任何一点并用 缩​​放它alpha*(x,y,z,),就像我会启动一个光源一样,并且仍然在可见空间中吗?究竟是什么构成了这里的上限?

4

1 回答 1

1

上下文定义

维基百科图像中描绘的外表面表示由颜色匹配函数 (CMFS) 界定的体积。CMFS由 CIE 定义如下

等辐射功率的单色刺激的三刺激值

CIE 系统中等辐射功率光源的另一个名称是等能量或 E。

CIE XYZ 三色值本身由 CIE 定义

在给定的三原色系统中,与所考虑的刺激的颜色相匹配所需的 3 种参考颜色刺激的数量

这与Maxwell 和 Wright and Guild (1931) 的颜色匹配实验直接相关,可能超出了这个答案的范围。

外表面生成

外表面可能是使用方波光谱功率分布 (SPD) 构建的,即等能量光源的切片。Bruce Lindbloom 在此页面上有解释。

该方法是将具有各种带宽的方波 SPD 转换为 CIE XYZ 三色值,这将形成外表面。

假设有 5 个 bin,第一组 SPD 将是这样的:

1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

第二个:

1 1 0 0 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
1 0 0 0 1

第三:

1 1 1 0 0
0 1 1 1 0
0 0 1 1 1
1 0 0 1 1
1 1 0 0 1

ETC...

这是一个使用Color生成外表面点的 Python 片段:

import colour
import numpy as np


class NearestNeighbourInterpolator(colour.KernelInterpolator):
    def __init__(self, *args, **kwargs):
        kwargs['kernel'] = colour.kernel_nearest_neighbour
        super(NearestNeighbourInterpolator, self).__init__(*args, **kwargs)


def generate_square_waves(samples):
    square_waves = []
    square_waves_basis = np.tril(np.ones((samples, samples)))[0:-1, :]
    for i in range(samples):
        square_waves.append(np.roll(square_waves_basis, i))
    return np.vstack((np.zeros(samples), np.vstack(square_waves),
                    np.ones(samples)))


def XYZ_outer_surface(samples):
    XYZ = []
    wavelengths = np.linspace(colour.DEFAULT_SPECTRAL_SHAPE.start,
                            colour.DEFAULT_SPECTRAL_SHAPE.end, samples)

    for wave in generate_square_waves(samples):
        spd = colour.SpectralPowerDistribution(
            wave, wavelengths).align(
                colour.DEFAULT_SPECTRAL_SHAPE,  
                interpolator=NearestNeighbourInterpolator)
        XYZ.append(colour.spectral_to_XYZ(spd))

    return np.array(XYZ).reshape(len(XYZ), -1, 3)


# 43 is picked as number of samples to have integer wavelengths.
colour.write_image(XYZ_outer_surface(43), 'CIE_XYZ_outer_surface.exr')

和输出:

CIE XYZ 外表面点

于 2018-01-23T07:11:43.047 回答