2. 黑电平校正(BLC)调优:从暗电流到暗部细节

黑电平校正,圈里人常叫 BLC。说白了,就是告诉相机“什么是真正的黑色”。

你想想看,传感器在完全没光的时候,输出值不应该是 0。为什么?因为有暗电流。暗电流就像水管没开龙头但一直在渗水,虽然量小,但会抬高整个画面的底噪。BLC 要做的,就是把这块“渗水”减掉,让黑色回归黑色。

2.1 BLC 原理:为什么黑色不是 0?

理想传感器,遮光时输出为 0。但现实世界没这么完美。

暗电流是半导体热激发产生的电子。温度每升高 6-8°C,暗电流翻一倍。我做过一个极端测试:把 sensor 加热到 60°C,黑电平直接漂了 30 多个 DN(数字码值)。如果不做 BLC,整个画面会发灰,暗部细节全被埋掉。

核心公式:
校正后像素值 = 原始像素值 - 黑电平基准值
注意:减完后要做 clamp(钳位),防止出现负值。

黑电平基准值怎么来?sensor 内部有光学黑区(OB,Optical Black)。这些像素被金属层遮挡,收不到光,只反映暗电流水平。ISP 会采样这些 OB 像素,取平均或中位数,作为当前帧的黑电平参考。

2.2 暗电流补偿:温度与增益的博弈

暗电流不是固定的。它随温度、曝光时间、模拟增益变化。我见过不少工程师只做静态 BLC,结果夏天户外画面暗部发紫,冬天室内又偏绿。这就是没做动态补偿。

影响因素 变化趋势 补偿策略
温度升高 暗电流指数上升 查温度-偏移 LUT,实时调整
曝光时间变长 暗电流累积增加 按曝光时间线性缩放补偿量
模拟增益增大 暗电流被同步放大 补偿量乘以当前增益系数
我的经验: 8K HDR 场景下,增益跨度很大(1x ~ 32x)。我习惯在标定阶段采集 3 个温度点(-10°C、25°C、60°C)、5 个增益档位的 OB 数据,拟合出一个三维补偿曲面。虽然标定工作量大了点,但效果立竿见影。

2.3 BLC 校准流程:从 OB 采样到参数固化

校准流程不复杂,但细节决定成败。我把它拆成 5 步:

  1. 遮光采集:盖上镜头盖,确保完全遮光。最好在暗室进行,避免漏光。
  2. 多帧平均:采集 16~32 帧,逐像素取平均,消除随机噪声。
  3. OB 区域统计:提取 sensor 指定的 OB 行/列,计算均值 μ 和标准差 σ。
  4. 异常剔除:剔除 |x - μ| > 3σ 的坏像素,防止缺陷点污染基准值。
  5. 参数写入:将校准后的黑电平值写入 sensor 寄存器或 ISP 参数表。
注意: 有些 sensor 的 OB 区域边缘存在渐晕效应。我曾经踩过这个坑——直接取整行 OB 平均,结果边缘像素拉低了基准值,导致画面中心偏暗。后来改为只取 OB 区域中间 80% 的像素做统计,问题解决。

下面这张图展示了 BLC 校准的完整数据流:

BLC 校准数据流与补偿逻辑 遮光采集 多帧平均 OB 区域统计 异常剔除 参数写入 温度/增益查表 实时 BLC 补偿 → 暗部细节保留 说明:静态校准 + 动态补偿,才能在全温度、全增益范围内保持黑电平稳定

2.4 BLC 对暗部细节的影响:过犹不及

BLC 做过头了,暗部细节会丢失。减得太多,原本微弱的信号被当成暗电流砍掉,暗部变成死黑。减得太少,黑电平抬升,暗部发灰,对比度下降。

我调过一款 8K 安防相机,客户投诉夜间画面“黑成一团”。查 log 发现 BLC 补偿量偏大了 8 个 DN。暗部原本只有 20~30 DN 的信号,被减到 12~22 DN,再经过 gamma 和 LUT 映射,10 DN 以下的细节全丢了。

调优建议:
  • 用示波器或直方图工具观察暗部区域(如 0~64 DN)的分布。如果直方图在 0 处出现“削顶”,说明 BLC 过冲。
  • HDR 多帧合成场景下,长帧(Long exposure)的 BLC 要单独标定。短帧暗电流小,长帧暗电流大,共用一套参数会出问题。
  • 保留 2~3 个 DN 的“安全余量”。宁可让黑电平略高一点(画面微灰),也不要砍掉暗部纹理。

嗯,这里要注意:BLC 不是一锤子买卖。Sensor 老化后暗电流会变化。我建议产线每 3 个月做一次 BLC 复校,或者加入开机自校准流程——遮光 1 秒,自动更新 OB 基准值。

避坑指南: 我曾经在 HDR 融合后做 BLC,结果发现亮帧和暗帧的黑电平不一致,融合边界出现“鬼影”。后来把 BLC 移到融合之前,每帧独立校正,问题消失。记住:BLC 要放在 ISP 流水线的最前端,在去噪、增益、融合之前做。

最后说一句:BLC 调得好,暗部细节就保住了。调不好,后面所有模块都在“垃圾数据”上做文章,效果不可能好。这是 ISP 调优的基石,值得花时间打磨。