传统ISP与神经网络融合工程实战 - 第1节

1. ISP Pipeline 概述:从光子到数字图像

图像信号处理器(ISP)是什么?说白了,它就是把传感器捕捉到的原始光信号,变成人眼看着舒服的数字图像的那套流程。我刚开始接触 ISP 时,觉得它就是个黑盒子——RAW 数据进去,JPEG 出来。后来踩了不少坑才明白,这个 Pipeline 里的每个模块都藏着门道。

一个典型的 ISP Pipeline 包含以下核心阶段:

阶段 功能 常见问题
黑电平校正 去除传感器暗电流噪声 校正不准导致偏色
去马赛克 从 Bayer 阵列恢复全彩 边缘伪影、拉链效应
白平衡 校正光源色温 混合光源下容易翻车
颜色校正 从传感器色彩空间映射到标准空间 矩阵系数依赖标定精度
Gamma 校正 适应显示设备的非线性响应 暗部细节丢失
降噪 抑制传感器噪声 过度平滑丢失纹理
锐化 增强图像边缘 振铃效应

关键认知:ISP Pipeline 不是固定不变的。不同传感器、不同场景、不同功耗预算下,模块的排列组合和参数配置差异巨大。我见过有的芯片把降噪放在去马赛克之前,有的放在之后——没有的对错,只有适合与否。

2. CMOS 传感器工作原理

CMOS 传感器现在是的主流。为什么?因为它把像素阵列、模拟电路、数字逻辑集成在了一块芯片上,成本低、功耗小、速度快。

2.1 像素结构

每个像素的核心是一个光电二极管(Photodiode)加一个读出电路。光子打到硅基上产生电子-空穴对,电子被收集在势阱里。曝光结束后,通过行选、列选逐行读出电压值。

我记得第一次调试一款 4T 像素结构的传感器时,被它的时序折腾得不轻。4T 指的是每个像素里有 4 个晶体管:传输管(TX)、复位管(RST)、源跟随器(SF)、行选管(RS)。

  • 曝光阶段:TX 关断,RST 打开,复位 FD 节点;然后 RST 关断,开始积分。
  • 读出阶段:先读复位电平(RST level),再打开 TX 传输电荷,读信号电平(SIG level)。
  • 相关双采样(CDS):用 SIG - RST 消除复位噪声和固定模式噪声。

实战经验:CDS 不是万能的。低频闪烁噪声(1/f noise)和随机电报噪声(RTN)CDS 消不掉。我在做低光照方案时,被 1/f 噪声坑过——暗部图像像下雪一样,后来靠调整读出时序和增加模拟增益才压下去。

2.2 卷帘快门 vs 全局快门

类型 原理 优点 缺点
卷帘快门 逐行曝光、逐行读出 像素填充率高、成本低 运动物体畸变(果冻效应)
全局快门 所有像素同时曝光 无果冻效应 像素面积大、噪声高

你想想看,拍快速运动的物体时,卷帘快门拍出来的车轮可能是椭圆的。全局快门虽然能解决这个问题,但每个像素里要多放一个存储电容,填充率就下来了。选哪种,看应用场景。

3. Bayer 阵列与 CFA

CMOS 传感器本身只能感知光的强度,分不清颜色。要获得彩色图像,必须在像素表面覆盖彩色滤光片阵列(CFA)。最经典的就是 Bayer 阵列。

3.1 Bayer 模式

Bayer 阵列的排列是:RGGB。为什么绿色像素比红蓝多一倍?因为人眼对绿色最敏感。这个设计很聪明——用更多的绿色像素模拟人眼的亮度感知。

// 典型的 2x2 Bayer 单元
R  G
G  B

// 实际传感器上的重复模式
R G R G R G
G B G B G B
R G R G R G
G B G B G B

避坑指南:我曾经在项目里遇到过 Bayer 排列方向搞反的问题。传感器 datasheet 上写的 "BGGR",我按 "RGGB" 去解,结果出来的图像偏紫。后来花了半天才定位到是 CFA 模式配置错了。所以拿到新传感器,第一件事就是确认 Bayer 排列顺序。

