
目录
[3.1 用十进制整数域划分亮度存在的问题](#3.1 用十进制整数域划分亮度存在的问题)
[3.12 用log2对数域划分亮度的必要性](#3.12 用log2对数域划分亮度的必要性)
一、引言
如下截图,为某主控白平衡随不同亮度的一个权重设置查找表。横向表示的是环境亮度由低到高的变化,纵向表示的是不同色温的变化。
看到如下的表格,我们不禁提问到:
- LV从LV0-LV18就可以表示当前sensor所能覆盖的所有亮度场景吗?
- 白平衡的亮度权重设置有什么规律吗?

二、权重设置分析
通过设置不同亮度的权重,对白平衡算法主要有两方面的提升:
- 提高白平衡算法的稳定性。可以排除室外对着黄泥巴,以及室内日光灯下肤色等干扰色对白平衡增益计算的影响,避免在上述场景下把D50(D65)色温识别为TL84低色温;
- 控制色温的偏移。比如在低色温下像保留更多低色温偏暖色调的效果,可以适当增加中色温的权重,降低低色温权重达到保留光源原始色调的功能;
- 以上回答主要是针对引言中问题2的解决思路。即通过控制不同色温下的权重,排除干扰色或者实现色调偏移或保持。
三、亮度划分分析
以下我们主要分析亮度划分的问题。
3.1 用十进制整数域划分亮度存在的问题
假设环境亮度的变化范围为: Lmin (0.1lx)到Lmax (l0000lx)。查看以上截图的亮度权重表,如此大范围的亮度我们如何设计一个策略,能够包含上述所有的亮度范围呢?是按照log2对数域的划分环境亮度呢?还是按照EV=again*dgain*ispdgain*exp的十进制域划分呢?
如上一篇博文ISP中Lv和ISO系统并存的意义知道,十制制数字范围比较大,如果按照十进制划分亮度等级,需要的参数可能直接爆表。但是如果我们在对数域进行亮度划分的话,就可以用有限的节点数就可以覆盖到所有主要的亮度范围,中间亮度利用线性插值就可以完整的表示所有亮度范围。
如果我们按照EV=again*dgain*ispdgain*exp的十进制域划分,其中增益为定点的增益倍数,比如1倍为1024,2倍为2048,其他倍数依次类推;exp为曝光行表示的曝光时间。按照EV去划分环境亮度的话,主要存在如下几个问题:
- 首先按照EV的计算公式,由于驱动块使用的是定点后的数据进行计算。即增益最小值为1024。曝光时间最小值假设为1,那么EVMin=2的30次方,是非常大的一个数了。随着增益的增加和曝光时间的增加,在32bit的CPU下,其EV的值有可能存在溢出的问题。虽然也可以通过右移的方式,缩小其范围。但是这样可能存在精度损失;
- 在引言部分,对不同亮度下色温设置不同权重进行插值的时候。由于EV值可能达到10的4次方到7次方大小,而权重大小只有10的2次方大小。因此可能出现之前博文线性插值中当x,y坐标的数值大小数量级相差太大导致的问题所说的问题。
- 对客户来说,曝光行所显示的曝光时间不够直观。客户时常会提到这个曝光行是什么含义?该怎么换算成实际生活中常用的以秒为单位的曝光时间。曝光行随着不同的sensor,整行曝光还是半行曝光的曝光方式的不同,曝光行可以从最小的1到几千。由于不同sensor支持的最大曝光行时间不一样。因此不同sensor之间没有一个统一客观的标准进行在亮度划分。
3.2 用log2对数域划分亮度的必要性
如3.1小节,我们知道用十进制整数域划分亮度存在一些问题。那么,我们可以在对数域划分亮度以弥补整数域中存在的问题吗?
3.1小节中我们知道用整数域中划分亮度,如果分的太细,ISP参数直接爆表;分的太粗,很多亮度范围都分不开,无法有效划分亮度。相反在对数域划分亮度,使用的节点比较少。可以节省ISP参数所占用内存大小,减少图像调试工程师调试工作量;最主要的是非常方便的利用线性插值的方式实现不同亮度权重的插值。
那么,该如何实际一个对数域的亮度划分策略呢?
下一篇博文继续开讲。