安防监控黑电平与镜头阴影校正实战 - 第2节
2. 黑电平校正(BLC)基础概念
黑电平校正,圈内人常叫 BLC(Black Level Correction)。说白了,就是告诉传感器:什么才算真正的“黑”。
你想想看,一个像素完全没光照时,理想输出应该是 0。但现实呢?传感器有暗电流,有读出噪声,输出值往往在 16、32 甚至 64 左右。这个底数,就是黑电平。
我刚开始做 ISP 时,觉得 BLC 不就是减个固定值嘛,简单。后来被一个项目狠狠教育了——画面暗部偏紫,怎么调都调不回来。查了三天,才发现是黑电平没对准,不同区域的底数不一样。
全局黑电平:一刀切的做法
全局黑电平,就是对整幅图像用一个固定值做减法。比如 sensor 输出 10bit RAW,黑电平标称 64,那就所有像素都减 64。
优点很明显:
- 实现简单,硬件开销小
- 处理速度快,不占带宽
- 适合低端 sensor 或入门级方案
缺点也致命:
- 忽略 sensor 不同区域的差异
- 暗角区域容易偏色
- 温度变化时误差大
局部黑电平:精细到区域的校正
局部黑电平,也叫逐行黑电平或区域黑电平。它把 sensor 的像素阵列分成若干区域,每个区域独立计算黑电平值。
怎么分?常见两种方式:
- 行级 BLC:每行像素都有自己的黑电平,从该行的光学黑像素(OB,Optical Black)中提取。
- 网格 BLC:把画面分成 M×N 网格,每个网格独立计算,然后插值到每个像素。
| 对比项 | 全局黑电平 | 局部黑电平 |
|---|---|---|
| 精度 | 低,全图统一 | 高,逐区域独立 |
| 硬件开销 | 小,一个减法器 | 大,需要存储和插值 |
| 温度适应性 | 差,温漂明显 | 好,实时跟踪 |
| 偏色风险 | 高,尤其暗角区域 | 低,各通道独立校正 |
| 适用场景 | 低端 IPC、室内固定光照 | 高端球机、低照度、宽动态 |
为什么局部黑电平更准?
原因就一个:sensor 的暗电流不是均匀的。
影响暗电流的因素很多:
- 温度梯度:芯片中心热,边缘冷,暗电流差好几倍
- 工艺偏差:同一片 wafer 上不同 die 的底噪都不一样
- 读出路径:列放大器增益差异,导致列间黑电平偏移
- 光照串扰:强光区域的电荷可能泄漏到暗区
全局 BLC 只取一个平均值,相当于用“平均身高”给所有人做衣服——高个穿短裤,矮个穿长袍。局部 BLC 则是量体裁衣,每个区域都有自己的“尺码”。
BLC 在 ISP Pipeline 中的位置
这个问题,面试时经常被问到。我直接画个图给你看。
从图上你能看到,BLC 是 RAW 域的第一个处理模块。为什么?
因为后面所有模块——LSC、AWB、去噪、锐化——都假设输入数据是“零基准”的。如果黑电平没校正好,后面的增益和矩阵运算会把误差放大好几倍。
BLC 在硬件 pipeline 中的具体位置
以主流安防 SoC 为例,典型的 RAW 处理顺序是:
- Sensor 输出 RAW10/RAW12 —— 此时数据包含黑电平偏移
- BLC 模块 —— 减去黑电平,恢复零基准
- 坏点校正(DPC) —— 修复 sensor 坏点
- 镜头阴影校正(LSC) —— 补偿镜头暗角
- 去马赛克(Demosaic) —— 插值成 RGB
- 白平衡(AWB) —— 校正色温
- 颜色校正矩阵(CCM) —— 颜色还原
- Gamma / 去噪 / 锐化 —— 后续处理
注意第 2 步和第 3 步的顺序。有些方案把 DPC 放在 BLC 前面,我个人不建议这么做。因为坏点检测依赖像素间的相对关系,黑电平没校准时,暗区的坏点容易被漏检。
BLC 参数从哪里来?
BLC 的参数不是拍脑袋定的。通常来自两个途径:
- Sensor 寄存器读取:很多 sensor 内部有 OB 像素,芯片会自动计算黑电平,ISP 通过 I2C 读取即可。
- 标定数据:在产线上用均匀黑场(盖上镜头盖)采集 RAW 图,统计每个区域的平均值,写入 flash。
我个人更倾向于第二种。因为 sensor 寄存器读到的值往往是全局平均,精度不够。产线标定可以做到逐区域、逐通道的精细校正。
嗯,关于 BLC 的基础概念,就先聊到这儿。记住一句话:黑电平是 ISP 的基石,基石不稳,后面全是白搭。