3. 移动端ISP算法概览
移动端ISP(Image Signal Processor)并不是单一算法,而是一条按像素流水线组织的处理链。Sensor输出的Bayer RAW数据通常只有单一颜色分量,且伴随黑电平偏移、坏点、噪声、光照色偏等问题。ISP的任务是在有限功耗与延迟预算内,把RAW逐步转换为可显示、可编码的YUV图像。理解各模块的功能与先后关系,是后续算法适配和工程落地的基础。
本节按典型移动端ISP流水线顺序,概览黑电平校正、坏点修复、去马赛克、白平衡、色彩校正、伽马、降噪与锐化等模块。它们并非简单串联,而是存在前后依赖与反馈关系,例如降噪常分RAW域与YUV域两段,锐化需在降噪之后以避免放大噪声。
核心原理:各模块解决什么问题
黑电平校正(BLC)处理的是Sensor在无光条件下仍输出的非零基底值。该值来自暗电流和读出电路偏置,若不扣除,暗部会发灰、对比度下降。工程上通常按通道(R/Gr/Gb/B)分别标定,并随增益和温度做补偿。
坏点修复(DPC)针对Sensor制造缺陷或老化产生的异常像素。静态坏点位置固定,可通过标定表记录;动态坏点随增益和曝光变化,需实时检测。常用方法是用同色邻域中值或梯度加权替代,避免破坏边缘。
去马赛克(Demosaic)把每个像素只有一种颜色的Bayer阵列恢复为RGB三通道。核心是插值:在平坦区平滑插值,在边缘区沿边缘方向插值,否则会出现拉链纹和伪彩。移动端常用方向自适应插值加伪彩抑制。
白平衡(AWB)估计场景光源色温,对R/B通道施加增益,使白色物体在不同光源下仍呈中性。色彩校正(CCM)则通过3×3矩阵修正Sensor光谱响应与目标色彩空间之间的偏差,通常与AWB配合,保证肤色和饱和色准确。
伽马校正把线性光信号映射到人眼感知更均匀的编码域,同时压缩高光、提升暗部。降噪分空域和时域:空域在单帧内平滑相似像素,时域利用多帧对齐融合,移动端常用两者结合。锐化在降噪后增强边缘对比,但需控制过冲与噪声放大。
方法流程:一条可落地的处理顺序
- RAW域:BLC → 线性化 → 坏点修复 → RAW降噪 → 镜头阴影校正。
- 去马赛克:方向自适应插值 → 伪彩抑制 → 边缘增强。
- 色彩域:AWB增益 → CCM → 伽马 → 色彩空间转换。
- YUV域:时域/空域降噪 → 锐化 → 色调与对比度微调 → 输出。
案例/场景:夜景与逆光下的模块联动
夜景场景中,Sensor增益提高,暗电流和坏点更明显,BLC与DPC参数需随增益调整;同时噪声增大,RAW域降噪强度提高,但过强会抹掉细节,需与锐化联动。逆光场景中,AWB容易受高光区域干扰,CCM需保护肤色,伽马则负责把高光压回可显示范围。
# 典型Tuning参数片段(示意)
BLC: {r: 64, gr: 64, gb: 64, b: 64, gain_comp: true}
DPC: {mode: dynamic, threshold: 32, gain_dep: true}
AWB: {mode: auto, gray_edge: 0.35, skin_protect: true}
CCM: {matrix: [[1.62,-0.52,-0.10],[-0.28,1.55,-0.27],[0.02,-0.42,1.40]]}
Gamma: {curve: srgb_like, contrast: 0.12}
NR: {raw_strength: 0.6, yuv_strength: 0.4, temporal: 0.5}
Sharp: {amount: 0.8, radius: 1.2, overshoot: 0.15}
误区与复盘:常见工程陷阱
| 误区 | 现象 | 修正方向 |
|---|---|---|
| BLC只用一个全局值 | 暗部偏色、四角发灰 | 按通道和增益分档标定 |
| DPC阈值固定 | 高增益下坏点漏检或误杀 | 阈值随增益自适应 |
| 去马赛克只做双线性 | 边缘拉链纹、伪彩 | 方向自适应+伪彩抑制 |
| AWB与CCM独立调 | 肤色偏黄或偏红 | 联合标定,保护肤色 |
| 先锐化后降噪 | 噪声被放大成颗粒 | 降噪在前,锐化在后 |