3、RAW域处理(一):黑电平校正(BLC)原理与调试、镜头阴影校正(LSC)原理与调试

各位好,欢迎来到RAW域处理的第一讲。说实话,RAW域是整个ISP pipeline的基石,你前面要是没打好基础,后面做AWB、CCM、Gamma都会遇到各种莫名其妙的问题。今天咱们就先把黑电平校正(BLC)和镜头阴影校正(LSC)这两个最基础、也最容易出坑的模块讲透。

3.1 黑电平校正(BLC)

3.1.1 为什么要有黑电平?

先问一个问题:你把镜头盖盖上,sensor拍出来的像素值应该是0吗?

答案是:不是0。因为sensor本身有暗电流,ADC也有一个固定的偏置电压。这些因素叠加起来,就会让全黑画面下每个像素都有一个非零的读数。这个读数,就是黑电平(Black Level)。

我刚开始做ISP调试那会儿,拿到一块新的sensor,直接拿全黑图看直方图,发现均值在64左右(12-bit raw)。当时我还以为是sensor坏了,后来问了FAE才知道,这就是正常的黑电平值。

核心概念:黑电平校正的目的,就是把全黑画面下的非零读数减掉,让“真正的黑”回到0附近。这样后续的增益、Gamma等处理才不会把噪声也一起放大。

3.1.2 BLC的两种实现方式

实际项目中,BLC主要有两种做法:

方式 原理 适用场景 优缺点
全局固定值 从每个像素减去一个固定的offset sensor一致性好的场景 简单、快,但无法应对行间差异
动态OB(Optical Black) 利用sensor边缘的遮光像素实时计算offset 温度变化大、增益变化大的场景 自适应强,但需要硬件支持OB区域

我个人习惯用动态OB的方式。为什么呢?因为温度一变,暗电流就跟着变。你想想看,手机在冬天室外和夏天车内,sensor温度能差30度以上,固定offset根本扛不住。

3.1.3 调试步骤与参数

BLC调试其实不复杂,但有几个关键点要注意:

  1. 采集全黑图:盖上镜头盖,用你目标场景的增益和曝光时间拍一张raw图。
  2. 计算均值:取OB区域或者全图的像素均值。注意要排除坏点和边缘。
  3. 设置offset:把均值作为offset写入寄存器。
  4. 验证:再拍一张全黑图,确认校正后均值接近0。

小技巧:如果你用的是12-bit raw,校正后的黑电平目标值建议设在16~32之间,不要硬拉到0。留一点点余量,可以避免后续处理中因为减过头导致负值被截断。

3.1.4 避坑指南

我曾经踩过的坑:有一次调试一款高灵敏度sensor,全黑图校正后看起来没问题,但一开灯拍,暗部出现了明显的偏色。查了两天才发现,BLC的offset是按R/G/B通道分别设置的,但sensor的暗电流在不同通道上不一样。后来我改成每个通道独立计算offset,问题就解决了。

所以,BLC调试一定要分通道做。别偷懒。

3.2 镜头阴影校正(LSC)

3.2.1 阴影是怎么来的?

你拍一张纯白均匀的墙面,看看四角是不是比中心暗?这就是镜头阴影(Lens Shading),也叫亮度均匀性问题。

原因主要有两个:

  • 光学原因:镜头中心到边缘的光路长度不同,边缘的光强衰减更严重(cos⁴ law)。
  • 像素角度原因:边缘像素接收光线的角度更大,微透镜效率下降。

说白了,就是镜头本身的光学特性决定了边缘天生比中心暗。LSC就是要把边缘的增益提上来,让整幅画面亮度均匀。

3.2.2 LSC的数学模型

LSC的核心是一个增益矩阵。对每个像素(x, y),乘以一个对应的增益值G(x, y):

校正后像素值 = 原始像素值 × G(x, y)

这个增益矩阵怎么来?通常有两种方式:

方式 描述 存储开销 精度
网格式(Mesh) 在图像上均匀取N×N个网格点,每个点存一个增益值,中间区域插值 中等 高
多项式拟合 用多项式函数拟合增益曲面,存系数 低 中等

