1. RAW 域基础概念:什么是 RAW 图像、Bayer 阵列模式、RAW 与 RGB/YUV 的区别
做图像处理这些年,我经常被刚入行的同事问一个问题:「老师傅,RAW 到底是个啥?跟 JPEG 有啥不一样?」
嗯,这个问题问得好。说白了,RAW 就是相机传感器最原始的「底片」,是未经任何加工的原始数据。今天咱们就把这个基础打牢。
1.1 什么是 RAW 图像
RAW 图像,你可以把它理解成传感器「看到」的原始电信号。每个像素点只记录一个颜色通道的亮度值——要么是红,要么是绿,要么是蓝。它不像你手机相册里的 JPEG,已经经过了白平衡、去马赛克、伽马校正等一系列处理。
核心要点:RAW 是线性数据,位深通常为 10bit、12bit 或 14bit。而 JPEG 是 8bit 非线性数据,已经被人眼视觉特性「扭曲」过了。
我最早接触 RAW 是在做一款安防相机的时候。当时客户抱怨夜间图像噪点太多,我一看 JPEG 输出,根本没法分析噪声来源。后来我直接抓了 RAW 数据,才发现问题出在模拟增益上——这就是 RAW 的价值:它保留了最原始的信息,让你能追根溯源。
1.2 Bayer 阵列模式
为什么传感器不直接记录 RGB 三个通道?你想想看,如果每个像素都要记录三个颜色,那传感器面积得翻三倍,成本根本扛不住。所以拜耳(Bayer)在 1976 年提出了一个巧妙的方案:用 2×2 的滤色器阵列,让每个像素只感光一种颜色。
最常见的模式是 RGGB,也就是左上角是 R(红),右上角和左下角是 G(绿),右下角是 B(蓝)。为什么绿色有两个?因为人眼对绿色最敏感,多给绿色一些采样,视觉上更自然。
| 模式名称 | 2×2 排列 | 常见应用 |
|---|---|---|
| RGGB | R G / G B | Sony、OmniVision 多数传感器 |
| GRBG | G R / B G | 部分 Samsung 传感器 |
| BGGR | B G / G R | 部分安森美传感器 |
| GBRG | G B / R G | 部分老款 CCD 传感器 |
避坑指南:我曾经在一个项目中,因为 Bayer 模式搞反了,导致整张图像偏色严重。调试了整整两天才发现是 sensor 配置里的模式跟 ISP 里写的不一致。所以拿到新 sensor 的第一件事,就是确认它的 Bayer 排列顺序。
你可能会问:「这四种模式有啥本质区别?」其实没有。它们只是起始相位不同。只要 ISP 里的去马赛克算法知道当前是什么模式,就能正确还原颜色。但如果你搞错了,那画面就会像打翻了调色盘。
1.3 RAW 与 RGB/YUV 的区别
这个区别,我习惯用一个比喻来解释:
- RAW 是「未加工的食材」—— 一块生牛肉,你可以煎、烤、炖,自由度最高。
- RGB 是「切好配好的菜」—— 已经处理过,可以直接下锅,但选择少了。
- YUV 是「半成品菜」—— 不仅切好了,还按人眼喜好调了味,直接吃也行。
从数据量上看,同样分辨率下,RAW 占用的空间最小(每个像素 1 个值),RGB 最大(每个像素 3 个值),YUV 介于中间(Y 分量全分辨率,UV 分量通常降采样)。
| 特性 | RAW | RGB | YUV |
|---|---|---|---|
| 数据来源 | 传感器直接输出 | 去马赛克后 | RGB 转换后 |
| 位深 | 10-14bit | 8-12bit | 8-10bit |
| 颜色空间 | 传感器原生 | sRGB/Adobe RGB | BT.601/BT.709 |
| 数据量 | 1 通道/像素 | 3 通道/像素 | 1.5-2 通道/像素 |
| 可编辑性 | 极高 | 中等 | 低 |
注意:千万不要在 RAW 域做 RGB 域的操作,比如直接对 RAW 数据做白平衡增益。因为 RAW 数据是 Bayer 排列的,每个像素只对应一个颜色通道,你没法单独调整某个颜色的增益——除非你先做去马赛克。我见过有人这么干,结果图像出现了严重的伪色。
说到 YUV,我记得有一次做视频编码优化,发现编码器对 YUV 420 格式处理效率特别高。为什么?因为 UV 分量只有 Y 的四分之一,数据量直接减半。但代价是色彩分辨率降低了——不过人眼对亮度敏感、对色彩不敏感,所以这个取舍很划算。
1.4 知识结构总览
下面这张图,是我自己整理的知识框架。每次带新人,我都会先让他们看这张图,搞清楚 RAW 在整个图像处理链路中的位置。
这张图把本章的三个核心概念串起来了。你从左上角开始看:RAW 图像是源头,它通过 Bayer 阵列采样得到原始数据;然后经过 ISP 处理,可以变成 RGB 或 YUV。搞清楚这三者的关系,后面的课程你就不会迷路。
个人建议:刚开始学 RAW 处理时,别急着上复杂的算法。先学会怎么读 RAW 文件、怎么解析 Bayer 模式、怎么把 RAW 数据可视化。我当年就是靠着一份 raw 文件和一个 Python 脚本,一点点把 ISP 流程啃下来的。