Pi Store
更多

正确显示 HDR 照片,怎么就这么难?

09/03 21:12

聊聊 HDR 照片显示要克服的这些「重重障碍」,以及苹果是如何通过软硬件功能试图克服这些障碍的。


不知道你在使用 iPhone 的时候有没有注意到一个现象:拍好的照片在相册里看的时候很亮,但一发到朋友圈,画面似乎立刻就「黯淡」了不少。而在刷 Instagram 之类平台的时候,时间线里又不时会闪现一些特别亮的照片,在昏暗的环境甚至有点「闪瞎眼」的感觉。

其实,这些现象都是对 HDR(高动态范围)照片的不同支持情况导致的。通俗地说,HDR 照片就是那些记录了更广泛明暗信息的照片,因此亮部会比普通照片看起来更明亮。然而,要正确显示 HDR 照片,拍摄、存储、读取和显示环节都要满足一定条件:相机要能记录更广的明暗范围,图片格式要能准确保留记录的亮度信息,操作系统和应用程序都要能识别图片中记录的 HDR 信息,而显示器在硬件上要支持高亮度。

这篇文章中,我们就来聊聊 HDR 照片显示要克服的这些「重重障碍」,以及苹果是如何通过软硬件功能试图克服这些障碍的。

拍摄环节

既然要显示 HDR 照片,那能拍出来才是能显示的前提条件。所以在开始一切的话题之前,我们快速回顾一下 HDR 照片是怎么拍出来的。

当我们按下快门的时候,相机传感器只会很短时间内接收光线。至于这「一刻」到底有多长,就取决于「曝光时间」和「快门速度」了,不少手机和相机的专业模式也都能调整这个参数。这时间内传感器积累到的光,最终转化为电信号,从而生成图像。

快门开得时间短,接到的水就少,传感器接收到的光就越少,暗部很有可能就拍不清

不过相机传感器记录范围是有限的,传感器的动态范围完全取决于它自己的性能。在把光转换成电荷时,每个像素都有一定的容量限制(如上图的管子一样)。如果光线太亮,会溢出管子,就形成了过曝——超出容量的光线信息无法记录下来。相反,如果光线太暗,生成的电荷可能无法超过传感器上的噪声,导致欠曝,同样无法有效记录光线信息。

快门开得时间长,接到的水就多,传感器接收到的光就越多,理论上细节越多,但溢出来一样会丢失细节

换句话说,假如一个场景明暗差异超过了传感器的性能,传感器不仅可能丢失高亮处的信息,也可能丢失阴影处的细节。

而 HDR 合成照片,则是在拍摄单张照片的基础上,在短时间内连续拍摄多张照片,再通过算法合成为一张。这些照片的明暗程度各异,目的在于尽可能囊括场景中从暗至亮的细节,以便算法能够完整提取。

左:单张照片;右:由多张曝光度不同的照片合成的 HDR 合成照片

存储和读取环节

能拍 HDR 照片了,第二步就是要解决怎么存的问题。在 iOS 中,HDR 照片的背后其实有两张图:一张是普通的标准动态范围(SDR)照片;另一张是「增益图」(gain map),其中存储了原始图片的亮度和曝光数据。将这两张图叠加起来,用增益图对 SDR 照片做像素级的控制,就得到了 HDR 图像。

把拍摄的照片用 Adobe 开发的 Gain Map Demo App 打开,就可以清晰地看到图片的 SDR/HDR 属性以及对应区域的直方图。

2022 年,苹果还把这套方案交给了国际标准化组织 ISO,后者以此为基础制定了 HDR 照片相关规范 (ISO/TS 22028-5:2023)。

总的来说,这种存储方式的好处在于兼容性强:如果读取照片的应用不支持 HDR,那么只读取 SDR 照片即可。但换个角度说,这也给很多开发商偷懒提供了动机:像绿色应用背后的大厂日理万机,本着能用就行的态度,迟迟提不起兴趣做适配,也是可以理解的。

而在今年的 iOS 18 中,苹果进一步引入了「自适应 HDR」(Adaptive HDR)的概念,进一步提高了增益图的精度和兼容性(例如可以从 HDR 照片反向产出 SDR 版本了),我们也可以期待开发者借此更好地为用户捕获和展示 HDR 内容。

显示环节

会员专属文章,欢迎加入少数派会员。
优质内容
权益周边
会员社群
power+
评论区
全部评论0
成为少数派会员方可评论,立即加入 。若已是少数派会员,点击登录
还没有评论,来发表第一个评论吧
全部评论
还没有评论,来发表第一个评论吧
成为少数派会员方可评论,立即加入 。若已是少数派会员,点击登录
会员新功能
内容侧边栏
点击这里拉开侧边栏,即可查看会员内容列表,快速切换内容。