3.2 其他 CFA 模式

除了 Bayer,还有一些变种:

  • X-Trans(富士):6x6 周期,减少摩尔纹,去马赛克算法更复杂。
  • Quad Bayer:2x2 同色像素合并,用于高像素手机传感器,暗光下可以 binning 提升信噪比。
  • RCCC / RCCB:用于车载或安防,牺牲色彩保真度换取高灵敏度。

嗯,这里要注意:Quad Bayer 在 binning 模式下分辨率会降低,但信噪比提升明显。我调过一款 48MP 的 Quad Bayer 传感器,白天用 48MP 模式,晚上自动切到 12MP binning——效果比硬拉增益好得多。

4. RAW 数据格式解析

RAW 数据就是传感器直接输出的原始数字信号,没有经过任何 ISP 处理。它保留了最完整的图像信息,也是 ISP 算法的起点。

4.1 RAW 数据的位深

常见的 RAW 位深有 10-bit、12-bit、14-bit。位深越高,动态范围越大,但数据量也越大。

位深 灰度级数 典型应用
10-bit 1024 手机摄像头、消费级相机
12-bit 4096 专业相机、工业相机
14-bit 16384 高端单反、科学级传感器

4.2 RAW 数据的存储格式

RAW 数据通常以 "packed" 或 "unpacked" 方式存储:

  • Unpacked:每个像素占用 2 字节(16-bit),高位对齐或低位对齐。浪费空间,但处理方便。
  • Packed:比如 10-bit 数据,每 5 个像素打包成 64-bit(5×10=50bit,浪费 14bit),或者更紧凑的排列方式。
// 10-bit packed 示例(每 4 个像素占 5 字节)
// 像素0: bits[9:0]
// 像素1: bits[19:10]
// 像素2: bits[29:20]
// 像素3: bits[39:30]
// 字节排列: [p0h][p0l:p1h][p1l:p2h][p2l:p3h][p3l]
// 其中 p0h 是像素0的高2位,p0l 是低8位

个人习惯:调试阶段我一般用 unpacked 格式,方便在内存里直接查看像素值。性能优化阶段再切到 packed,减少带宽占用。另外,很多 ISP 硬件内部用 20-bit 或 24-bit 的中间精度,防止累加过程中溢出——这个细节容易被忽略。

4.3 RAW 数据的元数据

RAW 文件里除了像素数据,还包含大量元数据:

  • 传感器型号、增益值、曝光时间
  • 黑电平偏移量(OB level)
  • 坏点坐标表
  • 镜头阴影校正参数
  • 色温估计值(AWB 统计信息)

这些元数据对 ISP 调试至关重要。我见过有人直接拿 RAW 数据跑算法,没考虑黑电平偏移,结果暗部全是负值——裁切后细节全丢了。

5. 本章知识体系

下面这张图总结了本章的核心脉络:

ISP 基础与图像传感器知识体系 ISP 基础与图像传感器知识体系 ISP Pipeline 概述 CMOS 传感器 Bayer 阵列与 CFA RAW 数据格式 像素结构 · 卷帘/全局快门 · CDS RGGB · X-Trans · Quad Bayer 位深 · Packed/Unpacked · 元数据 4T 像素 · 复位噪声 · 暗电流 CFA 模式 · 去马赛克 · 伪影 黑电平 · 坏点 · 增益映射 核心认知 ISP 的起点是 RAW 数据,终点是视觉友好的图像。理解传感器和 RAW 格式,是后续所有算法的基础。

本章要点:

  • ISP Pipeline 是模块化的,每个模块都有其物理意义和算法挑战。
  • CMOS 传感器的像素结构和读出方式直接影响图像质量。
  • Bayer 阵列是最主流的 CFA 模式,理解它是去马赛克算法的基础。
  • RAW 数据是 ISP 的输入,位深、存储格式、元数据都是关键参数。