高通Camera Tuning Black level分析

黑电平(Black Level),也称作:Optical Black,很多人也称呼为OB,指的是光学暗区矫正,也就是黑色的最低点,指在经过一定校准的显示装置上,没有一行光亮输出的视频信号电平。定义图像数据为0时对应的信号电平。也可以比喻我们平时在称量物品的之前的较0处理,

因为sensor本身存在暗电流,导致在没有外部光线照射的时候,也有一定的输出电压。最终sensor的输出需要减去这个数值,

一般我们知道,sensor上会预留了一些完全没有曝光的像素,在上下两端都有一些未曝光的像素行,通过读取这些像素值的大小,可以实时得到optical black level,因此,一般在从sensor厂商那边的说法更称呼为OB,此时sensor的输出RAW = sensor input – optical black level,每个sensor都有OB区域,CCD sensor初期成像效果较差,它会把top OB 和 side OB暴露给isp使用,这样isp可以自己估算不同区域得到不同的black level值,再分别处理。然而ob并不能真实的反映黑电平的值,因为尽管这些black lines已经充分考虑到了不同column的OB不同,但因为在sensor边缘的black lines会受到PCB layout、电源纹波、模组结构设计等等因素的影响,故此时OB扣除的还是可能不准确,有的sensor厂商可能不会使用这个方法,因此目前很少有ISP或sensor去使用ob区域进行计算,每家都会使用sensor内部的isp根据自家设计的算法去动态实时计算optical black level值,然后在sensor输出的时候把它去掉。

由于考虑到sensor输出的信噪比,故一般sensor输出数据时又会垫上一个基底pedestal,那就是此时sensor的RAW = sensor input – optical black level + pedestal。对于芯片处理来说,一般拿到的就是这个数据,此时需要在ISP处理流程的起始部分减去这个基底。在ISP内部一般叫做BLC,即Black Level Correct黑电平校正。

关于增加pedestal 基底可以增加输出信噪比的缘由:

  • CMOS传感器采集的信息经过一系列转换生成原始RAW格式数据。以8bit数据为例,单个pixel的有效值是0~255,但是实际AD芯片(模数转换芯片)的精度可能无法将电压值很小的一部分转换出来,因此,sensor厂家一般会在AD的输入之前加上一个固定的pedestal,使输出的pixel value在16(每家不同)~255之间,目的是为了让暗部的细节完全保留,当然同时也会损失一些亮部细节,加了基底,高光的信号会有溢出现象,但对于图像来说,但考虑到人眼对于画面暗处更敏感,我们的关注度更倾向于暗部区域,ISP后面会有很多增益模块(LSC、AWB、Gamma等),因此亮区的一点点损失是可以接受的。
  • 因为针对暗部区域,我们有了基底,可以更好的配合raw降噪算法,一般的raw域降噪算法都是双边滤波器,在高通平台上是ABF模块,有了基底,才能更好的计算和过滤暗区的噪声,提高信噪比。

综上,黑电平校正可能是做过两遍的,第一遍做在了sensor内部,第二遍做在了芯片ISP处理的开始。

black level的分析

因为pedestal基底是固定增加在sensor输出上的,变化波动的是OB的值,因此我们

分析研究的是Sensor Analog gain和温度对OB的影响,

不同的Sensor Analog gain,对OB的影响:

从不同的AG可以明显的观察到OB的分布不同

black level的分析

随着AG的增加,尤其是高倍gain,对于整幅画面中没有明显的亮区暗区变化的,其分布还是比较集中的,但是针对一副画面中既有亮区,又有暗区部分的时候,OB的平均值可能没变,但是其波动肯定会变大,尤其是暗区,是因为AG的增加,导致噪声的影响变大,所以OB的波动变大,这个时候sensor内部就不可能会增加ob均值去扣除,但是目前来看,各家sensor在扣除OB上,应该是均值扣除法,会导致暗部区域有偏色现象,而且是偏紫的,原因是因为OB的波动(方差)加大,如果再按照OB的均值扣除,那么就可能会有较多的残余,且RGB分量明显不平衡,后又受白平衡(Rgain、Bgain)的影响,故画面暗处会偏紫,

