色彩空间变换的3D LUT校正计算

问题描述 投票:0回答:1

我有由仪器测量的一组特定

XYZ
刺激值的源
RGB
数据。 我的目标是计算
RGB
校正
3D LUT
,将
wide gamut
颜色(源)校正为
sRGB Gamma 2.2
(目标)。

不幸的是,结果

3D LUT
严重过度校正,应用 LUT 时生成的颜色不正确。 例如,广色域绿色(远离
sRGB
绿色)被
3D LUT
校正为黄色,校正过多,会超出
sRGB
绿色目标。

这是我迄今为止每种颜色的工作流程:

  1. 标准化源 XYZ
  2. 通过矩阵将归一化源 XYZ 转换为 RGB,从而得到线性 RGB 值
  3. 伽玛解码 RGB 刺激(用于测量源 XYZ),这也会产生线性 RGB
  4. 计算(3)与(4)的差值并与(4)相加即可得到线性RGB校正值
  5. 将 (4) 夹至 [0, 1]
  6. 伽玛编码 (5) 以导出 RGB 刺激位置处 3D LUT 的最终值

如何改进我的工作流程以获得准确的

RGB
修正
3D LUT

这是上面列出的步骤示例,针对

RGB
刺激 [0, 1, 0](全绿色),针对目标 sRGB Gamma 2.2

  1. 源 XYZ 标准化:[ 0.17561690638343577, 0.6916597387875002, 0.09266908358355674 ]
  2. 将源 XYZ 转换为 RGB 线性:[ -0.5403827343567055, 1.1311664922193734, -0.033364486006756455 ] (所有通道均超出有效 [0, 1] 范围,因为此宽色域点位于 sRGB 色域之外)
  3. RGB 刺激,伽玛解码为线性:[ 0, 1, 0 ](在本例中保持原样)
  4. RGB 线性校正值(添加到 RGB 刺激的 RGB 差异):[ 0.5403827343567055, 0.8688335077806266, 0.033364486006756455 ]
  5. RGB 线性校正值被钳位:[ 0.5403827343567055, 0.8688335077806266, 0.033364486006756455 ](保持原样)
  6. 伽马编码的 RGB 线性校正值(在 3D LUT 中用于 0,1,0):[ 0.7559632190935, 0.9380886721747913, 0.21318942290755252 ]

当应用

3D LUT
时,全绿色 [0, 1, 0] 现在测量到
sRGB
黄色原色附近,因此它会过度校正颜色。

rgb lookup-tables color-space
1个回答
0
投票

我并没有真正遵循“校正”方面,它看起来好像您将

Linear RGB
视为
sRGB
和您的
Wide Gamut RGB
之间共享的空间,而不是有两个不同的
 Linear sRGB
Linear Wide Gamut RGB
空格。

例如Display P3 中的纯绿色:

  • 显示 P3 RGB [0, 1, 0]
  • 线性显示 P3 RGB [0, 1, 0]
  • XYZ [0.2657, 0.6917, 0.0451]
  • 线性 sRGB [-0.22, 1.04, -0.08]
  • sRGB [-0.51, 1.02, -0.31]

这里,

Linear Display P3 RGB [0, 1, 0]
代表与
Linear sRGB [-0.22, 1.04, -0.08]
相同的颜色。

我想强调两点:

1.色域映射

听起来您希望色域映射将 sRGB 值带入 sRGB 色域,即

[-0.5403827343567055, 1.1311664922193734, -0.033364486006756455] → [?, ?, ?]
,但您需要选择最适合您需求的映射技术。

例如:

Gamut mapping example

2. LUT 和 ICC 配置文件

本能地,提及用于颜色变换的 LUT 让我想到

ICC 配置文件 - 这不是最容易使用的东西,甚至他们的 ROMM RGB (ProPhoto) 配置文件也包含矩阵运算 - 但如果 LUT 适合您的情况正在做的事情可能值得探索。

© www.soinside.com 2019 - 2024. All rights reserved.