2 AWB简述
2.1 白平衡概念
通俗地来讲,白平衡就是:不管在任何光源下,都能将拍摄的白色物体的图像还原为白色。在特定光源下拍摄时出现的偏色现象,通过加强对应的补色来进行补偿实现白平衡。
人类视觉系统具有颜色恒常性特点,人类对物体观察不受光源影响。但是Sensor在不同光线下,感知到的物体呈现的颜色不同,在晴朗天空下会偏冷色调,在烛光下会偏暖色调。白平衡的目的就是消除不同光源造成的色彩偏差,使得拍摄出来的照片尽量符合人眼的习惯。
camera sensor在不同光源下对颜色的响应,如下图所示:
白色在人眼中的表现是如下图这样的:
2.2 白平衡原理
第二节抛出一个隐式问题:如何将让camera sensor拍摄的图片和人眼看到的一致呢?我们根据第二节的图片可以这样做:把sensor的R,G,B分量各自乘上一个系数,使RGB三个能量保持相同即可。
白平衡的算法就是计算R、G、B的gain值。一般在实验室中用18%灰卡或者色卡取第22个灰色方块,用软件测出R, G, B的均值,由于G最大,所以以G作为目标进行补偿。
比如原始R=15,G=40,B=30,采用如下的方法计算出白平衡的gain值。
R_gain=40/15
B_gain=40/30
G_gain=1
2.3 实现白平衡算法的基本思路
2.3.1 定参考
首先在灯箱里面不同光源环境下拍摄18%灰卡的图片,例如D75, D65, D50, CWF, TL84, A, H等光源。然后计算每张图片的颜色的比值R/G和B/G,然后把这些点放到坐标轴上,做为参考点(不同传感器在不同光源下测得的灰色 R/G 和 B/G 比率)。打个比方:对于一位分不清颜色的同学,我在红颜色上都做了一个三角形标志,并且告诉他有三角形标志的就是红颜色,那他看到三角形就知道是红色,即使他本身分辨不出来看到的是什么颜色。所以前期定的形状(参考点)越多,相机可以认识的颜色也就越多。
2.3.2 确定灰区
白平衡算法可基于这些参考点创建一个灰色区,从而对给定场景中的统计数据进行筛选。灰色区用于排除来自非灰色物体的统计数据的干扰。
2.3.3 找参考前的算法预处理:统计R/G,B/G值
相机在拍摄照片的时候,会对图像做一个处理,把整个画面分成M* N个块,计算出每一块的基本信息:白色像素的数量及R/G/B通道分量的均值。那我们如何统计 块中 的白色点呢?
思路是:设置一个颜色范围,只要在范围中,就可以认为是白色像素。当然我们还需要去除极值:如果块中的白色像素太少,可以抛弃掉;如果白色像素太多,多到每一个像素点都是,那也要抛弃掉,因为很可能在该区域过曝了。接着把统计到的白色像素点R/G/B取均值,并得到该块的R/G,B/G值。
2.3.4 找参考前的算法预处理:计算当前色温
这个理解起来比较复杂,比如上一步中统计的“白色点”难免会有失误的地方。比较常见的如黄色皮肤容易被误判为低色温下的白点;淡蓝色的窗帘,容易被误判为高色温下的白点。而且当一张图中既有白色,也有黄色,也有蓝色的时候,是不是感觉情况就有点复杂了。这时我们需要一定的策略来正确的判断出到哪个才是真的白。
如上面这样一幅图,该图是在没有开AWB的前提下截取的,可以看到左边白色地方略有偏绿,当前色温是室内白炽灯,大概4000~5000k左右。
首先我们需要找出白区,如下图:
上面这个图中的数字标示出了检测到的白色区域,数字相同的表示一个白区,根据统计信息(白点数,RG/BG值)来区分的。可以看到有误判的地方,比如色卡左上第二块的肤色块。还有最右边从上面数第二块也是容易被判断成低色温白块的情况。
针对这种误判的情况,对不同块根据统计信息进行权重设置,以求让误判的区域对最终结果影响小一些。
上面这个图标注了权重,基本是根据统计信息中白点数来确定的。可以看到图中一片白色被标识了高权重。其它情况被标识了低权重。权重高低一是看块中白色点数量,二是看RG/BG到色温曲线的距离。通过上面两个图,大家就可以明显的找到白色区,并根据曲线来矫正,即使不通过曲线矫正,把白色区的R/G,B/G值向1趋近,让R=G=B,也会得到非常好的白平衡效果。
2.3.5 找参考
接着我们把刚才分成的M* N的这些点都放到刚才那个坐标轴上。靠近某个参考点的坐标点越多,说明当前场景越接近参考点的环境色温。这样我们就可以找到正确的颜色(白点)了。然后根据这个白点计算出AWB的R_gain和B_gain。如果坐标点分布在两个参考点之间,那么白点会根据两个参考点的权重进行插值计算。
2.4 AWB初始调试步骤
调试步骤具体如下:
1.调试AWB参考点,有两种方法:
第一种是相机预览界面为100% FOV 的灰卡,抓取对应光源的R/G, B/G的值
第二种是在chromatix 6导入对应调试光源的100% FOV 的灰卡raw图
调试完参考点后,device导入AWB参数后,启用图片3A log, 在不同光源(D75、D65、D50、CW、TL84、A和H)下拍摄带MCC色卡的正常场景图像,检查第三个灰色块上的R/G和B/G比。R/G 和B/G应介于0.9到1.1之间。
- 调试室内和室外指数,即在标准室内光源条件下(非常明亮的场景),光应该显示为白色,室内指数与室外指数之差应大于80,避免AWB跳变问题。
2.5 AWB调试的常用参数
2.5.1 初始AWB增益和CCT
刚启动摄像头时走的便是该参数,该处可修改打开Camera瞬间偏色的问题,因为其只用于打开Camera瞬间,所以若此处根据当前场景更改色温后,当前场景OK,其它场景打开的时候可能会有偏色产生。此外还可调整/* Convergence Factor Camera * /,该值可调整打开camera时的awb收敛速度。
代码位置:
4100, /* Initial CCT */ //初始色温
4100, /* Initial Previous CCT */
0, /* AWB Config FULL ROI Camif Size Enable */
/* Initial Adjust Gain */
{
1.805016f, /* Red Gain */ //初始gain值
1.000000f, /* Green Gain */
2.007156f, /* Blue Gain */
},
2.5.2 AWB参考点
具体如何根据参考点创建灰区以及如何根据给定场景中的统计数据进行筛选的算法高通已封装在代码中了,我们暂时无法查看。
代码位置:
/* AWB Reference Points */
{
/* D65 AWB Reference Point */
{
0.446101f, /* R/G ratio outdoor*/
0.699809f, /* B/G ratio outdoor*/
},
/* Shade AWB Reference Point */
{
0.399000f, /* R/G ratio */
0.734900f, /* B/G ratio */
},
/* A AWB Reference Point */
{
//0.692100f, /* R/G ratio */
0.814343f, /* R/G ratio */
//0.416100f, /* B/G ratio */
0.375551f, /* B/G ratio */
},
…
}
2.5.3 AWB光源权重
光源权重向量模块会根据不同的CCT和照明条件(即,亮度(Lux 级)不同)给定统计数据不同的权重。也可以这样理解:将CCT比作三维坐标系中的X轴,将lux Level比作三维坐标系中的Y轴,将权重比作三维坐标系中的Z轴,那么我们可以根据X和Y的坐标找到相应的权重值。我们可以通过调节光源权重来决定图像是偏暖色调还是冷色调。调整光源权重可改善白平衡跳变问题。
/* Weight Vector */
/* Region 0 */ //一般有12个Region,根据index分段划分
{
0, /* Index */
{
1, /* AWB_DAY_D75 */ //Region下,D75对应的权重
1, /* AWB_DAY_D75_D65_1 */
…
0, /* AWB_CUSTOM_A */
0 /* AWB_U30 */
},
},
/* Region 1 */
{
47, /* Index */
…
}
/* Region 3 */
{
143, /* Index */
…
}
…
2.5.4 gain adjust
对应调试代码如下:
/* Gain Adjust */
...
1, /* Interpolate Gain Adj Enable */
/* Gain Adj Bright Light Trigger */
{
2.000000f, /* Not Applicable */
1.000000f, /* Not Applicable */
220, /* Lux Index Start */
198, /* Lux Index End */
},
/* Gain Adj Lowlight Trigger */
{
0.000000f, /* Not Applicable */
0.000000f, /* Not Applicable */
405, /* Lux Index Start */
435, /* Lux Index End */
},
0, /* Control Method - 1 = Gain, 0 = Lux Index */
/* AWB Bright Light Gain Adjust */
...
/* AWB Gain Adjust */
...
/* AWB Lowlight Gain Adjust */
...
通过 gain adjust ,我们可对应调整 室外/室内/弱光条件下的增益,调整增益最好按照高通调试规则进行调试:
-
以0.02为增量降低R增益值以将图像向蓝绿色调整。增大该增益值以将图像向红色调整。
-
以0.02为增量降低B增益值以将图像向黄色调整。增大B增益值以将图像向蓝色调整。
gain adjust 一般是用户对某一场景有特殊要求,比如要求蓝天偏蓝一点。这时我们用gain adjust进行调整,一般调试轻微偏色问题还是先以光源权重调整和CCM调整为先,之后再考虑gain adjust。
2.5.5 Exp Trigger
假如我们在灯箱中测得cwf光源下图片偏黄,且从图片3A log中看到exp_index=189,则非常接近室外shade和室外的插值区,此时我们需要修改室外trigger条件来改善该情况。
/* Exp Trigger */
{
140, /* Direct Sun Exp Index */
190, /* Outdoor Heuristic Exposure Index Trigger */
1, /* Outdoor Heuristic Outdoor Exp Bright Shade Enable */
165, /* Outdoor Heuristic Exp Index Bright */
190, /* Outdoor Heuristic Exp Index Shade */
<140进入direct sun状态
<190为室外和室外shade启发式trigger状态
<165为室外高亮状态
140-165之间插值,165-190之间插值