一、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

看到没?绿色像素的数量是红色和蓝色的两倍。为什么?因为人眼对绿色最敏感。这个设计很巧妙——用更多的绿色像素来模拟人眼的视觉特性。

我举个例子说明拜耳阵列的工作流程:

  1. 光线通过镜头到达传感器
  2. 每个像素前的滤光片只允许特定波长的光通过
  3. 感光单元记录下该位置的光强数值
  4. 这些数值按像素位置排列,形成RAW数据
  5. 后续通过去马赛克(Demosaic)算法,插值出完整的RGB图像

这里有个关键点:RAW数据里每个像素只有一种颜色信息。比如一个像素是R,那它只记录了红色通道的强度。绿色和蓝色信息需要通过周围像素插值得到。这就是为什么RAW解析的第一步就是去马赛克。

重要概念:拜耳阵列的四种常见模式:

  • RGGB — 最常用,佳能、尼康等多数品牌
  • BGGR — 部分索尼传感器
  • GBRG — 部分松下传感器
  • GRBG — 部分富士传感器

解析RAW时,第一步就是确定拜耳模式。搞错了,整张图颜色就全乱了。

我记得有一次调试ISP流水线,图像颜色一直偏绿。查了两天,最后发现是拜耳模式配错了——代码里写的是RGGB,实际传感器是BGGR。就这一个字母的差别,折腾了我两天。从那以后,我写代码都会加一个自动检测拜耳模式的逻辑。

注意事项:拜耳阵列的起始位置也很重要。同样是RGGB,左上角第一个像素是R还是G,会影响整个图像的对齐。我建议在解析时先读取传感器的配置信息,不要硬编码。

最后说一句:拜耳阵列虽然经典,但也不是唯一方案。现在有些传感器用X-Trans(富士)、Quad Bayer(索尼)等更复杂的排列。不过万变不离其宗——理解RGGB,其他都是它的变体。

下一章,我会带你手撕一个RAW文件的二进制结构,看看这些数据到底是怎么组织的。