我有这个ICC文件,它将颜色从RGB转换为XYZ。我正在制作我自己的ICC处理器。
我想将值[0.5,0.5,0.5]转换为XYZ,然后转换为sRGB。下面是我得到的:
RGB = [0.5, 0.5, 0.5]
apply "A2B0":
XYZ = [0.1263921901414079, 0.13108369512741044, 0.1081292238059337]
to sRGB using "wtpt":
RGB = [0.39734262390746755, 0.39732431073870283, 0.3972382158377442]
然而,结果的sRGB应该是不同的(更亮)。还有一个"chad"标签(3x3矩阵),但我不知道何时应用它。这个ICC配置文件应该如何处理颜色[0.5,0.5,0.5]?
指向您的ICC配置文件的链接已失效(表示文件已删除)。
但也:你需要线性化任何伽玛或TRC在矩阵到XYZ之前的RGB,并且必须重新应用TRC时去sRGB。
你必须使用3x3矩阵的内和反向的3x3矩阵的外
AND:如果您使用的是v2或v4 ICC配置文件,您还必须对D50进行色彩调整,因为D50被指定为ICC XYZ pc的已调整WP。sRGB是D65,但是ICC配置文件中的primary将是D50改编的primary。
sRGB#808080
, D50 XYZ值应该是这样的:
0.20815334 0.21586051 0.17810748
虽然我看不到ICC的配置文件,但我不知道你是从哪个空间来的。
矩阵数学简短的解释是每个输出通道是相关矩阵行乘积的和。
这是一个例子,这是D65矩阵而不是D50适应矩阵:
|R|0.4123907993 0.3575843394 0.1804807884| |X|
|G|0.2126390059 0.7151686788 0.0721923154| = |Y|
|B|0.0193308187 0.1191947798 0.9505321522| |Z|
这里我们从线性sRGB到XYZ。在应用此矩阵之前,必须移除sRGB TRC (gamma)(未显示)。矩阵的第一列是R,第二列是G,第三列是b。最上面的行是X,中间是Y,然后是z。
因此,将每个列行乘以它的输入通道,然后将每一行求和为输出通道。
R * 0.4123907993 + G * 0.3575843394 + B * 0.1804807884 = X
R * 0.2126390059 + G * 0.7151686788 + B * 0.0721923154 = Y
R * 0.0193308187 + G * 0.1191947798 + B * 0.9505321522 = Z
XYZ空间是线性的(没有伽马),所以你需要在从XYZ出来后把TRC放回sRGB。