1. RAW 域基础:从传感器到数字图像的第一站

做图像处理这些年,我越来越觉得 RAW 域才是真正的「原汁原味」。你想想看,我们平时看到的 JPEG 照片,其实已经被相机「加工」过好几轮了。而 RAW 图像,说白了就是传感器最原始的电子读数——每个像素点只记录一个数字:那个位置接收到了多少光。

1.1 什么是 RAW 图像

RAW 不是一种统一的文件格式。不同厂商有自己的后缀:.CR2(佳能)、.NEF(尼康)、.ARW(索尼)、.DNG(Adobe 通用格式)。但它们的本质都一样——未经任何处理的传感器数据。

我刚开始接触 RAW 时有个误解:以为 RAW 就是「高清版 JPEG」。后来在项目中调试一条 ISP 流水线,才真正明白——RAW 连颜色都没有。它只是一堆 12bit 或 14bit 的整数,每个数代表一个像素的曝光量。

核心概念:RAW 图像是线性数据,每个像素值与场景亮度成正比。而 JPEG 已经经过了伽马校正、白平衡、锐化、压缩等非线性处理。

1.2 RAW 与 JPEG 的差异

我习惯用一个比喻来解释:RAW 是食材,JPEG 是成品菜。食材可以做成各种口味,但成品菜已经定型了。下面这张表把关键区别列出来,你在项目中选方案时可以直接参考:

对比维度 RAW JPEG
位深 12bit / 14bit(4096~16384 级) 8bit(256 级)
色彩空间 传感器原生色彩(线性) sRGB / Adobe RGB(非线性)
白平衡 可后期任意调整 拍摄时已固定
动态范围 12~15 EV 8~10 EV
文件大小 约 25~50 MB(2400 万像素) 约 5~10 MB
处理流程 需去马赛克、白平衡、色调映射等 相机内部已处理完成
我的经验:在手机影像算法项目中,我们经常用 RAW 做 HDR 合成。因为 8bit JPEG 的暗部稍微提亮就会出现条带,而 14bit RAW 的暗部有 16384 级灰度,提亮 4EV 依然平滑。

1.3 拜耳阵列(Bayer Pattern)详解

为什么 RAW 图像每个像素只有一个值?因为传感器上的每个感光单元只能感知亮度,不能区分颜色。那彩色照片怎么来的?答案就是拜耳阵列——在传感器表面覆盖一层彩色滤光片阵列(CFA)。

最常见的模式是 RGGB:每个 2×2 的像素块包含 1 个红色、2 个绿色、1 个蓝色。为什么绿色有两个?因为人眼对绿色最敏感,多采样绿色可以提升视觉分辨率。

下面这张图展示了拜耳阵列的结构和 RAW 数据到彩色图像的流程:

拜耳阵列结构与 RAW 数据流程 拜耳阵列(RGGB) R G G B R G G B G B G B B R B R RAW 数据(单通道) 120 85 200 95 210 45 每个像素只有一个亮度值 去马赛克后(RGB) R:120 G:85 B:200 G:95 B:210 R:45 每个像素插值出 R/G/B 三个值 关键点:RAW 数据是单通道的,每个位置只有一种颜色信息 通过去马赛克(Demosaic)算法插值出完整的 RGB 三通道图像

1.4 拜耳阵列的变体

RGGB 不是唯一的拜耳模式。我在项目中遇到过几种常见变体,这里列出来供你参考:

  • RGGB:标准模式,Bayer 原始专利,应用最广
  • BGGR:与 RGGB 只是排列顺序不同,本质一样
  • GRBG:某些索尼传感器使用
  • RGBW:加入白色(W)像素,提升低光灵敏度,但会降低色彩分辨率
  • RCCC:用于自动驾驶摄像头,红色 + 三个透明通道,强调红色信号
避坑提醒:我曾经在项目中直接用了 OpenCV 的默认去马赛克参数,结果颜色完全不对。后来才发现传感器是 BGGR 排列,而 OpenCV 默认是 RGGB。读取 RAW 文件时,一定要先确认拜耳排列顺序,否则后续所有处理都是错的。

1.5 RAW 数据的位深与动态范围

位深决定了 RAW 数据的精度。8bit 有 256 级,12bit 有 4096 级,14bit 有 16384 级。但要注意——位深不等于动态范围。动态范围取决于传感器的满阱容量和读出噪声。

举个例子:一个 12bit 传感器,如果噪声是 4 个电子,满阱是 40000 个电子,那它的动态范围是 10bit(40000/4 = 10000 ≈ 2^13.3,但有效位数约 10bit)。

我习惯用这个公式估算:

动态范围(EV)= log2(满阱容量 / 读出噪声)

示例:
满阱容量 = 40000 e⁻
读出噪声 = 4 e⁻
动态范围 = log2(40000/4) = log2(10000) ≈ 13.3 EV

1.6 为什么我们要在 RAW 域做处理

你可能会问:直接用 JPEG 做处理不行吗?行,但效果差很多。我总结了几条理由:

  1. 线性数据:RAW 是线性的,亮度翻倍像素值就翻倍。JPEG 经过伽马校正,亮度关系是非线性的,做数学运算会出错。
  2. 高动态范围:RAW 的 12~14bit 保留了暗部和亮部的细节,JPEG 的 8bit 在过曝或欠曝区域已经截断。
  3. 白平衡可调:RAW 的白平衡只是三个通道的增益系数,后期可以任意调整。JPEG 的白平衡已经「烧死」在像素值里了。
  4. 去噪效果更好:RAW 域的噪声是高斯分布,去噪算法更有效。JPEG 的噪声已经被压缩和锐化扭曲了。
一句话总结:RAW 域处理的核心优势在于——你拥有传感器最原始的信息,所有决策权都在你手里。JPEG 相当于相机替你做了 90% 的决定,你只能微调剩下的 10%。

嗯,这一章的内容就到这里。RAW 域的基础概念是后续所有章节的基石——拜耳阵列的理解直接关系到去马赛克算法的设计,位深和动态范围的概念会在色调映射中反复用到。把这些基础打牢,后面学起来会顺畅很多。