1. RAW 域基础:从传感器到数字图像的第一站
做图像处理这些年,我越来越觉得 RAW 域才是真正的「原汁原味」。你想想看,我们平时看到的 JPEG 照片,其实已经被相机「加工」过好几轮了。而 RAW 图像,说白了就是传感器最原始的电子读数——每个像素点只记录一个数字:那个位置接收到了多少光。
1.1 什么是 RAW 图像
RAW 不是一种统一的文件格式。不同厂商有自己的后缀:.CR2(佳能)、.NEF(尼康)、.ARW(索尼)、.DNG(Adobe 通用格式)。但它们的本质都一样——未经任何处理的传感器数据。
我刚开始接触 RAW 时有个误解:以为 RAW 就是「高清版 JPEG」。后来在项目中调试一条 ISP 流水线,才真正明白——RAW 连颜色都没有。它只是一堆 12bit 或 14bit 的整数,每个数代表一个像素的曝光量。
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 |
| 处理流程 | 需去马赛克、白平衡、色调映射等 | 相机内部已处理完成 |
1.3 拜耳阵列(Bayer Pattern)详解
为什么 RAW 图像每个像素只有一个值?因为传感器上的每个感光单元只能感知亮度,不能区分颜色。那彩色照片怎么来的?答案就是拜耳阵列——在传感器表面覆盖一层彩色滤光片阵列(CFA)。
最常见的模式是 RGGB:每个 2×2 的像素块包含 1 个红色、2 个绿色、1 个蓝色。为什么绿色有两个?因为人眼对绿色最敏感,多采样绿色可以提升视觉分辨率。
下面这张图展示了拜耳阵列的结构和 RAW 数据到彩色图像的流程:
1.4 拜耳阵列的变体
RGGB 不是唯一的拜耳模式。我在项目中遇到过几种常见变体,这里列出来供你参考:
- RGGB:标准模式,Bayer 原始专利,应用最广
- BGGR:与 RGGB 只是排列顺序不同,本质一样
- GRBG:某些索尼传感器使用
- RGBW:加入白色(W)像素,提升低光灵敏度,但会降低色彩分辨率
- RCCC:用于自动驾驶摄像头,红色 + 三个透明通道,强调红色信号
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 做处理不行吗?行,但效果差很多。我总结了几条理由:
- 线性数据:RAW 是线性的,亮度翻倍像素值就翻倍。JPEG 经过伽马校正,亮度关系是非线性的,做数学运算会出错。
- 高动态范围:RAW 的 12~14bit 保留了暗部和亮部的细节,JPEG 的 8bit 在过曝或欠曝区域已经截断。
- 白平衡可调:RAW 的白平衡只是三个通道的增益系数,后期可以任意调整。JPEG 的白平衡已经「烧死」在像素值里了。
- 去噪效果更好:RAW 域的噪声是高斯分布,去噪算法更有效。JPEG 的噪声已经被压缩和锐化扭曲了。
嗯,这一章的内容就到这里。RAW 域的基础概念是后续所有章节的基石——拜耳阵列的理解直接关系到去马赛克算法的设计,位深和动态范围的概念会在色调映射中反复用到。把这些基础打牢,后面学起来会顺畅很多。