欢迎来到HDR照片时代:增益图HDR与HDR工作流
欢迎来到HDR照片时代:增益图HDR与HDR工作流
HDR视频大家都很熟悉了,因为视频,特别是电影,引入HDR技术的商业价值更高。iPhone能拍摄杜比视界的视频,而其他品牌手机能拍摄HDR10兼容的视频。直播一般使用的是HLG HDR视频。这些都是成熟、且在各自领域已被被广泛兼容的标准。然而照片并没有这么好的待遇,直到2023年Adobe和Apple才联合发布了第一版HDR照片标准(ISO/TS 22028-5:2023),在后文中这一标准称为ISO HDR。
HDR与SDR的区别
ISO HDR的标准实际上照抄了影视行业的做法。HDR的全称是高动态范围(High Dynamic Range),也就是说图像中暗部和亮部细节都要完好保留。一张图来解释之:
不经过处理查看HDR的效果和照片过曝一致
在SDR屏幕上直接不做处理查看HDR照片,看到的效果如上图的左1。本文使用张家界天门山的一张照片作为演示,左1的实际效果如下:
看起来正常很多了的SDR照片
那真正的HDR照片是什么样子的?我也附了一张在下方。但你看到它的时候已经不是HDR了,因为有三个阶段可能出现问题:
真正的HDR照片,但它已经被服务器转换了,所以你看不出来
- 服务器端的压缩:一张照片上传到网上,服务端可能会为了节约空间将其压缩为其他格式以减少体积,在这个过程中可能会丢失HDR信息,属于传输问题;
- 设备对HDR内容进行解码:要求设备能将该照片识别为HDR,例如对于浏览器:桌面版的Chrome和Edge支持显示增益图HDR,但Safari全系不支持。Windows 11的图库对HDR有限支持,而Apple平台在iOS/iPad OS 18.1以及macOS 15.1之后,基本支持主流的HDR格式。此外,App客户端需要额外参数才能实现HDR显示。这些属于软件问题;
- 兼容的显示器:要求设备屏幕支持HDR。属于硬件问题。
我们暂且不考虑问题1,而问题3是钱就能解决的(买新硬件)。问题2是普及HDR照片的关键。
照片HDR的标准
回到ISO HDR上来,我们知道,每个像素点可用四个整型(Int)来表示,即R、G、B以及透明度A。为方便其见,我们只考虑一个通道(即只考虑R)。在8 bit下的照片中,最亮的亮度记为255(2^8-1),而最暗的像素记为0。
从0到255的灰度图
超过200 nit就进入到HDR的范围(此图片已转化为SDR)
我们把255对应的亮度记为SDR下的最大亮度,其标准为200 nit。超过200 nit的部分就属于HDR的范畴了:
最简单的处理办法,就是声明该图片是HDR的。超过SDR范围的像素用大于255的数值去储存之。照片的位数也需要从8 bit增加到至少10 bit。在10 bit下,亮度最大为1023,相当于是255的3.11倍。
为什么不是4倍而是3.11倍?这涉及到伽马这个参数。简单来说就是人的眼睛对光的感受是对数的不是线性的。如果四个图像看起来的亮度依次为1、2、3、4,那实际光强为10:43:106:200。一般来说显示器的伽马为2.2,4^(1/2.2) = 3.11。
所以继续沿用2.2的伽马,10 bit并不够用!对于一个亮度最高6400 nit的物体(相当于SDR的32倍),我们需要8+14 = 22 bit才能储存,这一开销(接近3倍的文件体积)是不合算的。PQ和HLG HDR定义了一个映射方式,对高亮度数据占用的信息进行压缩。因为人眼对光的敏感性是指数的,比如说只有亮度差大于2%才能肉眼看出来。因此记录数据时,没必要从亮度500至600每隔1就记录一下,完全可以500、510、520、531、541、552……大幅减少所需的数据量。选择合适的映射方式,使用10 bit就能在不丢失肉眼精度的情况下,将数据映射到最高10,000 nit的亮度。
伽马2.2的曲线(红)与某种HLG的曲线(蓝色)
我们把整型映射到0-1范围的浮点中。在SDR空间中,200 nit的亮度以1.00储存。而在上图对应的HLG中,这一亮度大约以0.55进行储存。1000 nit的亮度将以约0.75进行储存(横坐标5),而1.00的数据会对应2400 nit的亮度。我们把这个照片最高支持的余量(headroom)称为12,即表示HDR亮度最大为SDR的12倍。
现在来考虑该如何解码这一图像。如果软件知道你使用的是PQ或者HLG,那它将正确的把0.55映射到200 nit、0.75映射到1000 nit、1.00映射到2400 nit。但如果软件并不知道,仍然以错误的伽马2.2对其进行处理,那么这些亮度将变成110、150以及200nit,即出现了色调映射(好在HLG HDR考虑了这一问题,这种映射不能说是错误的,因为SDR部分得到了正确呈现,只不过亮度有所降低):
这是一个以HLG曲线储存的照片,如果你用浏览器查看能看到HDR效果
第二个问题在于,创作者可能使用的是最高1600 nit的显示器,并创作了在这个范围内的作品,但观众使用的是最高400 nit的显示器,其只能显示比SDR亮一倍的内容。这个时候,有两种办法进行处理。第一个称为滚降(roll-off),第二个被称为硬切(hard-clipping)。
滚降本质上也是一种色调映射,且这种操作是软件(甚至是显示器本身)进行的,不可控。那有没有办法做到最大的兼容性?最简单的做法就是:我把SDR和HDR照片打包一块,支持你就看HDR,不支持就SDR。
这一方法最大的缺点就是——文件体积翻倍。有没有优雅一些的方案?这时候增益图HDR就出来了。
增益图HDR
早在2020年,Apple发布iPhone 12后,就引入了私有的一套HDR储存、显示流程,被称为Apple HDR。简单来说,我们只记录SDR图片本身(称为基本图),以及SDR与HDR之间的亮度差异作为增益图:
增益图HDR的图示 ©Google
上图左侧为HDR照片,中间为SDR照片。两个照片的亮度差异可用单色的右图表示。单色照片储存所需的空间要小得多,因此整体文件大小不会比SDR多多少。
天门山照片的增益图,其信息量很少因此占用空间不多
Apple HDR是私有的,后来Adobe申请了一系列专利,并拉上Apple一块推出了增益图HDR的国际标准(ISO/DIS 21496-1),在本文中称之为ISO增益图。
在ISO增益图标准中,增益图通道数量可选单色或者RGB。RGB增益图包含三个通道,其体积也相应地会有增加。比如iOS 18开始,iPhone 15、16系列拍摄得到的是RGB增益图的HEIC或JPG,iPhone 14及之前得到的是单色增益图的HEIC或JPG。
通过上变换获得Adaptive HDR(Apple平台的ISO增益图HDR)©Apple
增益图每个通道的每个像素,取值范围会映射到[-1, 1]。正数表示在基本图的基础上增加亮度,负数表示在基本图的基础上降低亮度。因此ISO增益图,可以用HDR照片作为基本图,SDR照片通过HDR和增益图计算出来。
ISO增益图HDR支持的格式包括:JPEG、HEIC、AVIF、JXL、TIFF等。理论上每个格式都有单色和RGB增益图两个选项。HEIC、AVIF、JXL、TIFF等格式可选下变换(HDR作为基本图)或者上变换(SDR作为基本图),下变换还可以选择PQ或者HLG作为HDR基本图的曲线。粗略来看,一共有超过34种可能的组合。
又回到兼容性上来,毕竟ISO增益图是2024年才推出的标准,并不是所有的组合在目前都能被广泛兼容。
谷歌负责JPG格式的增益图的实际应用,并制定了UltraHDR库(即JPG格式的增益图HDR)。UltraHDR有两种可能的方式:单色增益图或RGB增益图。即使UltraHDR种类只有两种,但兼容性也存在问题。
UltraHDR的文件结构 ©Google
例如在iOS 18.1之前,Apple设备(macOS除外)无法识别Adobe输出的RGB增益图JPG文件。现在支持分享HDR图片的社区(例如Instagram、酷安),也会先把任何格式的HDR转化为单色增益图JPG,并可能导致亮度的一些变化。
所以,并不建议直接分享ISO HDR或者RGB增益图HDR,而是需要将他们转化为单色增益图HDR。在考虑这个问题之前,我先总结了获得ISO增益图HDR的方法:
- Android手机直接拍摄:获得的是单色增益图的UltraHDR,UltraHDR在Android 14引入;
- Adobe的ACR输出:获得RGB增益图的JPG、TIFF、PNG、AVIF和JXL。其中JPG、AVIF和TIFF是上变换,JXL是下变换;
- iPhone拍摄:15和16获得RGB增益图的HEIC或JPG,14以及之前获得单色增益图的HEIC或JPG;
- 使用libultrahdr库:可输出单色或RGB增益图的JPG;
- 使用Apple平台的ciimage api:可输出RGB增益图的HEIC或JPG。
HDR照片工作流
软件:
桌面端,处理RAW文件首选使用Lightroom(收费),Darktable(开源软件)支持输出EXR、AVIF (PQ HDR)格式的照片,Photomator(收费)支持输出ISO HDR文件。
移动端仍然建议使用Lightroom(收费)。Photomator(收费)等软件也支持输出ISO HDR文件。
显示器:
桌面端你需要一个HDR1000认证的显示器获得最佳效果,最低也要HDR600。推荐使用m1 pro芯片以后的14或16寸MacBook pro,最高支持1600 nit亮度。其余MacBook在中低亮度下可提供最高1档的余量(headroom = 2)。
HDR1000的显示器在保证SDR 200nit的情况下还有2档以上的HDR空间
移动端建议iPhone12+(不包括SE3)或Android 14+系统且支持HDR显示的安卓。iPad只建议最新的m4 pro或者miniLED款12.9寸pro,否则只能提供最高1档的余量:
Apple设备的HDR兼容性,最高5x SDR才有较好效果 ©Apple
输出与储存
处理完成后,照片以HDR的格式进行输出,LR可直接输出AVIF、JPG或JXL等小体积格式。或者输出16 bit的ISO HDR(如PNG、TIFF)、EXR作为中间文件进行后续压缩。
目前LR支持输出5种HDR格式
根据需求,对照片进行压缩。如果不需要兼容性(例如只储存在本地,不分享不上云),可采用ISO HDR进行储存。建议使用10bit HEIC、AVIF或JXL,曲线可选PQ或HLG。
如果需要兼容性,例如社交软件分享,云储存,可选单色增益图HDR,或者使用RGB增益图HDR,等未来普及(比如目前Google Photos不支持识别RGB增益图HEIC)。
不推荐以UltraHDR储存,JPEG压缩效率低质量相比较差。但可以将其用于照片分发。
macOS平台生成HEIC HDR的CLi工具
在macOS平台,我写了一个命令行工具用于将HDR照片转化为ISO增益图或ISO HDR格式的HEIC文件。支持生成单色增益图获得最大兼容性。软件以MIT协议开源。