转载于Understanding White Balance Control - 知乎
红色部分为白平衡色温曲线的一些猜想,欢迎探讨
白平衡标定
下图是一个典型camera的原理框图,从中可以看到,光子流(photon flux)在变成电信号之前会经历镜头、微透镜、CFA阵列、像素阵列等光学结构。在很多实际的camera产品中还存在红外截止滤光片、抗混叠滤光片等额外的光学结构。这些光学结构都会改变光信号的频谱分布,从而影响图像的白平衡。
我们把包含镜头、滤光片、像素阵列等在内的所有光学结构当作一个整体设备考虑,这个设备所支持的颜色空间称为sensor RGB 空间。对于特定的光信号输入,设备的输出信号取决于RGB三通道的频率响应,不同的sensor频率响应一般是不同的。
为了将拍摄场景中的白色物体在显示时正确还原为白色,首先需要知道真实的白色物体在sensor RGB 空间中呈现什么颜色。解决这个问题的一种方法是对光路中所有光学元件进行数学建模,通过解析的方式寻求答案,但是因为各种光学原件的详细参数往往很难获取,所以现实中很少使用这种方法。另一种方法是通过实验标定标准白色在一些典型色温下呈现的sensor RGB 颜色,然后通过几个标定的色温点可以外推白色在所有可能色温下呈现的颜色,从而建立场景色温与sensor RGB 白色的对应关系,这个对应关系通常用白平衡增益来描述。
通过实验我们观察到,A光源下拍摄的白色偏黄,用ImageJ分析其像素颜色,发现其具有较大的R/G值,如下图所示。
A光源下拍摄的白卡
这显然是因为A光源的光谱中具有大量的红色成分,而蓝色的成分极少。
A光源光谱
而D65光源下拍摄的白色则具有较大的B/G值,如下图所示。
D65光源下拍摄的白卡
同理,这是因为D65光源中含有大量的蓝色成分。
D65光源光谱
白平衡增益通常记为(R/G, B/G),即红色和蓝色相对于绿色的比例。我们注意到目前对白平衡增益存在两种不同的定义,一部分厂家将(R/G, B/G)定义为sensor捕捉到的图像中红色和蓝色的统计值,因此在高色温(如D65)下B/G大于R/G。而另一部分厂家则将(R/G, B/G)定义成为了使sensor捕捉的图像达到白平衡需要施加的增益系数,因此在高色温下B/G小于R/G。
看起来海思就是采用了第一种定义。在这种定义下,光源的色温曲线(普朗克曲线)表现为下图所示的形状。
其中,海思的色温曲线很想一条变形的直角双曲线的图像。不知道海思的这个色温曲线是不是就是按照直角双曲线的形式拟合的呢?
通过对不同sensor的色温曲线标定数据可知:在D50-D65之间 R/G B/G的比值基本相近,相差不大。在低色温的时候,主要是G和B分量在改变,在高色温的时候主要是G和B分量在改变。以海思的色温曲线为例:从直角双曲线的两个坐标方向来看,在D50-D65这个R/G B/G为分界点,沿着R/G的方向看,最后应该会有一个B/G的饱和点,同意的B/G方向看,R/G也会有一个饱和点,饱和区域的时候其两个坐标方向上看应该呈现一条类似接近直线的曲线段。
或者也可以这么理解:
低色温的时候,色温越低其R/G的比值越大,B/G的比值越小,当R/G达到某一阈值后,B/G则缓慢变小直至达到一个最小值而不再改变;同样的,色温越高,B/G的比值越大,R/G的比值越小,当B/G达到某一阈值后,R/G则缓慢变小直至达到一个最小值而不再改变。
直角双曲线靠近坐标的部分与坐标轴近似平行的直线段,比较符合色温曲线的变化规律。
可以参考:光合作用对光响应的直角双曲线修正模型和非直角双曲线模型的对比研究
![](https://img-blog.csdnimg.cn/587fc2b912f142f2a925aa2bbb5a1e3f.jpeg)
由上图可以看出,根据G/R G/B用直角双曲线函数拟合的图像和海思的普朗克曲线十分相似。是否也可以使用指数类型函数进行曲线拟合呢?
![同样标定参数不同拟合函数图像](https://img-blog.csdnimg.cn/10fa99c181db41c4a397a5f9c483d42d.png)
看起来全志也是采用了第一种定义。在这种定义下,D65光源下的白色具有较大的B/G统计值。
而瑞芯微似乎是采用了第二种定义。在这种定义下,D65光源下的白色需要较大的R/G增益才能达到白平衡。
本文将采取第二种定义,即R/G,B/G代表增益系数而非图像的统计值。在此定义下,白平衡标定的大致过程是
- 以标定好的若干个色温点(A, TL84, D50, D65, D75等)为核心可以拟合出一条色温曲线。
- 以色温曲线上的点为圆心,以一定半径画椭圆,可以得到一些列椭圆。
- 所有椭圆所覆盖的(R/G,B/G)集合就认为是真实场景中的白色物体在全部色温下的可能值。不落在这个范围内的颜色不认为是白色。
- 考虑到某些特殊光源(如CWF)光谱特征偏离黑体光谱较大,因此需要单独标定。
场景检测
俗话讲画鬼容易画人难,这是因为人们在观察不太熟悉的东西时不容易察觉出异常。而人们对常见的事物如蓝天、绿地、肤色等会具有特别深刻的记忆,很容易察觉出任何偏离,所以一个好的白平衡算法需要能够检测出画面中存在的特殊场景并加以针对性的强化。
一种基本的场景检测方式是点云分析。思路是根据事先标定的结果在白平衡增益图上划出几个特定的区域,当图像中出现一定数量的像素紧密聚集在某一区域时,即认为图像中存在相应的特殊场景。
点云分析是一种非常有效的提取图像特征的方法,但由于需要分析每一个像素的白平衡增益,所以计算量非常大。如果用来处理实时视频流,则一定需要ISP硬件实现对像素的统计。一种较典型的做法是,将图像分成MxN个zone,也可称为窗口,ISP针对每个zone报告像素统计值,包括R/G, B/G,白点数量,亮度直方图等,这些信息可以用于判断场景类型。
白平衡控制时序
白平衡的控制过程通常可以分解为检测、响应、调整、收敛、稳定等几个阶段,如下图所示。
理想的白平衡控制时序如下图所示,其基本流程是
- 在第N帧图像结束时ISP硬件采集关于白平衡的统计信息
- 白平衡算法根据第N帧的统计数据预测第N+1帧的控制参数
- 摄像机固件在第N+1帧图像到达之前将白平衡控制参数写入ISP硬件寄存器
- 第N+1帧图像使用新的白平衡参数进行曝光
但是实际上由于两帧的时间间隔往往很小,不容易保证算法完成一系列的计算和配置,因此实际的白平衡控制往往采用隔帧生效的时序,其基本流程如下图所示
- 在第N帧图像结束时ISP硬件采集关于白平衡的统计信息
- 在第N+1帧开始后,白平衡算法根据第N帧的统计数据预测第N+2帧的控制参数,需要在第N+1帧结束前完成所有计算
- 摄像机固件在第N+2帧图像到达之前将新的白平衡控制参数写入ISP硬件寄存器
- 第N+2帧图像使用新的白平衡参数进行曝光
海思AWB 功能特点
- WB 统计基于 RGB空间
- 支持 在三个位置 进行统计
- 支持全局统计 (
u16ZoneSel
=0 或 255)
报告白点均值(RGB)和总数
- 支持分区统计 (u16ZoneSel != 0 或 255)
最大 32x32 zone
方案A enAlgType
=AWB_ALG_LOWCOST
方案B enAlgType
=AWB_ALG_ADVANCE
- 不支持zone weight
- 支持设置 RGB上下限
- 支持 四边形 白点条件 (4个控制参数, b/g, r/g)
- 支持报告分zone、分bin 白点数,和RGB均值
- 支持 亮度-白点直方图
可以配置直方图 bin threshold (6个控制点,4个有效bin) 和 bin 权重
可选自动或手动模式 (firmware feature),自动权重采用高斯分布
Apical AWB 功能特点
- WB 统计基于YCbCr 空间
- 支持 两个位置 After Demosaic / After CNR 统计
- 支持全局统计, 报告白点均值(Cb/Cr)、总数
- ARM 支持 分区统计,最大 33x33 zone,默认使用 15x15
- 支持 zone weight, 影响全局统计结果
- 支持 luma 上/下限
- 支持 六边形 白点条件 (8个控制参数)
- 持 报告 分zone白点数 和UV均值 (R/G 或 G/R)
- 不支持亮度-白点直方图
白平衡模式
摄像机、单反、数码相机等设备都会提供一些预设的白平衡模式供用户选用,如下图所示。
当拍摄场景的照明条件基本固定时,可以直接选择一个合适的场景就能够得到不错的白平衡效果。
当拍摄场景的照明条件动态变化时,就需要使用软件算法对白平衡参数进行实时计算和调整。在摄像机、单反的菜单上自动白平衡的符号是