4、黑电平校准(BLC):BLC的作用、全局与局部BLC算法、工业场景下的BLC调优技巧

黑电平校准,圈里人常叫 BLC(Black Level Calibration)。

说白了,就是告诉相机:「什么才是真正的黑色」。

我刚开始接触 ISP 时,觉得这步很简单——不就是减个固定值嘛。直到有一次在暗光产线上,产品出现大面积偏色,我才意识到:BLC 没做好,后面整条 ISP 管线都是白搭。

4.1 BLC 到底在干什么?

先看一个现象:你把镜头盖死,理论上像素值应该是 0。但实际读出来的,往往是 16、32 甚至 64 这样的数值。

这些「不该有的底数」,就是黑电平。

黑电平的来源主要有三个:

  • Sensor 暗电流: 半导体本身的热噪声,温度越高越明显。夏天产线比冬天容易飘,就是这个原因。
  • ADC 偏移: 模数转换器不是理想器件,会有固定的直流偏置。
  • 模拟增益引入: 增益一拉,噪声也跟着放大,黑电平整体上移。

如果不做 BLC,暗部会发灰、发雾,而且颜色会偏——因为 RGB 三个通道的黑电平往往不一样。

BLC 的核心目标就两个:

  1. 把「纯黑」像素校准到 0 附近。
  2. 保证暗区的信噪比不恶化。

嗯,这里要注意:不是减得越干净越好。减过头了,暗部细节会被切掉,出现「死黑」。

4.2 全局 BLC:简单但够用

全局 BLC,就是对整幅图像减去同一个值。

计算公式:

P_out = max(P_in - BLC_offset, 0)

这个 BLC_offset 怎么来?我习惯的做法是:

  1. 盖上镜头盖,采集 100 帧暗场图像。
  2. 对每帧取平均,再对 100 帧取平均。
  3. 分别统计 R、Gr、Gb、B 四个通道的均值。
  4. 取这些均值的整数部分作为 offset。

我的经验: 工业相机通常用 10bit 或 12bit RAW 数据。10bit 下,BLC_offset 一般在 16~64 之间。如果超过 100,建议先检查 sensor 配置或硬件设计。

全局 BLC 的优点是计算量小、硬件实现简单。缺点是——它假设整个 sensor 的暗电流是均匀的。

但现实不是这样。

4.3 局部 BLC:应对不均匀的暗电流

我在项目中遇到过一款 CMOS sensor,左上角比右下角暗电流高了 15 个 DN。用全局 BLC,左上角校正后偏紫,右下角偏绿。这就是典型的「暗电流不均匀」。

局部 BLC 的思路是:把图像分成 M×N 个网格,每个网格独立计算 offset。

实现流程:

  1. 采集暗场图像,分块统计每个网格的均值。
  2. 生成一张 offset 矩阵(M×N)。
  3. 对当前帧,根据像素坐标插值出对应的 offset 值。
  4. 逐像素减去插值后的 offset。

插值方式我推荐双线性插值,效果和性能比较均衡。如果你用 FPGA 实现,可以用最近邻插值——省资源,但网格边界会有跳变。

注意: 局部 BLC 的网格数量不是越多越好。网格太密,会把 sensor 的固定噪声也当成暗电流校正掉,反而引入新的条纹。我一般控制在 8×6 到 16×12 之间。

4.4 工业场景下的 BLC 调优技巧

工业相机和手机相机不一样。工业场景对一致性、稳定性要求极高。下面是我总结的几个实战技巧。

4.4.1 温度补偿:BLC 的「天敌」是温度

暗电流随温度指数增长。我测过一组数据:

温度(°C) 暗电流均值(DN) 偏移量变化
25 24 基准
45 38 +14
65 67 +43

如果不做温度补偿,相机开机 10 分钟和开机 1 小时的图像质量完全不同。

我的做法:

  • 在 sensor 附近贴一个温度传感器。
  • 标定 3~5 个温度点的 BLC offset。
  • 运行时根据实时温度线性插值。

4.4.2 增益联动:BLC 不是静态的

模拟增益一变,黑电平也跟着变。我见过有人只标定了一组 BLC 参数,结果增益从 1x 调到 4x 时,暗部直接偏色。

建议: 在产线标定时,至少覆盖 1x、2x、4x、8x 四个增益点。每个增益点单独标定 BLC offset。

4.4.3 暗场更新策略

有些场景不允许你频繁盖镜头盖。比如在线检测设备,一盖盖子就停产。

我推荐两种方案:

  • 定时更新: 每天开机后自动采集一次暗场,存入非易失存储器。
  • 动态检测: 检测到画面整体亮度低于某个阈值(比如 1% 像素值),自动触发暗场采集。

避坑指南: 我曾经在一条产线上发现,BLC 参数每周都在缓慢漂移。排查了三天,最后发现是 sensor 的散热风扇积灰了。定期清洁散热系统,比调算法更管用。

4.5 BLC 在 ISP 管线中的位置

下面这张图展示了 BLC 在整个 ISP 管线中的位置和它与其他模块的关系。

BLC 在 ISP 管线中的位置 RAW 输入 BLC 去噪 AWB / 去马赛克 温度传感器 增益联动表 关键说明: • BLC 必须在去噪之前执行,否则噪声统计会包含暗电流偏移。 • 温度补偿和增益联动是工业场景的标配,消费级相机往往省略。 • 局部 BLC 的网格参数需要与 sensor 的暗电流分布特性匹配。

4.6 调优检查清单

每次做完 BLC 调优,我都会过一遍这个清单:

  • 暗场均值: 校正后 R/Gr/Gb/B 四个通道的均值是否接近 0?偏差是否在 ±2 DN 以内?
  • 暗场均匀性: 四角与中心的差值是否小于 3 DN?
  • 温度稳定性: 从 25°C 升温到 65°C,暗场均值漂移是否在可控范围?
  • 增益一致性: 1x 到 8x 增益下,暗部是否出现偏色?
  • 死黑检查: 暗部细节是否被切掉?直方图在 0 附近是否有堆积?

最后提醒一句: BLC 不是「一次标定,终身使用」的参数。Sensor 会老化,镜头会污染,环境会变化。我建议每季度重新标定一次,或者在固件中预留在线校准接口。