第十章:静态 RAW、视频 RAW、压缩与元数据
同一个 RAW 换两种软件打开,初始颜色、暗部颗粒和边缘锐度可能都不同。文件中的 样本没有改变,显影软件却选择了不同的白平衡、颜色变换、去马赛克和降噪方法。 另一方面,拍摄时已发生的饱和或有损压缩会限制这些选择。了解一个 RAW 文件, 既要知道保存的数怎样解释,也要知道哪些处理已在写入前完成。第九章在保持文件码 不变时比较了不同监看设置;这里通过文件样本、标签和解码步骤核对这些数据。
10.1 RAW 的六维描述
定义 10.1(RAW 数据契约). 本书把 RAW 定义为一种面向后期显影的相机相关数据 契约。描述一个 RAW 至少需要六个维度:
- 采样状态:马赛克、分箱、全 RGB、去马赛克线性;
- 响应状态:线性传感器值、分段线性、Log 或非线性压缩;
- 数值表示:有效位深、打包位深、整数/浮点、黑白电平;
- 压缩:无压缩、无损、有损、帧内或跨帧;
- 已处理项目:坏点、暗场、镜头阴影、降噪、锐化、HDR 融合;
- 元数据:CFA、曝光、白平衡建议、颜色矩阵、镜头、时码和校验信息。
仅说“12 bit RAW”只回答第三项的一部分。
10.2 静态 RAW 的基本结构
典型 Bayer RAW 保存每个感光单元一个数值,加上解释这些数值所需的元数据。解码器 通常执行:
DNG 建立在 TIFF/EP 结构上,可记录 CFA 图样、BlackLevel、WhiteLevel、线性化表、
颜色矩阵、噪声模型和预览等。DNG 也允许保存已经去马赛克的 LinearRaw。因此文件
扩展名 .dng 不能单独证明数据仍是原始马赛克。
图 10.1 箭头是典型逻辑顺序,不表示所有相机都在同一位置执行每一步。只要某项 已经在写入前不可逆完成,后期就只能调整其结果,不能回到原始样本重新选择。
读取 DNG 时,至少应核对下列标签族。标签存在只表示解码器获得了一个声明,不保证 标定值准确,也不保证相机没有在写入前做其他处理。
| 标签或标签族 | 解释对象 | 缺失或误读的后果 |
|---|---|---|
| CFARepeatPatternDim、CFAPattern | 感光单元的滤色排列 | 通道位置错误,去马赛克失效 |
| BlackLevel、BlackLevelRepeatDim | 每通道/每周期黑电平 | 阴影偏色,线性比例错误 |
| WhiteLevel | 当前样本的有效白点 | 归一化与高光重建错误 |
| LinearizationTable | 码值到线性化样本的查表变换 | 把非线性码误当线性曝光 |
| ActiveArea、DefaultCrop | 光学黑区、有效区与建议裁切 | 把遮光像素混入图像或尺寸误判 |
| AsShotNeutral | 拍摄时建议的中性通道比例 | 失去拍摄白平衡起点,但不等于失去 RAW |
| ColorMatrix1/2、CalibrationIlluminant1/2 | 指定标定光源下 XYZ 到参考相机原生通道的矩阵 | 方向读反会产生错误的色度变换 |
| ForwardMatrix1/2 | 白平衡相机通道到 D50 XYZ 的前向矩阵 | 不能与 ColorMatrix 直接互换 |
| NoiseProfile | 信号相关噪声模型 | 降噪与不确定度估计失去相机提示 |
| OpcodeList1/2/3 | 规定阶段的校正操作 | 忽略时可能遗漏坏点、增益图或几何校正 |
ColorMatrix 的名称尤其容易引起误读。按 Adobe DNG 规范,它把 XYZ 变到参考相机 原生空间;ForwardMatrix 则把白平衡后的相机颜色变到 D50 XYZ。真实流程还涉及 CameraCalibration、AnalogBalance、白平衡和必要的色适应。第七章写作 的相机 到 XYZ 矩阵,不能直接用文件中的 ColorMatrix 原样代入。标签的方向、参考白点和 输入是否已白平衡,必须同时匹配。规范定位见资料源的 DNG 条目。
例子 10.2(黑白电平归一化). 假设样本已按规范完成线性化,RAW 值为 DN,通道黑电平 ,白电平 。归一化线性值为
若直接除以 ,会把黑电平当作曝光,得到错误的阴影与通道比例。含 LinearizationTable 的文件应先查表,再在规范规定的线性化尺度上应用黑白电平; 逐行、逐列或周期性黑电平也需按标签求值,不能只减一个全图常数。
若黑电平随位置改变,DNG 的归一化分母使用该样本平面的最大计算黑电平与 WhiteLevel 之差;不能把例 10.2 的常数黑电平公式逐像素照搬为变化的分母。该处理顺序见 DNG 1.7.1.0 第 5 章,第 99 页。
减黑后的小负值是噪声分布的一部分,过早裁成零会使暗部均值偏高。以零信号、 Gaussian 噪声 为例,直接裁切后
因此用于测噪和多帧平均的中间数据应保留有符号或浮点值;显示时如何处理黑端另行 决定。白点同样要用当前模式的标签值,不假定它总等于容器最大整数。
打开一个可以逐码核对的小文件
下载教学DNG。它由本书生成:32×32的RGGB, 16 bit小端未压缩存储,样本有效白点4095、黑电平64,全部1024个码都已知。 第一个样本为32,用来保留黑位以下的有符号归一化;随后两个样本为64和4095, 分别检查零点和白点。文件用于核对结构和样本读数,按本书许可分发。
起始选中黑位以下的第0号样本,先沿高亮字节找到它的整数值,再看减黑后的有符号结果。 选“白电平样本”核对白点; 最后切换“错误字节序”与“忽略黑电平”,分别判断错误发生在读取整数还是解释样本的阶段。
互动示意:从真实TIFF字节流读取IFD、条带偏移、CFA和黑白电平,再与生成数组 逐码比较。格子的底色与字母标识CFA滤色通道,数字仍是该位置的RAW样本值(DN)。
本例把ColorMatrix1设为单位矩阵,方便核对标签布局;实际色度变换须使用相机的 标定数据。标签的含义按 Adobe DNG 1.7.1.0,2023年9月规范 第3—5章核对;样本只使用较早版本已有的兼容字段。读者可先查看样本字节,再打开 “错误字节序”:这会改变解出的整数;忽略黑电平则只改变归一化,文件样本仍一致。 这两种错误处在不同层,不能都归为“RAW颜色不对”。
本页解析器按这个单IFD、单条带样本读取数据,压缩DNG还需要相应的解码器。 这里可把解析结果与已知的1024个样本逐码比较;同一文件也用LibRaw作了独立读取。
贯穿算例:从存储整数回到电子刻度
同一均值流程的 1588 DN 若放入一个
16 bit 小端无符号容器,两个字节为十六进制 34 06;容器宽度不改变原来的
14 bit 有效码域。按本例标签 ,线性归一化仍是 0.09693,
再乘 32,000 e⁻ 得约 3101.75 e⁻。用未舍入值计算,与未量化均值的差约 0.74 e⁻,
落在半个码格约 0.977 e⁻ 以内。
这只是本例确定性取整的往返核对,不是随机读噪的估计。上方可下载的微型 DNG 使用另一组黑白电平和样本阵列;检查那个文件时应读取其自身标签。两种练习分别 回答“同一信号怎样往返”与“真实文件结构怎样解释”。
10.3 位深、打包与有效精度
12 bit 样本可按紧密位流打包,也可装进 16 bit 字。后者每样本占两字节,却仍只有 12 bit 有效数据。反过来,传感器 ADC 可能输出 14 bit,但低若干位主要是噪声;这 不等于它们“完全没用”,随机抖动可在平均中提供亚码信息,但单样本有效精度低于 标称位深。
图 10.2 采用例10.3规定的位序:Byte 0保存A的低8位,Byte 1的高半字节来自B、 低半字节来自A,Byte 2保存B的高8位。每个字节从左到右为bit 7至bit 0。蓝色 标识A,红色标识B;其他像素格式的位序与行填充须按各自规范解释。
下面用十六进制逐位检查打包。前缀0x表示十六进制,每一位对应4 bit,称为一个
半字节(nibble);一个字节有8 bit。符号 表示逐位与,
表示逐位或,、 分别表示左移、右移。
例如 只留下低8位, 则移去低8位。
例子 10.3(明确一种 12-bit 双样本打包). 规定两个无符号样本 按
打包。若 、,则 。解包为
分别恢复 与 。解码时须使用这里给定的 nibble 顺序;换用另一格式的顺序,像素值即使仍有规律,也会解错。
从“正文打包例子”开始,逐步查看原样本、三个字节和解码值,再选“读错 nibble 顺序”,观察字节没变而解码变了。 回到正确解码后,只丢弃4个低位,比较处理前后样本; 下方视频载荷是另一支路,改变帧率不会改这三个字节。
互动示意:蓝色位来自样本 A,金色位来自 B。中间字节把 B 的低四位放在高半字节, 把 A 的高四位放在低半字节;解码器必须采用相同约定,才能逐码恢复原值。
播放按“原样本、存盘前处理、字节容器、解码”展开。丢弃低位的操作发生在打包前, 所以即使后面的打包完全可逆,恢复的也只是处理后的值。本例保持固定的三字节容器, 低位清零本身并没有缩短它;存储长度如何变化还取决于另行选择的编码。用错误的 半字节顺序解码则是另一种失败:字节一个没变,解释规则已经错了。页面另保留 独立位串重排对照、减黑后的有符号归一化,以及第 10.5 节的样本载荷计算。
无损压缩利用码值预测误差的统计冗余,解码后逐码相同。有损 RAW 可以使用非线性 量化、预测误差量化、空间变换或波形编码;它仍可保留较大的调色空间,却不再保证 原码恢复。
命题 10.4(无损编码保留样本可恢复性). 设编码器为 ,解码器为 ,且对每个 有 。则 在 上为单射; 任意确定性处理 都可由码流经 得到与原样本相同的结果。
证明. 若 ,两边应用 就得 ,故 为单射。 又有 ,得到第二项结论。
无损压缩利用样本分布与结构中的冗余来缩短平均码长,具体某个文件也可能变长; 解码后能否逐码复原,才是这里的无损判据。
10.4 RAW 中的白平衡与后期调整
对已经正确线性化、减去黑电平且仍保留各滤色通道的马赛克 RAW,白平衡主要是 通道乘法,因此可以在解码时改变。文件若保存非线性或已融合的样本,应先按相应 契约解释。以下信息无法靠改白平衡恢复:
- 某通道已经饱和;
- 某通道曝光太低而埋入噪声;
- 光谱同色异谱导致的相机响应歧义;
- 相机在写 RAW 前已做不可逆的通道融合或强降噪。
“RAW 可任意改色温”准确含义是显影参数仍可重新选择,不是拍摄光谱和通道 SNR 可 被重写。
文件数值与显影预览
同一个RAW码可以在不同监看补偿下显得很暗或很亮。下面把电子输入、14 bit RAW、 教学Log和显示分开,复用第五、九章的单色场景;这里只考察曝光与显示,不模拟 滤色、白平衡或DNG颜色矩阵。
先选“亮窗只在监看变白”,移动探针查看窗外两处的RAW和Log码,再调低额外监看补偿。 若像素码不变而显示改变,变化来自显影支路。 然后选“亮窗在记录时合并”,核对同码为什么不能被后续显影重新区分。
互动示意:三章采用相同静态输入。文件码图只展示码的大小,正确监看还需解码及 显示映射。蓝色十字在各图标出同一位置,同时列出电子均值、RAW码、Log码和降低 监看后的线性显示值。
先固定捕获与记录参数,只改额外监看补偿:RAW码和Log码都不应改变。再选择记录前 增益,把窗外枝叶和天空压到同一文件白点,观察降低监看后仍然相同的输出。 教学Log是本例附加的记录支路,不表示所有RAW都先经过Log编码;前面的微型DNG 保存的仍是声明的未压缩整数样本。
10.5 视频 RAW 的带宽与处理约束
一张 4K 图像若为 、每 photosite 12 bit、24 fps,未计消隐和元数据 的码率为
约 MB/s,连续十分钟仅图像样本就约占 191 GB(十进制)。8K、较高帧率和 更高位深会继续增加传输与存储负担,设备因此会在全幅读出、裁切、分箱、压缩和 接口速率之间取舍;具备足够带宽的系统也可以保存未压缩 RAW。
视频 RAW 还需逐帧记录黑电平、曝光模式、白平衡建议、镜头元数据和时间码,并保证 解码吞吐。Apple ProRes RAW 把 ProRes 类压缩用于 Bayer 型单 photosite 样本,白皮书 明确区分其数据率与传统 ProRes 422/4444;这说明“ProRes”家族名不表示数据已成为 Y'CbCr 422。
不同电影 RAW 可能在去马赛克前或后压缩,可能保存传感器线性值,也可能保存厂商 定义的非线性 RAW 编码。是否能在后期改变 ISO,常表示解码器可重选曝光归一化或 元数据解释,不必表示原始模拟增益从未在拍摄时固定。
下表用“典型状态”比较几类数据契约;具体产品必须以对应版本规范为准。
| 数据契约 | 采样状态 | 响应状态 | 压缩位置 | 已不可逆完成的典型步骤 |
|---|---|---|---|---|
| 马赛克 DNG/CinemaDNG 帧 | CFA photosite | 常为线性或经线性化表 | 去马赛克前 | 拍摄模拟增益、饱和及相机预校正 |
| ProRes RAW 类传感器样本码流 | 单 photosite、去马赛克前 | 编解码器定义 | 去马赛克前 | 拍摄读出模式、剪切及部分传感器处理 |
| LinearRaw DNG | 全颜色线性样本 | 线性 | 去马赛克后 | 去马赛克,且可能已有坏点/阴影校正 |
| 相机 Log RGB 视频 | RGB 或 Y'CbCr | Log/OETF 编码 | 去马赛克和颜色处理后 | 去马赛克、通道混合、通常还有白平衡与降噪 |
所以“视频 RAW 可以后改 ISO”应拆成两问:解码曝光增益和中灰映射是否可重选;拍摄 时的模拟增益、转换增益模式、电子满阱与通道剪切是否已经固定。前者常可改,后者 不能由元数据重写。
10.6 RAW、Log 与普通视频的关系
三种称呼描述的数据状态不同:
- RAW 保留相机相关样本和较晚的显影决定;
- Log 通常是已经去马赛克、白平衡和颜色变换后的 RGB 视频编码,但以对数曲线保留 较大亮度范围;
- 普通显示准备视频通常已经应用 Rec.709 类色调和锐化降噪,后期余量较少。
高质量 10/12 bit Log 在许多场景足够,并可能比低码率有损 RAW 更稳定;RAW 的优势 是重新选择显影处理的自由度。比较文件时,可以把同一帧分别解码为线性数据,统一 白平衡、输出尺寸与显示变换,再检查噪声、伪色和高光过渡。这样观察到的差异才与 具体采样和编码有关。
10.7 审读一个 RAW 规格
看到“8K 12-bit RAW”时,应继续查:
- 8K 是 photosite 网格、去马赛克输出还是上采样尺寸;
- 全画幅宽度是否裁切,是否行列跳读或像素合并;
- 12 bit 是线性有效位、Log 压缩位还是容器位;
- 压缩比是否固定,是否有损,最坏场景码率多少;
- 是否保留 CFA,HDR/降噪/镜头校正是否已经烘焙;
- 哪些软件能读,元数据和色彩管理是否公开。
这些信息共同确定样本的含义、处理余量与解码方法。
练习
练习 10.1. 14 bit RAW 的黑电平为 1024、白电平为 15,000。把样本 4500 DN 归一化到 。
练习 10.2. 计算 、每 photosite 12 bit、60 fps 的未压缩 马赛克码率,分别用 Gbit/s 和 MB/s 表示。
练习 10.3. 分别给出一个“RAW 仍可后改”和一个“拍摄时已不可逆固定”的参数, 并说明物理原因。
练习 10.4. 按式 (10.1)--(10.2) 的打包约定,解包字节 ,求 12-bit 样本 。