3. 黑电平校正(BLC)

黑电平校正,简称 BLC。这名字听起来有点学术,但说白了,就是告诉相机:「什么是真正的黑色」。

你想想看,一个像素在完全无光的情况下,输出值应该是 0,对吧?但现实世界没这么理想。传感器本身有暗电流,读出电路有偏置,ADC 也有底噪。结果就是:你盖上镜头盖,拍出来的「全黑图」,像素值可能飘在 50、100,甚至更高。

如果不把这部分底数减掉,整幅图像就像蒙了一层灰雾。暗部细节全被吞掉,动态范围也被压缩。我早期调一个全局快门传感器时,就吃过这个亏——图像总觉得对比度不够,调了半天增益和曲线,最后发现是 BLC 没对准。

3.1 黑电平的物理原理

黑电平的根源,主要来自两个地方:

  • 暗电流:硅基半导体在热激发下产生的电子-空穴对。温度每升高 10°C,暗电流大约翻一倍。这是物理规律,躲不掉。
  • 读出电路偏置:为了确保 ADC 能正确量化微弱信号,传感器会在像素输出上叠加一个固定偏置电压。这个偏置就是黑电平的「人为成分」。

所以,黑电平 = 暗电流贡献 + 读出偏置。前者随温度和时间变化,后者相对固定。

关键认知:黑电平不是噪声,是偏移。噪声是随机的,偏移是固定的。BLC 的任务就是把这个固定偏移找出来、减掉。

3.2 校正方法:从硬件到软件

校正方法分两大类。我按实际工程中的使用频率排序:

方法 原理 适用场景 我个人的评价
OB(Optical Black)行/列校正 传感器边缘有被遮挡的像素,用它们的平均值作为黑电平参考 几乎所有工业相机 最稳定,硬件自带,首选
暗场帧校正 盖上镜头盖拍一帧全黑图,逐像素记录偏移值 高精度测量、科学相机 精度最高,但需要定期更新
动态 BLC 实时统计图像最暗区域的均值,动态调整减除量 消费级、安防相机 灵活,但容易被高亮场景误导
固定值校正 直接减去一个预设常数 快速验证、低端方案 不推荐,温度一变就偏

工业相机里,OB 校正用得最多。传感器会在像素阵列的顶部或左侧留出几行/几列,用金属遮光层盖住。这些像素收不到光,但电路特性与有效像素完全一致。读出时,ISP 先取 OB 区域的平均值,然后从整帧图像中减去这个值。

工程小技巧:OB 区域通常有 4~16 行/列。取平均时,建议先剔除异常值(比如坏点),再做均值。我曾经遇到过一个 OB 行里有颗坏像素,导致整帧图像偏暗了 2 个 DN,排查了整整一天。

3.3 暗电流的影响与补偿

暗电流是 BLC 里最头疼的变量。它随温度、曝光时间、增益变化。同一个传感器,30°C 和 60°C 下的暗电流可能差 4~8 倍。

我做过一个实验:把相机放在恒温箱里,从 -10°C 升温到 70°C,每 5°C 拍一张全黑图。结果如下:

温度 (°C) 暗电流 (e-/s) 黑电平偏移 (DN @ 12bit)
-10 0.8 32
10 3.2 38
30 12.5 52
50 48.0 96
70 185.0 280

看到没?70°C 时的黑电平偏移是 -10°C 时的近 9 倍。如果不做温度补偿,冬天调好的参数,夏天直接废掉。

补偿策略一般有两种:

  • 查表法:在产线标定不同温度下的黑电平值,运行时根据传感器温度查表插值。
  • 实时 OB 跟踪:利用 OB 像素实时计算当前帧的黑电平,不依赖温度模型。

我个人更倾向实时 OB 跟踪。查表法需要大量标定工作,而且传感器老化后曲线会漂。实时 OB 虽然会增加一点点硬件开销,但鲁棒性好得多。

避坑指南:我曾经在一个项目中用了查表法,标定做了 3 天,结果半年后客户反馈图像偏色。排查发现是传感器老化导致暗电流曲线变了。从那以后,只要硬件支持,我一定用实时 OB。

3.4 实战参数调节

好了,理论说完了,咱们上手调参数。以我常用的 Sony IMX 系列传感器为例,BLC 相关的寄存器通常有这几个:

// 伪代码示例:IMX 系列 BLC 寄存器配置
// blc_target: 目标黑电平值(通常设为 0 或 64)
// blc_ob_rows: 使用的 OB 行数(2~8)
// blc_clamp_enable: 钳位使能(防止减过头)

void BLC_Config(uint16_t blc_target, uint8_t ob_rows, bool clamp_en) {
    write_reg(0x3000, blc_target);      // 设置目标黑电平
    write_reg(0x3002, ob_rows << 4);    // 选择 OB 行
    write_reg(0x3004, clamp_en ? 0x01 : 0x00);
}

调节步骤,我一般按这个流程走:

  1. 获取原始数据:关闭所有 ISP 模块(包括 BLC),拍一张全黑图,保存 raw 数据。
  2. 统计 OB 区域:计算 OB 像素的均值 μ 和标准差 σ。
  3. 设置目标值:目标黑电平通常设为 0,但有些 ISP 要求保留少量偏置(比如 64/1024),避免减出负值。
  4. 验证:开启 BLC 后,再拍一张全黑图,检查有效像素区的均值是否接近目标值。
  5. 温度测试:在常温、高温、低温下重复步骤 1~4,确认校正效果稳定。

实战经验:调节时别只看均值,还要看最小值。如果开启 BLC 后出现了大量负值像素(raw 数据下溢),说明减过头了。这时候要么提高目标黑电平,要么启用钳位功能。

3.5 BLC 与后续模块的联动

BLC 是 ISP 流水线的第一关。它做不好,后面的模块全得跟着遭殃:

  • 增益(Gain):BLC 没减干净,增益会把残留的偏移一起放大,暗部噪声暴增。
  • 白平衡(AWB):黑电平偏移会导致 R/G/B 通道的暗部响应不一致,白平衡在低照度下偏色。
  • Gamma 校正:黑电平偏移在 Gamma 曲线上的影响是非线性的,暗部细节直接丢失。

所以,我每次调 ISP 参数,第一步永远是确认 BLC 是否准确。BLC 不准,后面的活全是白干。

BLC 校正流程与影响链路 传感器 Raw 数据 黑电平校正 (BLC) OB 行均值 → 减除偏移 暗电流补偿 + 钳位保护 增益 (Gain) 白平衡 (AWB) Gamma 校正 BLC 不准的连锁反应 BLC 偏移 → 增益放大暗部噪声 → 白平衡低照偏色 → Gamma 丢失暗部细节 一句话:BLC 是 ISP 的基石,基础不牢,地动山摇

嗯,BLC 这部分内容就这些。核心就三件事:理解偏移来源、选对校正方法、做好温度补偿。参数调节本身不复杂,但验证环节一定要做足。尤其是温度测试,别偷懒。