一、RAW图像基础概念
1.1 什么是RAW格式
RAW格式,说白了就是相机传感器拍下来的原始数据。它没有经过任何处理,就像一块未经雕琢的璞玉。
我经常跟团队里的新人说:你把RAW理解成「数字负片」就对了。传统胶片摄影时代,我们拍完胶卷得到的是底片;数码时代,RAW就是那个底片。它记录的是每个像素点上的光强信息,仅此而已。
举个例子。你用手机拍一张照片,按下快门的那一刻,传感器上的几千万个感光单元同时工作,每个单元记录下该位置的光线强度。这些原始数值,就是RAW数据。嗯,这里要注意——它还不是一张能看的图片。
核心要点:RAW = 传感器原始数据 + 元数据(拍摄参数、相机信息等)
1.2 RAW与JPEG/PNG的区别
这个问题我面试时经常问。很多人觉得RAW就是「更清晰的照片」,其实不对。
我打个比方你就明白了:
- RAW 是食材——新鲜的鱼、肉、蔬菜
- JPEG 是已经做好的菜——味道固定了,但方便吃
- PNG 是真空包装的熟食——保留了细节,但体积大
它们之间的本质区别,我用一个表格说清楚:
| 特性 | RAW | JPEG | PNG |
|---|---|---|---|
| 位深 | 12-14 bit | 8 bit | 8/16 bit |
| 色彩空间 | 相机原生 | sRGB | sRGB |
| 压缩方式 | 无损/有损可选 | 有损 | 无损 |
| 后期调整空间 | 极大 | 极小 | 中等 |
| 文件大小 | 大(20-50MB) | 小(2-5MB) | 中(5-15MB) |
| 是否可直接显示 | 否 | 是 | 是 |
我在项目中遇到过最典型的场景:客户说「我要最高画质」,结果传过来的是JPEG。我一看直方图,高光部分全切掉了,暗部细节也丢了。这就是8bit JPEG的硬伤——它只有256级灰度,而RAW有4096甚至16384级。
避坑指南:我曾经因为图省事直接用JPEG做图像分析,结果算法精度死活上不去。后来换成RAW,同样的算法,准确率从72%飙到了94%。记住——做图像处理,能用RAW就别用JPEG。
1.3 常见RAW文件扩展名
市面上相机品牌那么多,每家都有自己的RAW格式。我整理了一下最常见的:
- .CR2 / .CR3 — 佳能(Canon)的看家格式。CR3是新一代,压缩效率更高
- .NEF — 尼康(Nikon)的电子格式。我最早接触RAW就是用的NEF
- .ARW — 索尼(Sony)的格式。现在很多微单都用这个
- .DNG — Adobe推出的开放格式。我个人最喜欢这个,因为它跨平台兼容性好
- .RAF — 富士(Fujifilm)的格式
- .ORF — 奥林巴斯(Olympus)的格式
- .PEF — 宾得(Pentax)的格式
你想想看,这么多格式,每个的字节序、压缩算法、元数据布局都不一样。这就是为什么做RAW解析这么头疼——你得挨个处理。
我的建议:如果你刚开始学习RAW解析,先从DNG入手。它是公开标准,文档齐全,而且很多相机厂商都支持导出DNG。我当年就是拿DNG练手的,少走了不少弯路。
1.4 拜耳阵列(Bayer Pattern)原理
好了,终于到重点了。拜耳阵列,这是理解RAW格式的核心。
为什么需要拜耳阵列?因为单个感光单元只能感知光的强度,分辨不出颜色。那怎么办?工程师们想了个办法:在每个像素前面放一个彩色滤光片,只让特定颜色的光通过。
最常见的排列方式是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
看到没?绿色像素的数量是红色和蓝色的两倍。为什么?因为人眼对绿色最敏感。这个设计很巧妙——用更多的绿色像素来模拟人眼的视觉特性。
我举个例子说明拜耳阵列的工作流程:
- 光线通过镜头到达传感器
- 每个像素前的滤光片只允许特定波长的光通过
- 感光单元记录下该位置的光强数值
- 这些数值按像素位置排列,形成RAW数据
- 后续通过去马赛克(Demosaic)算法,插值出完整的RGB图像
这里有个关键点:RAW数据里每个像素只有一种颜色信息。比如一个像素是R,那它只记录了红色通道的强度。绿色和蓝色信息需要通过周围像素插值得到。这就是为什么RAW解析的第一步就是去马赛克。
重要概念:拜耳阵列的四种常见模式:
- RGGB — 最常用,佳能、尼康等多数品牌
- BGGR — 部分索尼传感器
- GBRG — 部分松下传感器
- GRBG — 部分富士传感器
解析RAW时,第一步就是确定拜耳模式。搞错了,整张图颜色就全乱了。
我记得有一次调试ISP流水线,图像颜色一直偏绿。查了两天,最后发现是拜耳模式配错了——代码里写的是RGGB,实际传感器是BGGR。就这一个字母的差别,折腾了我两天。从那以后,我写代码都会加一个自动检测拜耳模式的逻辑。
注意事项:拜耳阵列的起始位置也很重要。同样是RGGB,左上角第一个像素是R还是G,会影响整个图像的对齐。我建议在解析时先读取传感器的配置信息,不要硬编码。
最后说一句:拜耳阵列虽然经典,但也不是唯一方案。现在有些传感器用X-Trans(富士)、Quad Bayer(索尼)等更复杂的排列。不过万变不离其宗——理解RGGB,其他都是它的变体。
下一章,我会带你手撕一个RAW文件的二进制结构,看看这些数据到底是怎么组织的。