4、黑电平校正(BLC):把“纯黑”还给图像
黑电平校正,英文叫 Black Level Correction,简称 BLC。这名字听着挺学术,说白了就是一件事:让传感器在完全没光的时候,输出值归零。
你可能会想,没光不就是 0 吗?哪有这么简单。我刚开始做 ISP 时也这么以为,结果第一次看 raw 图就傻眼了——盖上镜头盖,像素值居然还有 50 多。嗯,这就是黑电平没处理好。
4.1 黑电平是怎么来的?
黑电平不是 bug,它是传感器的物理特性。CMOS 传感器内部有读出电路、放大器、ADC 转换器,这些电路本身就有暗电流和偏置电压。哪怕光子一个都没进来,电路也会产生一个基础输出值。
这个基础值,就是黑电平。通常用 ADC 的码值来表示。比如 10-bit 的 sensor,黑电平可能在 50~100 之间。
关键认知:黑电平不是噪声,它是信号的一个固定偏置。如果不减掉它,整个图像都会偏亮,暗部细节被“抬”起来,对比度也会变差。
我遇到过一家方案商,他们调完图像总觉得暗部发灰,查了半天才发现黑电平没校准,直接用了 sensor 默认值。减掉之后,暗部一下就沉下去了。
4.2 BLC 校正方法:两种主流做法
BLC 校正其实不复杂,核心就两步:测出黑电平值,然后减掉它。但怎么测、怎么减,有讲究。
4.2.1 硬件自动校正(OB 像素法)
很多 sensor 内部会留几行或几列 光学黑像素(Optical Black,OB)。这些像素被金属层遮住,收不到光。sensor 会实时读出这些 OB 像素的平均值,作为当前帧的黑电平参考。
- 优点:实时跟踪,能应对温度和增益变化。
- 缺点:OB 像素数量有限,统计值可能有波动。
- 适用场景:大部分安防监控 sensor 都支持。
4.2.2 软件手动校正(查表法)
如果 sensor 不支持 OB 模式,或者你想更精细地控制,可以在 ISP 里做软件校正。做法是:
- 盖上镜头盖,采集一帧全黑 raw 图。
- 统计整帧或分区域的像素平均值。
- 把这个值写入 ISP 的 BLC 寄存器。
- ISP 在 raw 域直接减去这个值。
我的习惯:做软件校准时,我会采集多帧取平均,避免单帧的随机噪声影响结果。另外,不同增益下的黑电平不一样,最好在多个增益点分别标定。
4.3 温度对黑电平的影响:一个容易被忽略的变量
黑电平不是固定的。它随温度变化,而且变化幅度不小。我做过一个测试,在 25°C 和 60°C 下,同一个 sensor 的黑电平差了将近 20 个码值。
为什么会这样?因为暗电流随温度升高呈指数增长。温度每升高 10°C,暗电流大约翻一倍。黑电平自然也跟着涨。
| 温度 | 黑电平(10-bit) | 暗电流相对值 |
|---|---|---|
| 25°C | 52 | 1.0x |
| 40°C | 62 | ~2.0x |
| 60°C | 72 | ~4.0x |
避坑指南:我曾经在夏天做室外摄像头的调试,白天调好的黑电平,到了晚上温度降下来,画面反而变暗了。后来我加了温度补偿表,每 5°C 一个档位,动态调整 BLC 值,问题才解决。
4.4 调试技巧:让 BLC 更精准
BLC 调试看起来简单,但要做好,有几个细节需要注意。
4.4.1 分通道校正
不同颜色通道的暗电流不一样。R、Gr、Gb、B 四个通道的黑电平可能有差异。如果统一减一个值,会出现偏色。我建议:
- 分别统计每个通道的黑电平。
- 每个通道独立做减法。
- 校正后检查暗部是否还有偏色。
4.4.2 增益联动
模拟增益和数字增益都会放大黑电平。如果只做一次 BLC,增益变化后黑电平会再次出现。正确的做法是:
- 在增益变化后重新计算 BLC。
- 或者把 BLC 放在增益之前做。
4.4.3 不要过减
减多了,暗部细节会被削掉,出现“死黑”。我一般会留 1~2 个码值的余量,保证暗部有层次。
一句话总结:BLC 的目标不是把黑电平减到 0,而是减到 sensor 的噪声基底附近。减多了丢细节,减少了画面发灰。
4.5 BLC 校正流程:一张图看懂
下面这张 SVG 图,把 BLC 的完整流程和关键节点画出来了。你可以把它贴在调试笔记里,随时对照。
4.6 小结:BLC 调好了,图像就稳了一半
黑电平校正虽然只是 ISP 流程中的一个小环节,但它直接影响整个图像的亮度和色彩基调。调好了,暗部干净、对比度自然;调不好,后面做再多 AWB、CCM 都救不回来。
我个人习惯在项目初期就把 BLC 的标定流程固定下来,包括温度补偿表和增益联动表。这样后面调试其他模块时,至少能保证黑电平是准的,不会出现“调了半天发现是黑电平没搞对”的尴尬。
嗯,这一章就到这里。记住一句话:黑电平不是噪声,它是信号的一部分。处理好它,图像就成功了一半。