sRGB 恒亮度条纹

sRGB constant luminance stripe

我想创建一个具有恒定感知亮度的色谱。

这是我目前的尝试 (here's the codesandbox):

代码

正如我在图片中注释的那样,如果你问我的话,从底部开始的第二个条纹是相当亮的蓝色。现在这可能是因为

我认为更有可能是我犯了一些错误或者没有理解这里的某些内容。

我稍微调整了 sRGB 亮度值以获得接近我预期的底部条纹(虽然蓝色可能仍然有点亮)。

所以我的问题是:

RGB 色彩空间在感知上不是统一的空间。生成感知均匀的色调条纹需要使用感知均匀的色彩空间或颜色外观模型,例如 ICtCpCAM16.

使用Colour,可以实现如下:

import colour
import numpy as np


def colour_stripe(S=1, samples=360):
    H = np.linspace(0, 1, samples)

    HSV = colour.utilities.tstack([H, np.ones(samples) * S, np.ones(samples)])
    RGB = colour.HSV_to_RGB(HSV)
 
    return RGB[np.newaxis, ...]


RGB = np.resize(colour_stripe(), [36, 360, 3])

colour.plotting.plot_image(colour.cctf_encoding(RGB * 0.5));

CAM16 = colour.convert(RGB, 'RGB', 'CAM16')
CAM16_UL = colour.CAM16_Specification(
    np.full(CAM16.J.shape, 0.5), CAM16.C, CAM16.h)

RGB_PU = colour.convert(CAM16_UL, 'CAM16', 'RGB')

colour.plotting.plot_image(colour.cctf_encoding(RGB_PU));

请记住,这里的假设是 sRGB 显示校准和观看条件。

这取决于您希望“感知亮度”建模的内容。当您考虑 Helmholtz-Kohlrausch 效果时,不是由 CAM02 建模的,您应该看到您需要决定一个模型或您希望模型适合的一系列颜色外观效果。

https://en.wikipedia.org/wiki/Helmholtz%E2%80%93Kohlrausch_effect