#灵感# 记录下awb 统计信息,写的有点毛糙
前提:客观已标定AWB 的白点,并初步调整好灰色统计区域。
1、硬件统计
要做AWB,第一步是先分析当前画面的色彩信息。
先对画面进行分块,例子是32*32个块。分块后每个块进行 R G B 值统计,可以简单的理解为对块内所有像素的 R G B值求均值。如下图,白墙和纸盒子的 R G B值统计出来肯定是不一样的。
这些块得到的统计值,在进行AWB 算法分析时,每个点都会映射到 AWB白点标定时得到的 白点投影坐标系内,大约如下两种类型:
(为避免版权问题,举例的落点图并不是对应统计图生成的,只做举例说明)
2、筛选有效白点
对统计得到的点,可以做筛选或者赋不同的权重。
1、比如得到1024个统计点,当有800 个统计点落在 D65 白点的“有效辐射区”内,则以D65 作为AWB的目标。-------有效辐射区可以理解为下图的圆环区域,或者XY坐标系内的矩形色温框。
这里就涉及确定 D75、D65、D50、TL84这些在色温曲线上的标准光源,与相邻的光源如何界定插值区域。
2、又比如得到的1024个点,有100个点并不在AWB 灰点统计区域中(在所有的色温框以外),那这些点一般会舍弃点,不作为最终的AWB结果统计。
但如果有600个点都不在标定区域中呢?-(夸张点说,表示有很多不可忽略的点,比如上图)----这个时候,就需要设定额外的白点特区,只针对这个场景,进行特定的AWB纠正。
【适合同温异色的场景,但实际上如果没啥副作用的话,把距离这些异常点最近的已标定的某个色温下的AWB框拉大点,把这些额外的点尽可能多框进去,适应性会更好】
下图的例子是抛弃掉不合适的落点
3、一个疑问? 全屏幕的纯色怎么搞?
统计的点全部扔掉,不做AWB也不行? 全做AWB,又会得到奇怪的结果。
简单的算法是指定一个预设的色温(比如D65、D50),当统计得到的落点几乎都不在色温框内时,用预设的色温来做这个场景的白平衡。
另一个算法是时间预测器
定义:参考过去四个合适帧的AWB结果,获得AWB增益的机制。
用法:当没有白点可参考时,时间预测器可以代替AWB统计量来提高AWB的正确性。
还有一个方案就是映射白点,和第二点中的“多数落点不在标准灰区”的解决方案一样,对这些点设定特区,自定义R/G B/G值。