ISP 黑电平校正(BLC, Black Level Calibration/Correction)
论文精读与工程整理
源论文 :Hongtao Yao, Ziqiang Wang, Yuanbao Gu, Zhengang Jiang.
Analysis of Black Level Calibration Algorithm for CIS.
Applied Mechanics and Materials, Vols. 599-601 (2014), pp. 1397-1402.
DOI:
10.4028/www.scientific.net/AMM.599-601.1397单位:长春理工大学 计算机科学技术学院
文档说明:第 1~4 章为论文核心内容的归纳;第 5~8 章为在论文结论之上补充的工程实现要点(论文本身只做原理性分析,不含实现细节与实验数据),已单独标注。
0. 一句话结论
传感器在全黑条件下的输出不为 0 ------残余暗电流 + 读出链路(CDS/PGA/ADC)失调共同抬高了信号底噪基准,这个偏置就是黑电平(Black Level) 。它白白占用系统动态范围、压低对比度、使图像发灰发雾。BLC 的做法是:用遮光像素(Optical Black, OB)区域实测出这个偏置,再从有效像素中减掉它。BLC 位于 ISP 流水线的最前端,是后续 LSC / AWB / CCM / Gamma 等所有模块正确工作的前提。
1. 背景:CMOS 图像传感器的结构与工作原理
1.1 4T APS 像素结构
论文以当前主流的 4T 有源像素(4T Active Pixel Sensor) 为分析对象,其组成为:
| 器件 | 作用 |
|---|---|
| PPD(Pinned Photodiode,钳位光电二极管) | 光电转换与电荷积分,表面有重掺杂 P+ 层浮置 |
| TX(Transfer Gate,转移门) | 源端接 PPD 的 N 区,漏端接 FD 节点;负责把 PPD 中的电子转移到 FD |
| M1(Reset) | 对 PPD 与 FD 电容复位 |
| M2(Source Follower) | 源极跟随器,读出 FD 节点电压 |
| M3(Row Select) | 行选通开关,控制 FD 节点信号读出 |
工作过程:
- TX 断开时,PPD 与 FD 隔离,光生电荷积分在 PPD 的寄生电容
C_PD上; - TX 导通时,电荷转移到 FD 的寄生电容
C_FD(= M1 源结电容 ∥ M2 栅电容); - M2 把 FD 电压跟随输出,M3 选通该行。
4T 结构的两个关键收益(论文强调):
- PPD 与 FD 分离 ⇒ 可实现真正的相关双采样(CDS),从而抑制复位管 M1 引入的 FPN;
- 第一次采样与信号积分可以同时进行,提高了读出效率。
1.2 像素阵列与 Bayer CFA
像素阵列是二维排布的 PD/PPD 矩阵,通过行选通信号与列选通信号寻址读出。由于光电二极管本身不含颜色信息 ,需在阵列上叠加 彩色滤光片阵列(CFA) 把入射光分解为 R/G/B 三原色,每个像素只承载一种颜色,最终由去马赛克/颜色插值算法 还原全彩图像。论文采用最常用的 Bayer 阵列:
R G R G Gr 与 Gb 虽同为绿色通道,
G B G B 但所处行列不同、串扰与暗电流路径不同,
R G R G 工程上必须按 4 通道分别处理。
G B G B
1.3 芯片级结构与 ISP 的位置
论文给出的 CIS 芯片模块组成:
┌──────────────┐
行译码器 ──▶│ │
│ 像素阵列 │──▶ PGA ──▶ ADC ──▶ ISP ──▶ 输出接口
列译码器 ──▶│ (核心:光电转换)│ │
└──────────────┘ └─ BLC / AWB / 颜色插值 /
▲ 颜色校正 / 去噪 / Gamma ...
时序控制
- 像素阵列:光信号 → 电信号,芯片核心;
- 行/列译码器:像素寻址;
- PGA:时序驱动下对采样信号做可编程增益放大;
- ADC:模数转换;
- ISP :接收数字信号,依次执行 BLC、AWB(自动白平衡)、颜色插值、颜色校正、去噪、Gamma 校正等;
- 输出:数字格式 / 模拟格式(NTSC/PAL)/ 两者兼有,视应用而定。
论文在此明确把 BLC 列为 ISP 算法链的首位。
2. 黑电平的产生机理
2.1 暗电流(Dark Current)
定义 :器件处于反偏、且无光照条件下,PD/PPD 及其寄生结产生的漏电流。
4T APS 中的残余暗电流来源(论文引 Kwon 等人的分析):
| 来源 | 说明 |
|---|---|
| PPD 体内 / 表面 | 重金属沾污、晶格缺陷等引起 |
| PPD 外围 | 与 STI(浅槽隔离)侧壁与边角缺陷 强相关,是暗电流的主要来源 |
| PPD/氧化层界面 | 界面态缺陷 |
| 转移门 TG | 在 4T 钳位结构中已被较好抑制 |
| FD 节点 | 单帧模式下较高;正常工作模式下可忽略 |
论文还指出一个重要的工艺趋势:随着 CMOS 工艺向深亚微米推进,制造低暗电流成像器反而越来越困难,因此暗电流始终是高性能 CIS 的关键瓶颈之一。
2.2 暗电流的温度特性
暗电流与开尔文温度近似呈指数关系:
Idark∝e−EakTI_{dark} \propto e^{-\dfrac{E_a}{kT}}Idark∝e−kTEa
其中 E_a 为激活能,k 为玻尔兹曼常数,T 为开尔文温度。
工程含义 :温度是黑电平最主要的漂移因子。(工程经验:室温附近每升高约 6~8 ℃ 暗电流翻倍,该经验值非论文数据,仅供估算。)此外暗电流还随积分时间(曝光时间)和增益变化 ------这三者决定了 BLC 必须是动态、实时的,而不能是一次性烧录的固定常数。
2.3 器件级抑制手段及其局限
论文总结了业界在 BLC 之前已经使用的暗电流抑制手段:
像素级
- 持续改进的像素结构(如 PPD、n+ ring reset);
- 局部提高转移管阈值电压 / 局部沟道注入,降低 TX 引入的分割噪声;
- 合理的版图(layout)设计,如 P-well 包围的光电二极管结构;
- 无缝微透镜(no-gap microlens)技术。
采样级
- 列级 CDS(相关双采样):通过全差分电路消除大部分 FPN。
工艺级
- 改进制造工艺提升 PD 暗电流一致性,降低 FPN(暗电流与工艺强相关);
- 新型后金属化退火、紫外固化等。
时序级
- 提高帧率、缩短积分时间,减少暗电流累积。
论文的核心论点(也是 BLC 存在的理由) :
上述措施大幅抑制 了暗电流,但无法校正黑电平。原因有二:
- 残余暗电流随温度、积分时间、增益变化,不可能被完全消除;
- 后续读出链路中的 PGA 与 ADC 引入的失调电压(offset),以及像素读出电路与 ADC 因工艺失配造成的偏差,本质上与暗电流无关,器件级手段管不到。
两者叠加,使传感器黑电平发生偏移,占用系统动态范围、降低图像质量 。因此,必须在图像处理阶段用 BLC 算法加以校正。
3. 黑电平校正算法原理
3.1 信号模型
论文给出的简化读出链路与 ADC 输出模型:
光 ──▶ [ Pixel ] ──▶ [ CDS ] ──▶ [ PGA ] ──▶ [ ADC ] ──▶ ADCout
ADCout=Data+Offset+Temp+FPN\mathrm{ADC_{out}} = \mathrm{Data} + \mathrm{Offset} + \mathrm{Temp} + \mathrm{FPN}ADCout=Data+Offset+Temp+FPN
| 项 | 含义 |
|---|---|
| Data | 光生电信号,即真正需要的图像信号 |
| Offset | 由 CDS、PGA、ADC 引入的黑电平偏移(BLC 的目标) |
| Temp | 总的时域随机噪声(temporal noise) |
| FPN | 半导体集成电路制造工艺等引入的固定图形噪声 |
BLC 要消除的正是 Offset 这一项(含残余暗电流贡献的直流分量)。
3.2 基本方法
论文给出的通用做法:
先获取遮光像素(Optical Black pixel)的信号,再从正常图像信号中把它减去,所得即传感器采集到的真实光生信号,其影响被彻底消除。
Pixelcorrected=Pixelraw−OB‾\mathrm{Pixel_{corrected}} = \mathrm{Pixel_{raw}} - \overline{\mathrm{OB}}Pixelcorrected=Pixelraw−OB
配合两个必要动作(论文明确要求):
- OB 像素需先剔除坏点------热像素(hot pixel)与死像素(dead pixel)必须在统计前去除,否则会严重污染均值;
- 在时序控制下对 OB 像素求平均值,再用该均值去减正常图像信号,以抑制 OB 自身的随机噪声。
由于"黑电平随外部温度、传感器增益等因素变化",BLC 必须持续判断这些因素是否变化并做出相应调整,从而在视频图像中实时消除其影响(逐帧闭环,而非静态参数)。
4. 三种典型实现架构与对比(论文核心)
4.1 模拟域校正(Analog BLC)
校正点位于 ADC 之前。
┌──────────────────────────────────────────┐
│ │
Pixel ──▶ CDS ──▶ (⊖) ──▶ PGA ──▶ ADC ──┬──▶ 图像输出
▲ │
│ ▼
DAC ◀──────────── BLC(剔除热点/坏点后统计 OB)
BLC 从 ADC 输出端取得(已剔除热像素与死像素的)OB 像素信号,经 DAC 转回模拟量,在相关模拟电路中做减法。
特性分析(论文原文结论):
- ✅ 校正范围非常宽;
- ❌ 需要额外的 DAC;
- ❌ 无法校正 ADC 自身引入的 offset(校正点在 ADC 之前);
- ❌ 要做到高精度校正需要足够的位精度,算法复杂度与电路面积上升,成本增加。
4.2 数字域校正(Digital BLC)
校正完全在数字域(ADC 之后)完成。
Pixel ──▶ CDS ──▶ PGA ──▶ ADC ──┬──▶ (⊖) ──▶ 校正后图像
│ ▲
└──▶ BLC(剔除热点/坏点后统计 OB 均值)
特性分析(论文原文结论):
- ✅ 精度更高;
- ✅ 省掉 DAC(成本、面积更优);
- ❌ 校正范围窄;
- ❌ 容易饱和 ,从而降低动态范围。
4.3 模数混合校正(Combined,论文推荐的折中方案)
┌────────────────────────────────────┐
│ │
Pixel ──▶ CDS ──▶ (⊖) ──▶ PGA ──▶ ADC ──▶ (⊖) ──▶ 校正后图像
▲ ▲
DAC │
▲ │
└──────── BLC ─────────────┘
① 先算模拟 offset 并校正
② 再算数字 offset 并校正
流程:先由 BLC 计算模拟域 offset 并完成粗校正;随后 BLC 再计算数字域 offset 完成细校正。
兼顾了模拟法的大范围 与数字法的高精度,同时把 ADC 自身的 offset 也纳入校正范围。
4.4 对比速查表
| 维度 | 模拟域 BLC | 数字域 BLC | 混合 BLC |
|---|---|---|---|
| 校正点位置 | ADC 前 | ADC 后 | 前 + 后两级 |
| 校正范围 | 很宽 | 窄 | 宽 |
| 校正精度 | 受位精度/面积限制 | 高 | 高 |
| 是否需要 DAC | 需要 | 不需要 | 需要 |
| 能否校正 ADC offset | 不能 | 能 | 能 |
| 动态范围影响 | 影响小 | 易饱和,损失动态范围 | 折中 |
| 成本 / 面积 | 高 | 低 | 中 |
| 典型选择 | Sensor 内部模拟前端 | 外置/SoC 侧 ISP | 高性能 CIS |
选型建议:偏置量大、温度/增益跨度大的场景,纯数字法容易一侧被 clip 到 0 而丢失暗部信息,应采用模拟粗调 + 数字精调的混合架构;若 sensor 端已做过模拟 BLC(多数商用 sensor 默认开启并输出一个固定 pedestal),SoC 侧 ISP 只需做数字域残差校正即可。
5. 【工程补充】OB 区域与统计策略
以下为论文结论落地时的通用工程做法,非论文原文内容。
5.1 OB 区域的分布
传感器阵列的边缘被金属层完全遮光,形成 Optical Black 区:
┌───────────────────────────────────────┐
│ VOB (垂直/顶部遮光行) │ ← 用于全局黑电平估计
├──────┬─────────────────────────┬──────┤
│ HOB │ │ HOB │ ← 用于逐行(row-wise)黑电平
│ 左侧 │ Active 有效像素区 │ 右侧 │ 可同时抑制行噪声(row noise)
│ │ │ │
├──────┴─────────────────────────┴──────┤
│ VOB (底部遮光行) │
└───────────────────────────────────────┘
- VOB(顶/底部遮光行) :像素数多、统计稳定,用于帧级全局黑电平估计;
- HOB(左/右侧遮光列) :可做逐行校正 ,顺带压制读出链路带来的行噪声(row banding);
- 靠近有效区的最内侧 1~2 行/列常有光学串扰泄漏 ,通常丢弃不参与统计。
5.2 必须按 Bayer 四通道独立统计
R / Gr / Gb / B 四个通道的暗电流路径、版图环境、列 ADC 通路均不同,offset 各不相同。若用单一均值统一相减,会直接导致:
- 色偏(暗部偏色,常见偏绿/偏紫);
- Gr/Gb 失衡(maze/迷宫状伪像),在后续去马赛克后被显著放大。
因此必须维护 4 组(或 CFA 通道数组)独立的黑电平值:
BLC_R, BLC_Gr, BLC_Gb, BLC_B
5.3 统计前的异常值剔除(论文明确要求)
OB 区同样存在热像素/死像素,且热像素在高温、长曝光下会被极度放大,单个坏点即可把均值拉偏。常用做法:
- 固定阈值裁剪 :丢弃超出
[T_low, T_high]的样本; - 统计裁剪(推荐) :先求粗均值
μ与标准差σ,剔除|x - μ| > k·σ(k 取 3 左右)后重算; - 截尾均值 / 中值:按分位数丢弃两端各 5%~10% 后求均值,对孤立坏点鲁棒性最好。
5.4 时域滤波:避免逐帧跳动
直接使用当帧瞬时均值会引入帧间闪烁。通常加一阶 IIR 平滑:
BLn=α⋅BLn−1+(1−α)⋅OB‾n,α∈0.8, 0.95BL_n = \alpha \cdot BL_{n-1} + (1-\alpha)\cdot \overline{OB}_n,\qquad \alpha \in 0.8,\\ 0.95BLn=α⋅BLn−1+(1−α)⋅OBn,α∈0.8, 0.95
并设置快速收敛条件 :当检测到增益档位切换 / 曝光时间突变 / 温度跨过阈值 时,暂时把 α 调小(或直接复位为当帧值),以满足论文所要求的"实时跟随温度与增益变化"。
6. 【工程补充】增益、Pedestal 与截断问题
6.1 offset 与增益的耦合
若模拟失调发生在 PGA 之前,则 ADC 端观测到的偏置为:
OffsetADC=Ganalog⋅Offsetpre-PGA+OffsetPGA/ADC\mathrm{Offset_{ADC}} = G_{analog}\cdot \mathrm{Offset_{pre\text{-}PGA}} + \mathrm{Offset_{PGA/ADC}}OffsetADC=Ganalog⋅Offsetpre-PGA+OffsetPGA/ADC
结论 :黑电平随模拟增益线性放大 。因此高 ISO 下黑电平显著抬升,标定时必须按增益档建表,或在数字域校正时同步读取当前增益值:
| Again | BLC_R | BLC_Gr | BLC_Gb | BLC_B |
|---|---|---|---|---|
| 1x | 64 | 64 | 64 | 64 |
| 2x | 66 | 65 | 65 | 67 |
| 4x | 70 | 68 | 68 | 72 |
| 8x | 78 | 75 | 75 | 82 |
(数值仅为示意格式)
6.2 Pedestal(黑电平基座)与负值截断
这正是论文指出的数字法缺点 "easy to achieve saturation as to decrease dynamic range" 的具体表现:
黑电平处的噪声是双向 分布的。如果减完直接 clamp(x, 0, max),噪声的负半边被削掉,会导致:
- 暗部噪声均值被抬高(有偏估计);
- 暗部细节丢失、出现死黑块;
- 后续 AWB/CCM 的线性假设被破坏。
解决方案 :减去黑电平后加回一个小的 pedestal(如 16 LSB @12bit),保留负向噪声摆幅,待流水线后段(Gamma 之前)再统一扣除:
Out=Raw−BLc+Pedestal\mathrm{Out} = \mathrm{Raw} - BL_c + \mathrm{Pedestal}Out=Raw−BLc+Pedestal
6.3 是否需要重新拉伸
严格保持线性响应时,减完黑电平后应按下式归一化,以恢复满量程:
Out=Raw−BLcWhiteLevel−BLc×FullScale\mathrm{Out} = \frac{\mathrm{Raw} - BL_c}{\mathrm{WhiteLevel} - BL_c}\times \mathrm{FullScale}Out=WhiteLevel−BLcRaw−BLc×FullScale
多数实时 ISP 为节省逻辑省略该步骤,而把增益并入后续 AWB 的通道增益中一起完成。
7. 【工程补充】参考实现
7.1 伪代码(逐帧数字域 BLC)
c
// ---- 每帧执行 ----
// 1) 分通道统计 OB 区
for (c = 0; c < 4; c++) { // R, Gr, Gb, B
collect_samples(ob_region, c, buf, &n);
mean = mean_of(buf, n);
std = std_of (buf, n, mean);
// 2) 剔除热像素/死像素 (论文要求)
mean = trimmed_mean(buf, n, mean - K*std, mean + K*std);
// 3) 时域 IIR 平滑, 增益/曝光突变时快速收敛
alpha = gain_changed || exp_changed ? 0.0f : 0.9f;
BL[c] = alpha * BL[c] + (1.0f - alpha) * mean;
}
// ---- 每像素执行 ----
int c = bayer_channel(x, y); // 由 Bayer 相位决定
int val = raw[y][x] - (int)(BL[c] + 0.5f) + PEDESTAL;
out[y][x] = CLAMP(val, 0, (1 << BITDEPTH) - 1);
7.2 Python 验证脚本(离线 RAW 验证用)
python
import numpy as np
def blc(raw, ob_rows=8, k=3.0, pedestal=16, bitdepth=12):
"""
raw : 2D ndarray, Bayer RGGB 排列, 含顶部 ob_rows 行遮光区
returns : 校正后的 active 区域, 以及 4 通道黑电平
"""
ob = raw[:ob_rows, :]
active = raw[ob_rows:, :]
bl = {}
# Bayer RGGB 的 4 个相位
for name, (dy, dx) in {'R': (0, 0), 'Gr': (0, 1),
'Gb': (1, 0), 'B': (1, 1)}.items():
s = ob[dy::2, dx::2].astype(np.float32).ravel()
mu, sd = s.mean(), s.std()
s = s[np.abs(s - mu) <= k * sd] # 剔除热点/坏点
bl[name] = float(s.mean())
out = active.astype(np.int32).copy()
for name, (dy, dx) in {'R': (0, 0), 'Gr': (0, 1),
'Gb': (1, 0), 'B': (1, 1)}.items():
out[dy::2, dx::2] -= int(round(bl[name]))
out = np.clip(out + pedestal, 0, (1 << bitdepth) - 1)
return out.astype(np.uint16), bl
7.3 实验室标定流程(无 OB 区或需交叉验证时)
- 传感器完全遮光(盖镜头盖 + 暗箱,确认无漏光);
- 遍历 增益档 × 曝光时间 × 温度点 三维组合;
- 每个工况采集 ≥ 32 帧,逐像素做时域平均以压制随机噪声;
- 分别统计 R/Gr/Gb/B 四通道均值 → 写入标定表;
- 验证:应用 BLC 后,暗帧各通道均值应收敛到 pedestal 附近且四通道一致。
8. 【工程补充】常见问题定位
| 现象 | 可能原因 | 处理方向 |
|---|---|---|
| 暗部整体发灰、发雾,对比度低 | 黑电平未减 / 减得不足 | 检查 BLC 是否使能、OB 统计是否有效 |
| 暗部出现大面积死黑、细节丢失 | 黑电平减过头 + 直接 clamp 到 0 | 加 pedestal,见 §6.2 |
| 暗部偏色(偏绿/偏紫) | 用单一均值统一相减,未分通道 | 按 R/Gr/Gb/B 四通道独立校正,见 §5.2 |
| 迷宫状纹理(maze artifact) | Gr/Gb 黑电平不一致 | 分别标定 Gr、Gb;必要时加 Gr/Gb 均衡 |
| 长曝光 / 高温下画面整体抬升 | 暗电流指数增长(式 1) | BLC 实时跟随温度,见 §2.2、§5.4 |
| 高 ISO 下黑电平明显跑偏 | offset 被模拟增益放大 | 按增益档建表,见 §6.1 |
| 黑电平逐帧闪烁 | 未做时域滤波 | 加 IIR 平滑,见 §5.4 |
| 画面出现横向条纹(row banding) | 逐行读出链路失调 | 用 HOB 做逐行校正,见 §5.1 |
| 偏置量太大时数字域校正失效 | 数字法校正范围窄(论文结论) | 改用模数混合架构,见 §4.3 |
9. BLC 在 ISP 流水线中的位置
RAW ──▶ [ BLC ] ──▶ [ 坏点校正 DPC ] ──▶ [ 镜头阴影校正 LSC ] ──▶ [ 去噪 ]
▲首位
──▶ [ 自动白平衡 AWB ] ──▶ [ 去马赛克 Demosaic ] ──▶ [ 颜色校正 CCM ]
──▶ [ Gamma 校正 ] ──▶ [ 色彩空间转换 ] ──▶ YUV 输出
为什么 BLC 必须放在最前面:
- LSC 是乘性增益校正,若输入带直流偏置,偏置会被边缘的大增益一并放大,造成四角色偏;
- AWB / CCM 的通道增益与矩阵运算都建立在"信号与光强成正比、过原点"的线性假设上,黑电平偏置会直接破坏这一假设;
- Gamma 对暗部有强非线性拉伸,未扣除的黑电平会在暗部被放得最明显;
- 去噪与 DPC 的阈值判决依赖真实信号幅度,带偏置会让判决基准整体漂移。
10. 论文小结与评价
论文贡献:
- 系统梳理了 CMOS 图像传感器(4T APS / 像素阵列 / Bayer CFA / 芯片架构)的结构与工作原理;
- 厘清了暗电流 与黑电平的因果关系及各自的物理来源;
- 明确论证了器件级/工艺级手段只能抑制暗电流、无法校正黑电平,因此 BLC 在图像处理阶段不可或缺;
- 给出了 BLC 的通用算法框架(OB 统计 → 剔除坏点 → 求均值 → 相减 → 实时跟随温度/增益);
- 对模拟域、数字域、模数混合三种实现架构做了范围/精度/成本/动态范围四维度的对比分析。
局限性(阅读时需注意):
- 属于综述与定性分析 性质,未提供实验数据、仿真结果或量化指标;
- 未涉及 OB 区版图选择、逐行校正、Gr/Gb 失衡、pedestal 处理等实际落地细节(本文第 5~8 章为此补充);
- 对"混合方案"只给出框图与两步流程,未讨论模拟/数字两级的分配策略与收敛稳定性。
11. 术语表
| 缩写 | 全称 | 中文 |
|---|---|---|
| CIS | CMOS Image Sensor | CMOS 图像传感器 |
| APS | Active Pixel Sensor | 有源像素传感器 |
| PPD | Pinned Photodiode | 钳位光电二极管 |
| FD | Floating Diffusion | 浮置扩散节点 |
| TX / TG | Transfer Gate | 电荷转移门 |
| STI | Shallow Trench Isolation | 浅槽隔离 |
| CDS | Correlated Double Sampling | 相关双采样 |
| PGA | Programmable Gain Amplifier | 可编程增益放大器 |
| ADC / DAC | Analog-to-Digital / Digital-to-Analog Converter | 模数 / 数模转换器 |
| FPN | Fixed Pattern Noise | 固定图形噪声 |
| CFA | Color Filter Array | 彩色滤光片阵列 |
| OB | Optical Black | 遮光(黑)像素区 |
| HOB / VOB | Horizontal / Vertical Optical Black | 水平 / 垂直遮光区 |
| BLC | Black Level Calibration / Correction | 黑电平校正 |
| ISP | Image Signal Processor | 图像信号处理器 |
| AWB | Auto White Balance | 自动白平衡 |
| LSC | Lens Shading Correction | 镜头阴影校正 |
| DPC | Defect Pixel Correction | 坏点校正 |