如果您打开 RAW 图像文件,我正在尝试实现类似于您在 Photoshop 中看到的白平衡工作流程。那是:
- 打开 RAW 文件
- 对话框打开,允许用户从图像中采样颜色(通常选择具有中灰度值的颜色
- 图像是白平衡的
我正在尝试在另一个应用程序中实现类似的工作流程(只是为了减少应用程序跳转)。目前,我正在执行以下操作(其中“源”是图像,“目标”是采样颜色:
- 将源图像和目标图像从线性 RGB 转换为 XYZ 空间
- 使用 Bradford 变换将源图像和目标图像从 XYZ 变换到 LMS 空间
- 计算比例系数:cr = Lt/Ls, cg = Mt/Ms, cb = St/Ss
- 将源中的每个纹素乘以对角矩阵 [ cr, 0, 0, 0, cg, 0, 0, 0, cb]
- 将源图像从 LMS 空间转换回 XYZ 空间
- 将源图像从 XYZ 空间转换为 RGB 空间
我的这个过程基于这篇论文: https ://www.hindawi.com/journals/mpe/2014/760123/
我正在使用预先计算的变换矩阵从这里(D65白点)从RGB转换为XYZ: http ://brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
以及从此处从 XYZ 转换为 LMS 的预先计算的 Bradford 变换(再次,D65 白点):从上面第 2ii 部分的 Hindawi 论文中提取
我没有任何示例代码。我正在尝试使用像素处理器在 Substance Designer 中实现这一点。在这一点上,我只是好奇我的整体方法是否合理,然后再深入研究具体实现。
我从中得到的输出是色调偏向绿色且太暗。
Photoshop中的预白平衡:
在 Photoshop 中进行白平衡后:
我的结果:
我是否在错误的空间计算比例系数?我假设缩放源纹素应该发生在 LMS 空间中..?
谢谢!