图像传感器基础:CMOS vs CCD,RAW图格式,Bayer Pattern与CFA

各位同学好,我是老周。今天咱们聊聊图像传感器——整个ISP流水线的起点。说白了,没有传感器,后面什么去噪、HDR全是空谈。

我入行那会儿,CCD还是主流,CMOS被嫌弃“噪声大、画质差”。现在呢?手机、相机、安防,清一色CMOS。为什么?咱们一步步拆开看。

CMOS vs CCD:一场技术路线的对决

这两种传感器,本质都是把光信号转成电信号。但实现方式完全不同。

对比项 CMOS CCD
读出方式 每个像素独立放大、读出 整行电荷逐行转移、统一读出
功耗 低(约CCD的1/10) 高(需要多路高压时钟)
噪声 固定模式噪声(FPN)较明显 读出噪声低,画质干净
速度 快(可逐行/逐像素随机访问) 慢(必须整帧串行读出)
集成度 高(ADC、逻辑电路可集成在芯片上) 低(需要外部驱动和ADC)
成本 低(标准CMOS工艺) 高(专用工艺,良率低)
动态范围 中等(受限于像素内晶体管) 较高(满阱容量大)

我的经验:2015年做一款工业相机,客户坚持用CCD,说“画质好”。结果产线一跑,功耗压不住,散热器比镜头还大。后来换了背照式CMOS,画质接近,功耗降了80%。从那以后,除非特殊需求(比如天文、科研),我基本不再推荐CCD。

为什么CMOS能逆袭?核心原因就一个:工艺红利。CMOS传感器可以用和CPU、内存一样的标准半导体工艺生产,成本低、迭代快。CCD呢?专用产线,投资大、产能小,注定是小众市场。

RAW图格式:传感器看到的“原汁原味”

很多人问我:“RAW到底是个啥?”

说白了,RAW就是传感器输出的原始数据,没经过任何处理。你相机里拍的JPEG,那是ISP处理完的结果——白平衡、去噪、锐化、伽马校正,全给你做完了。RAW呢?就是一堆数字,每个数字代表某个像素感受到的光强。

RAW格式有几个关键参数:

  • 位深:常见10bit、12bit、14bit。位深越大,亮度层次越丰富。我见过16bit的工业RAW,一张图几十MB。
  • 黑电平:传感器在无光条件下的输出值。不是0,通常有几十到几百的偏移。做ISP第一步就是减掉这个偏移。
  • 线性度:理想情况下,光强翻倍,输出值翻倍。但实际传感器在高光区会饱和,在暗区有噪声。

避坑指南:我曾经接手一个项目,RAW图暗部偏绿。查了半天,发现是黑电平校准没做对——不同通道的黑电平不一样。Bayer的R、G、B通道,黑电平可能有微小差异,必须分别校准。

Bayer Pattern与CFA:彩色世界的入口

单个像素只能感知亮度,分不清颜色。那彩色怎么来的?答案就是彩色滤波阵列(CFA)。

最常见的CFA就是Bayer Pattern。它把像素排成2x2的单元:

  • 左上、右下:绿色(G)—— 占50%
  • 右上:红色(R)—— 占25%
  • 左下:蓝色(B)—— 占25%

为什么绿色多一倍?因为人眼对绿色最敏感。这个设计,说白了就是模仿人眼的视觉特性。

// 典型的Bayer Pattern排列(RGGB)
// 第一行:R G R G R G ...
// 第二行:G B G B G B ...
// 第三行:R G R G R G ...
// 第四行:G B G B G B ...
// 以此类推

除了RGGB,还有其他变种:

Pattern 排列方式 常见应用
RGGB 标准Bayer 绝大多数消费级相机、手机
RCCC 1红3透明 安防、车载(弱光敏感)
RCCB 1红2透明1蓝 安防(兼顾色彩和灵敏度)
Quad Bayer 4x4单元,同色合并 高像素手机(像素合并提升弱光)

注意:Bayer Pattern决定了后续去马赛克(Demosaic)算法的复杂度。Quad Bayer这类非标准Pattern,需要特殊的解马赛克流程。我见过团队直接拿标准Bayer算法去处理Quad Bayer,结果出现严重的伪色和摩尔纹。

知识结构图:传感器到RAW的完整链路

下面这张图,把从光信号到RAW数据的流程画清楚了。我建议你保存下来,后面讲去噪和HDR时还会反复用到。

图像传感器到RAW数据链路 图像传感器 → RAW数据生成链路 外部光线 CFA彩色滤波 光电转换 模拟读出 ADC模数转换 黑电平校准 RAW数据输出 💡 关键点: RAW数据 = 经过CFA滤波 + 光电转换 + ADC量化 + 黑电平校准后的原始数字信号,未做任何图像处理。

RAW数据在硬件通路中的“模样”

你拿到一帧RAW数据,在内存里看到的是什么?

假设传感器是1920x1080,Bayer RGGB,12bit。那么:

  • 每个像素占12bit(实际存储常用16bit对齐)
  • 一帧RAW大小 = 1920 x 1080 x 2字节 ≈ 4MB
  • 数据排列:第一行是R G R G...,第二行是G B G B...

嗯,这里要注意:RAW数据不是图像。你直接把它当灰度图显示,会看到密密麻麻的网格纹理——那就是Bayer Pattern的痕迹。

实战经验:调试ISP通路时,我习惯先dump一帧RAW出来,用Python脚本转成伪彩色图,检查有没有坏点、条纹、或者黑电平异常。这一步能发现很多传感器驱动的问题,比直接看ISP输出更高效。

CFA的变种与选型考量

不是所有场景都用标准Bayer。我列几个常见的变种,以及它们的适用场景:

  • Quad Bayer:手机高像素传感器(48MP、64MP)的标配。4个同色像素合并成1个,弱光下提升灵敏度,白天输出高像素。但解马赛克算法要重写。
  • RCCC:红+透明。安防监控常用,弱光性能好,但色彩还原差。适合只关心亮度细节的场景。
  • RCCB:红+透明+蓝。比RCCC多一个蓝色通道,色彩稍好。车载摄像头常见。
  • RGBW:标准Bayer里插入白色像素。提升弱光亮度,但容易引入色彩串扰。

踩过的坑:有一年做车载项目,选了RCCB传感器。结果发现白色像素的响应曲线和RGB不一样,导致自动白平衡怎么调都偏色。后来在ISP里加了一个“白像素补偿”模块,才搞定。选型时一定要确认CFA类型是否匹配你的ISP算法。

小结:这一章你该记住什么

好了,内容不少。我帮你划几个重点:

  1. CMOS是主流,CCD是情怀。除非特殊需求,别在CCD上浪费时间。
  2. RAW是传感器的“底片”。理解RAW的位深、黑电平、线性度,是ISP工程师的基本功。
  3. Bayer Pattern决定了色彩采样方式。标准RGGB占主流,但Quad Bayer、RCCC等变种越来越多,算法要跟上。
  4. CFA选型影响整个ISP链路。别只看传感器分辨率,CFA类型直接决定去噪、去马赛克、白平衡的策略。