不同的温度,对OB的影响:

随着环境温度的变高,其OB的偏移也在加大,在去除OB的时候要考虑温度的影响,这个时候就要考研各家senosr的设计,工艺,算法上能力的时候了;同样道理,不考虑温度,其波动很大,RGB分布不均,也会导致偏色;

sensor端如何做OB ?实际上还是把top OB 和 side OB暴露给sensor内部isp使用,这样sensor内部isp可以估算图像不同区域的black level值,再分别处理。

现在的cmos sensor内部的blc算法实际上也是利用了top OB和side OB,top 和side 表示sensor不同位置的Optical Black pixels(被遮掩了,无光照)

内部的BLC算法有没有根据温度的不同扣除ob不同,这个得看各家算法了;

black level算法设计

Black level correction基本上都在ISP来做,去掉那个pedestal基底即可;

BLC各个通道均需要校正,目前比较常用的方法有:

  1. 中值
  2. 全局均值(几乎各家常用做法)
  3. 局部均值
  4. 自定义

高通平台在Chromatix7上关于black level设计有三个地方:

black level算法设计

Pedestal、Linearization、BLS(Black Level Subtraction),

而这个Linearization模块,是有扣除black level的功能,因此Pedestal模块就不用了,而BLS是Black Level Subtraction的简称,功能就是再次去掉一次black level,比较简单,其参数参数就在Linearization模块中使能并设置一个值就可以;

由于sensor的pedestal是固定的值,目前的ISP设计,都是采用去除全局均值的做法,当然会根据不同的校准采样,扣除的值根据不同的gain会不同,

若ISP多扣一点OB,一是会导致awb在暗区偏绿,二是会导致噪声形态被破坏;

若ISP分通道扣除OB,会导致不同的色温下,偏色情况不同;

以上,在高通的ISP pipeline,可以在两个地方去除black level值,

一是在black level correction地方,二是abf后的bls部分,前者会整体清晰度好,因为raw域降噪程度少,后者整体噪声更好,因为满足raw域降噪算法,降噪更多;

当前在高通平台上的解决思路是,在ABF中,我们前期在black level中少去扣除一点基底,留一些给ABF,因为会根据不同的噪声分布,做双边滤波器,可以优化这种暗区RGB分布不均的情况,进而减少偏色现象,其后再在BLS模块中把剩下的基底再扣除掉;

black level参数的校准和region区分

高通平台是在Linearization模块去做校准pedestal值,是14bit的数值,如果不打开BLS,那么Linearization Values会显示所有的值,打开BLS会进行分配;

black level参数的校准和region区分

这里的校准建议使用sensor推荐的值,一般来说都是10bit 64,其Linearization模块的14bit是1024,

打开BLS的话,Linearization是64,BLS是960;

有关black level的校准,一般来说是验证不同的ISO或者强制设置不同的最大gain(通过修改ae table),拍摄全黑环境下,照片的RGrGbB四通的value值的一致性问题;

原因:sensor在不同的ISO下black level都应该一样,或者波动不大最好;但是由于各家sensor设计和工厂工艺差异,每家或者每款sensor的black level都会不一样;一般ob差异(最大减去最小)在超过±0.5(8bit)都会觉得偏差比较大;另外,逻辑电路可能会sensor感光区的某个部位,也会导致sensor的black level值不平;

方法:在gain:1x,2x,4x,8x,16x,32x,64x(计划值),拍raw,使用高通的chromatix计算分析其raw的black level值;

注:这里个人认为,校准的目的是看其模组设计和sensor输出的black level是否稳定可靠,如果四通道差异较大,

在高通的这三个模块中,都是可以根据不同的region做不同的设置,region的设置也建议按照上述的gain进行区分;

有个尝试:在户外的region,4x以下,不建议开启BLS,可以尽可能保证清晰度优先;

在4x以上再开启BLS,控制噪声;

black level测试验证

一般最简单的测试是拍各个锁定的gain下,全黑遮住镜头的JPG照片,看下其数值是否为0;一般在0~4范围内,BLC校准的都还可以;

另外在实际场景中,需要去拍摄弱光下、画面有亮区暗区的情况,有没有明显偏色现象;

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程