高保真压缩 DNG
在 PureRAW 6 中,DXO 引入了一种新的高保真压缩 DNG 文件格式。声称在视觉感知上无损的情况下,将 DNG 文件的大小压缩至线性 DNG 的 1/4,其中无压缩线性 DNG 的文件体积大约是 4 MB/MP。当然视觉感知无损是一个相当模糊的概念,还是需要结合它具体做了什么来看。
DXO 在技术文章中已经写的十分详细和慷慨了,接下来将结合具体的实现细节做些分析。
前处理
DXO 的 PureRAW 本身是一种对 RAW 文件进行“前处理”的软件,主要功能是使用 DXO 先进的解马赛克和降噪算法,替换掉别的 RAW 处理软件的前端算法。因此通过这个软件存储的 DNG 文件是已经经过了解马赛克和降噪处理的“线性 DNG”,而不是传统意义的“Bayer RAW”。
线性 DNG 已经经过解马赛克,包含完整尺寸的三通道图像,像素数量是原来的的三倍。同时,经过降噪处理的图像在之后的编码压缩方面会更占优势。
动态范围压缩
DXO 表示,在 RAW 文件记录的线性光数据中,越亮的部分信息密度越低。这是因为图像中的散粒噪声(shot noise)服从泊松分布,其标准差随信号强度的平方根增长。
- 暗部:信号弱、噪声低,每一个 ADU 都可能携带真实的细节,高位深提供的精度是必要的。
- 亮部:信号强、噪声也大,高位深的线性记录并不提供更多有用信息。
通过应用一个压缩扩张(companding)函数:使用一个近似平方根的非线性曲线,对线性强度进行方差稳定变换(variance-stabilizing transform)。经过变换后,噪声在整个动态范围内近似方差稳定,实现使用更低的位深存储图像数据,同时保持视觉质量。
具体来说,DXO 使用了一个分段函数,在低码值时为线性函数,剩下的部分是平方根函数,从 DXO PureRAW 前处理模型输出的 16 bit 数据压缩到 10bit。
DNG 支持存储非线性数据,通过将一个映射查找表存放在 LinearizationTable 标签中,解码器根据这个表就可以将非线性数据还原成线性数据,DXO 存放了完整的 1024 点,从 0-1023 映射回 0-65535 范围。
图中曲线展示了从 10 bit 压缩后的码值(横轴)恢复到 16 bit 线性数据(纵轴)的映射关系,压缩时则是其逆函数。
JPEG-XL 高效率压缩
这是 DNG 在 1.7.0 规范中新加入的一个特性,通过使用 JPEG-XL 这种先进编码格式编码图像,这种编码方式在无损和有损模式下都有很高的效率,尤其无损模式是几种先进图像编码格式中最好的,明显优于 AVIF,有损模式对于照片内容来说也有很高的压缩效率。
具体来说,DXO 选择了一个非常接近无损的压缩参数,distance 为 0.01(JXL 中 0 为无损), effort 为 3(类似 AVIF 中的 speed 参数,范围是 0-7)。
Adobe DNG Converter 是可以当作一个命令行工具使用的,通过参数 -jxl_effort 和 -jxl_distance 就可以指定 JPEG-XL 的压缩参数,目前版本(18.2.2)只能在 -lossy 模式下指定压缩参数,而这个模式也会输出 Linear DNG,而不是 Bayer RAW,使用相同参数获得的文件比 DXO 的 DNG 要大得多,可能是没有之前的动态范围压缩和降噪处理的缘故。
EXE -lossy -jxl_effort 3 -jxl_distance 0.01 file.ARW
疗效
索尼 a7C2 (33MP)的图像经过处理后,文件体积相比索尼自己的无损压缩 RAW 大约为 1/2,在 18-20MB 之间。相比只有位压缩的情况下大约是 1/3,实现了比较不错的压缩效率,况且这还是基于像素数量变成了三倍的线性 RAW 的基础上的。作为对比,采用同样压缩参数的 JPEG-XL 压缩的 16 bit Linear DNG 有 45 MB 左右。
将原本的 RAW 和这个 DNG 导入 ACR 中,首先能发现 DXO 的 DNG 不能再使用相机匹配配置文件,只能用 Adobe Color,白平衡数值也发生了一些变化,在同样使用 Adobe Color 和关闭光学矫正的情况下,无论是仔细放大还是全局对比,都几乎分辨不出区别,噪声较多的情况下则是 DXO 的降噪机制发力,比什么都不做的 RAW 好一些。

这个局部放大的图上传到博客对象存储的时候又用 AVIF 质量 85 压了一次,应该更看不出区别了。