转载自刘斯宁大佬的:Understanding White Balance Control
实际场景的图像最后都是在各种显示器中显示
大部分显示器都支持sRGB标准
白平衡算法将拍摄场景中的白色映射到D65色温下的白色(大部分显示器利用CIEXYZ空间转换到其他空间时都是以D65为白点参考点),相当于实现人类视觉系统的颜色恒常特性
对于需要在sRGB标准显示器上显示的图像,白平衡算法需要将拍摄场景色温下的白色映射为D65色温下的白色。这就相当于实现了人类视觉的颜色恒常特性。白平衡的第一步也是最重要的一步是对拍摄场景进行光源颜色估计(light source color estimation),估计的结果可以用于下一步的色适应(chromatic adaptation)。色适应的作用是去除图像的偏色(color cast),使原始场景中的白色物体在D65色温下仍然是白色。
基于以上理论,ISP中关于白平衡模块的基本功能框架可以用如下图表示:
基于以上理论,白平衡的基本功能可以用以下公式来定义:
其中,
- RGBin 是3x1颜色矩阵,是白平衡的算法的输入。根据算法应用场景的不同,RGBin可能是CMOS sensor输出的RGB值(线性),也可能是sRGB空间的RGB值(带gamma)。
- Fin 是固定的3x3变换矩阵,把颜色从输入空间变换到适合运算的工作空间,称为中间表示。当工作空间为XYZ空间时(假设输入为sRGB空间),
- M 是色适应矩阵,将输入三刺激值映射为对人眼L、M、S视锥细胞的三刺激量。如何选择合适的M矩阵是一个热点问题,不同的评价标准会导致不同的答案。
- D 是3x3对角矩阵(非对角线元素全部为0),使用场景光源下的白场响应对颜色进行归一化,并使用归一化值和目标光源下的白场响应预测(在目标光源下)激发同样的知觉所需的L、M、S三刺激值。
D矩阵需要依据场景光源和目标光源的色温确定,其中目标光源色温通常固定是D65,而场景色温需要通过某种技术从输入图像中估计得到。当两个色温都确定后,D矩阵可以用两个白场响应之比表示
其中,
下标wd表示目标光源(dest)即显示器(display)的白场响应,
下标ws表示输入光源(source)即场景(scene)的白场响应,
各种光源下的白场响应可用白平衡卡在实验室环境下标定得到。
- M^-1 是M的逆矩阵
- Fout 是固定的3x3变换矩阵,把颜色从工作空间变换到输出空间,正常也是sRGB
- RGBout 是3x1颜色矩阵,是白平衡的算法的输出
实践中常用以下几种空间做为色适应矩阵M的工作空间
- Sensor RGB 空间
该矩阵的作用是将RGB值从SensorRGB空间变换到人眼的XYZ空间,这个过程可以理解为sensor颜色校正的一部分,矩阵系数需要根据sensor特性进行标定。
- 锐响应RGB 空间
- CIE-1931 XYZ
- Bradford RGB 空间
- Von Kries
- CMCCAT2000
- CAT02
在以上空间中,sensor RGB 空间是最简单的一种选择,该方案直接使用sensor的频率响应模拟人眼的响应,Fin, M, Fout 都简化单位矩阵,因此白平衡算法退化为:
这个方案虽然精度不高,但是实现成本最低,所以被工业和消费级camera广为采用。由于D是对角阵,所以白平衡运算就是对sensor 的三个颜色通道分别乘以一个增益系数,这三个增益系数即定义为白平衡增益。对图像施加了白平衡增益后图像即获得了正常的白平衡。有些sensor 会提供专用的增益寄存器分别控制各个通道的增益,而几乎所有的ISP处理器都提供同样功能的增益寄存器。
在研究白平衡增益时,为了简化分析和计算,常用G通道的增益对三个系数进行归一化处理,
于是默认G通道增益总是1.0,而R,B通道的增益简写为R/G和B/G。
P.S. 基于Bayer CFA原理的sensor 实际上有四个独立的颜色通道(R,Gr,Gb,B),但通常取Gain_Gr=Gain_Gb 即可。尽管由于种种原因Gr/Gb通道实际上并不完全一致,但解决这种不一致的任务往往落在专用的绿平衡(Green Equalization, GE)模块上。