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 颜色如何映射到输出值。我特别困惑,因为 a
和 b
值可能是负数。
我相信我在略读 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 中的相同值将输出映射回来。
我使用 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 颜色如何映射到输出值。我特别困惑,因为 a
和 b
值可能是负数。
我相信我在略读 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 中的相同值将输出映射回来。