ICC 文件的不同部分如何协同工作?

How do the the different parts of an ICC file work together?

我使用 ICC 配置文件检查器从 http://www.brucelindbloom.com/index.html?MunsellCalcHelp.html 中分离了一个 ICC 文件并查找 table。 ICC 文件应该将 Lab 转换为 Uniform LAB。

它输出的文件包括 headers、矩阵(3x3 单位矩阵)、输入和输出曲线以及查找 table。这些文件是什么意思?它们与颜色变换有什么关系?

header内容为:

InputChan: 3
OutputChan: 3
Input_Entries: 258
Output_Entries: 256
Clut_Size: 51

InputCurves 文件包含如下条目:

0 0 0 0 
1 256 255 255 
2 512 510 510 
...
256 65535 65280 65280 
257 65535 65535 65535 

OutputCurves 文件包含如下条目:

0 0 0 0 
1 256 257 257 
2 512 514 514 
...
254 65024 65278 65278 
255 65280 65535 65535 

查找 table 条目如下所示:

0 0 0 25968 
1 0 0 26351 
2 0 0 26789 
...
132649 65535 65535 49667 
132650 65535 65535 50603 

我想了解输入的 LAB 颜色如何映射到输出值。我特别困惑,因为 ab 值可能是负数。

我相信我在略读 http://www.color.org/specification/ICC1v43_2010-12.pdf

后理解了它是如何工作的

这个解释可能有少许误差,但大体上应该是正确的。

输入值为LAB,L值使用10.8节lut16Type中的table39&40进行映射。然后输入曲线中的 258 个值在 L、a 和 b 范围内均匀 spaced。输出值为 16 位,因此 0-65535.

CLUT 也是如此。有 51^3 个条目(ICC 文件作者选择了 51 个)。每个维度 (L,a,b) 也在 space 上均匀分割。所以 0 = 0 & 50(注意 0 - 50 是 51 个条目)= 上一节中的 65535。前 51 行是 L =0 和 a =0,但增量为 b。每51行,a值加1,每51*51行,L值加1。

因此给定输入曲线调整的 L、a 和 b 值,计算出它们的索引 (0-50) 并在 CLUT 中查找它们 (l_ind*51*51+a_ind*51+b_ind), 这会给你另外 3 个值。

现在输出曲线进来了。这是另一组曲线,就像输入曲线一样工作。然后可以使用表 39 和 40 中的相同值将输出映射回来。