白平衡算法背后的数学原理是什么?

What is the math behind white balance algorithms?

我有一张 CIELab 颜色的图像 space。我需要对其进行一些处理。所以,有两个问题:

  1. 给定一组 Lab 值,如何获得以开尔文为单位的整体图像温度? (就像在相机设置或 Lightroom 中一样)

  2. 具有开尔文温度值,如何调整图像白平衡以匹配该温度? (就像在 Lightroom 中一样)

我也想知道,如何对色调做同样的事情。

旧的(也是愚蠢的)方法是检查最亮像素(但没有高光)的颜色。这被认为是白色的。幸运的是,经常有白色物体(检查人们的眼睛),所以大部分时间都有效。

只要去除所有像素上的这种色偏,您就会得到白平衡图像。 [注意:这应该在线性 space] 中完成。

从白色的色度,你可以推导出开尔文:注意:大多数程序都允许白平衡在两个 a-b 方向(所以 2D,你的 "tint" 额外的问题),而不仅仅是一条线(温度)。

现代相机更聪明:他们检查没有通道被剪裁,他们检查色度是否离黑体发射不远(所以离 "temperature" 参数不远)。大多数现代相机都可以区分主题(例如焦距(风景)等,以预测更好的白平衡)。

灰卡仍然是比较靠谱的方法:没有算法可以得到真正的白平衡。