我们的 API 中已经有一个高度优化的类来读取 3D Lut(Nuke 格式)文件并将转换应用于图像。因此,与其使用复杂的公式逐个像素迭代并将 RGB 值转换为 Lab (RGB->XYZ->Lab) 值,我认为如果我生成一个 RGB 到 LAB(或 XYZ 到实验室)变换。这可能吗?
我了解 3D Lut 如何用于从 RGB 到 RGB 的转换,但我对 RGB 到 Lab 感到困惑,因为 L、a 和 b 具有不同的范围。有什么提示吗?
编辑:
你能解释一下Lut是如何工作的吗?这里有一个解释:链接
例如,下面是我对 RGB->RGB 变换的 3D Lut 的理解:一个 Nuke 3dl Lut 文件示例:
0 64 128 192 256 320 384 448 512 576 640 704 768 832 896 960 1023
R, G, B
0, 0, 0
0, 0, 64
0, 0, 128
0, 0, 192
0, 0, 256
.
.
.
0, 64, 0
0, 64, 64
0, 64, 128
.
.
这里不是为源 10 位 RGB 值生成 1024*1024*1024 表,而是将每个 R、G 和 B 范围量化为 17 个值,生成 4913 行表。第一行给出了可能的量化值(我认为这里只有长度和最大值很重要)。现在假设,如果源 RGB 值为 (20, 20, 190 ),则输出将是第 4 行 (0, 0, 192)(使用一些插值技术)。那是对的吗?这个是针对 10 位源的,您可以通过将范围从 0 更改为 255 来生成类似的 8 位源吗?
同样,您将如何进行 sRGB->Lab 转换?