下图是一个典型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则缓慢变小直至达到一个最小值而不再改变。
直角双曲线靠近坐标的部分与坐标轴近似平行的直线段,比较符合色温曲线的变化规律。
可以参考:光合作用对光响应的直角双曲线修正模型和非直角双曲线模型的对比研究
由上图可以看出,根据G/R G/B用直角双曲线函数拟合的图像和海思的普朗克曲线十分相似。是否也可以使用指数类型函数进行曲线拟合呢?
看起来全志也是采用了第一种定义。在这种定义下,D65光源下的白色具有较大的B/G统计值。
而瑞芯微似乎是采用了第二种定义。在这种定义下,D65光源下的白色需要较大的R/G增益才能达到白平衡。
本文将采取第二种定义,即R/G,B/G代表增益系数而非图像的统计值。在此定义下,白平衡标定的大致过程是
俗话讲画鬼容易画人难,这是因为人们在观察不太熟悉的东西时不容易察觉出异常。而人们对常见的事物如蓝天、绿地、肤色等会具有特别深刻的记忆,很容易察觉出任何偏离,所以一个好的白平衡算法需要能够检测出画面中存在的特殊场景并加以针对性的强化。
一种基本的场景检测方式是点云分析。思路是根据事先标定的结果在白平衡增益图上划出几个特定的区域,当图像中出现一定数量的像素紧密聚集在某一区域时,即认为图像中存在相应的特殊场景。
点云分析是一种非常有效的提取图像特征的方法,但由于需要分析每一个像素的白平衡增益,所以计算量非常大。如果用来处理实时视频流,则一定需要ISP硬件实现对像素的统计。一种较典型的做法是,将图像分成MxN个zone,也可称为窗口,ISP针对每个zone报告像素统计值,包括R/G, B/G,白点数量,亮度直方图等,这些信息可以用于判断场景类型。
白平衡的控制过程通常可以分解为检测、响应、调整、收敛、稳定等几个阶段,如下图所示。
理想的白平衡控制时序如下图所示,其基本流程是
但是实际上由于两帧的时间间隔往往很小,不容易保证算法完成一系列的计算和配置,因此实际的白平衡控制往往采用隔帧生效的时序,其基本流程如下图所示
u16ZoneSel
=0 或 255)报告白点均值(RGB)和总数
最大 32x32 zone
方案A enAlgType
=AWB_ALG_LOWCOST
方案B enAlgType
=AWB_ALG_ADVANCE
可以配置直方图 bin threshold (6个控制点,4个有效bin) 和 bin 权重
可选自动或手动模式 (firmware feature),自动权重采用高斯分布
摄像机、单反、数码相机等设备都会提供一些预设的白平衡模式供用户选用,如下图所示。
当拍摄场景的照明条件基本固定时,可以直接选择一个合适的场景就能够得到不错的白平衡效果。
当拍摄场景的照明条件动态变化时,就需要使用软件算法对白平衡参数进行实时计算和调整。在摄像机、单反的菜单上自动白平衡的符号是