我建议用网格式。虽然存储开销大一点,但现在的sensor都有硬件插值引擎,精度高、调试也直观。

3.2.3 调试流程

LSC调试的核心是采集一张均匀的灰卡图。具体步骤:

  1. 准备灰卡:用DNP或者X-Rite的均匀灰卡,保证光照均匀度在95%以上。
  2. 拍摄raw图:用你目标的光源(D65、A光源等)和增益拍一张。
  3. 计算增益:以图像中心区域的均值为基准,计算每个网格点的增益值。
  4. 写入参数:把增益矩阵写入sensor的LSC寄存器。
  5. 验证:再拍一张,检查四角亮度是否和中心一致。

关键指标:校正后的亮度均匀性,一般要求四角与中心的偏差在5%以内。高端安防或医疗设备要求更高,可能在2%以内。

3.2.4 分通道校正

LSC不只是亮度问题,还有颜色问题。因为不同波长的光在镜头边缘的衰减程度不一样,所以R、G、B通道的阴影曲线也不同。

如果不做分通道校正,就会出现边缘偏色——通常是边缘偏绿或偏紫。

我记得有一次调试一款广角镜头,中心颜色正常,但四角明显偏紫。一开始以为是AWB的问题,后来发现是LSC的R通道增益不够,边缘的R通道比G/B弱,导致偏紫。单独调整R通道的LSC网格后,问题就解决了。

建议:LSC一定要分R、Gr、Gb、B四个通道独立调试。不要只调亮度通道,否则颜色均匀性会出问题。

3.3 BLC与LSC的联动关系

这里有个容易忽略的点:BLC和LSC的处理顺序会影响最终效果。

标准的ISP pipeline中,BLC在LSC之前。为什么?因为LSC是对像素值做乘法,如果黑电平没减干净,LSC会把黑电平的残差也放大,导致暗部出现明显的增益噪声。

你想想看:如果黑电平残差是10个DN,LSC在边缘的增益是2倍,那边缘的暗部噪声就变成了20个DN。这就是为什么有些画面边缘噪点特别明显的原因之一。

注意:调试时一定要先调好BLC,再调LSC。顺序不能乱。我曾经见过一个项目,工程师先调LSC再调BLC,结果每次调完LSC,BLC的offset又变了,来回折腾了两周才找到原因。

3.4 本章知识结构

下面这张图把BLC和LSC的核心逻辑串起来了,方便你理解整个流程:

RAW域处理:BLC与LSC知识结构图 RAW域处理:BLC与LSC知识结构 Sensor RAW 数据 黑电平校正 (BLC) 减掉暗电流 + ADC偏置 分通道独立offset 镜头阴影校正 (LSC) 网格增益矩阵 × 像素值 分R/Gr/Gb/B四通道 校正后 RAW 数据 关键要点 • BLC先于LSC • 分通道独立调试 • 全黑图调BLC • 均匀灰卡调LSC • 注意温度影响 • 验证四角均匀性 • 目标偏差<5% 常见避坑 ⚠ 不要用固定offset ⚠ 不要忽略温度变化 ⚠ 不要先调LSC再调BLC ⚠ 不要只调亮度通道 ⚠ 不要用非均匀光源

3.5 调试参数速查表

最后,我把BLC和LSC的常用调试参数整理成一个速查表,方便你现场参考:

模块 参数名称 典型值范围 调试建议
BLC R通道offset 0~255 (12-bit) 根据全黑图均值设定
Gr通道offset 0~255 与Gb通道尽量接近
Gb通道offset 0~255 与Gr通道尽量接近
LSC 网格行数 5×5 ~ 17×17 广角镜头用高密度网格
网格列数 5×5 ~ 17×17 与行数保持一致
中心增益 1.0 固定为1.0,作为基准
边缘增益 1.0 ~ 4.0 根据镜头衰减程度调整

好了,BLC和LSC的核心内容就这些。这两个模块虽然基础,但直接影响整幅画面的亮度和颜色均匀性。调试时多花点时间把基础打牢,后面做AWB和CCM会省心很多。