超 HDR 图片格式 v1.0

简介

本文档定义了一种新文件格式的行为,这种格式可将 JPEG 图片文件中的对数范围增益图图片。旧版读取器 支持新格式,可读取和显示传统的低动态 从图片文件中获取范围图片。支持此格式的读者可组合使用 使用增益图的主要图像,并在其上渲染高动态范围图像 兼容的显示屏。

本文档的其余部分介绍了 请使用这种格式概括来讲,图像的生命周期 更改为:

  1. 编码

    1. 增益图生成
    2. 增益图压缩
    3. 生成增益图容器
  2. 解码


示例
Ultra HDR 图片格式文件布局,包含关联的元数据和偏移值
信息

图 1. 文件布局和相关元数据示例。

设计初衷

此文件格式的目标是对 SDR 图片中的其他信息进行编码 能够与显示技术结合使用 在单个文件中提供最佳的 HDR 呈现效果。

为此,文件格式必须:

  • 向后兼容,以便在自然观看设备上看到传统的 SDR 映像 。
  • 不会占用太多额外空间。

此外,显示技术必须:

  • 不需要大量处理来解码。
  • 能够适应显示屏的 HDR 和 SDR 白点之间的任何比率, 不同设备之间可能会有很大差异,甚至在单一设备上 设备。

最后,相应分析法必须能够执行上述所有操作 :

  • 剪辑高光。
  • 粉碎阴影。
  • 更改或压缩局部对比度。
  • 更改(场景中对象之间)的相对色调关系。

依赖项

以下是本规范的规范性参考资料:

定义

  • SDR 显示屏

    • 一种传统显示屏,并非专为显示 HDR 内容而设计。这些 显示屏通常产生的标称峰值亮度约为 400 cd/m2 或更低。
  • HDR 显示屏

    • 专为 HDR 内容设计的显示屏。这些显示器通常会产生 标称峰值亮度高于 SDR 显示屏的峰值亮度, 800 cd/m2 或更高,并且通常对比度更高 与 SDR 显示屏相比
  • 主要图片

    • GContainer 文件中包含次要媒体的图片的第一个实例 文件。主图片包含 GContainer XMP 元数据 用于定义后续次要媒体内容的顺序和属性 文件容器中。
  • 次要图片

    • 附加到主图片的后续媒体文件 GContainer 文件。
  • 范围压缩

    • 在摄影中,真实场景的动态范围通常比 SDR 显示屏可以表示范围压缩等操作 称为局部色调映射 图片。这种缩小需要避免裁剪高光或挤压 同时尽可能保持局部对比度。你尝试 减小图片中大亮度边缘的大小 同时尽量保持图片的 也就是细节。虽然其中有许多 因此这种操作是大多数现代浏览器中的 数码相机的现状。
  • SDR 白点

    • 特定显示屏上 SDR 内容的最大线性亮度 。
  • HDR 白点

    • 显示屏上 HDR 内容在特定情况下的最大线性亮度 。此值通常高于 SDR 白点。
  • 增强

    • HDR 白点除以 SDR 白点。
  • 最大内容提升量(等式中的 max_content_boost

    • 此值可让内容创作者限制图片的亮度 在 HDR 显示屏上展示时获得的效果。
    • 此值是特定图片的常量。例如,如果 值为四,则对于任何给定像素, 显示的 HDR 呈现效果不得超过 SDR 呈现。实际上,这就意味着 该场景的显示亮度最高可达 4 倍。
    • 实际上,此值通常大于 1.0。
    • 始终大于或等于最低内容提升量
  • 最低内容提升量(等式中的 min_content_boost

    • 该值可让内容创作者限制 当显示在 HDR 显示屏上时,图片相对于 SDR 的 。此值是特定图片的常量。
    • 例如,如果值为 0.5,则对于任何给定像素,线性 显示的 HDR 呈现效果的亮度必须至少为 SDR 呈现的线性亮度
    • 实际上,此值通常等于或小于 1.0。
    • 始终小于或等于内容提升上限
  • 最大显示屏提升(等式中的 max_display_boost

    • 显示屏支持的最大增强效果(在 。该值可能会因设备设置和其他 例如环境光条件、 。
    • 例如,如果此值为 4.0,则显示屏能够 显示亮度最多为 SDR 四倍的像素 白点。此值始终大于等于 1.0,因为显示屏始终可以 HDR 白色的亮度至少与 SDR 的白色一样亮。
  • 提升显示效果

    • 等于内容提升上限和显示增强上限中的较小者。这个 值始终大于等于 1.0。
    • 例如,如果内容增强最大值为 4.0,显示增强最大值为 3.0, 那么显示增强比例为 3.0。像素的亮度提升至原来的 3 倍 因为显示功能是限制因素
    • 再举一例,如果内容提升上限是 4.0,而显示增强上限 则显示增强为 4.0。像素的分辨率高达 4 倍 因为内容的意图是限制因素。
  • 目标 HDR 呈现效果

    • 内容创作者认为理想的 HDR 呈现方式。
  • 经过调整的 HDR 呈现

    • 完成上述操作后, 针对当前的显示增强调整目标 HDR 呈现效果。
  • 增益图(方程中的 recovery(x, y)

    • 一张地图,指示了 SDR 呈现中每个像素的亮度 以生成目标 HDR 呈现效果。此地图可以是单渠道地图, 多渠道。多声道映射指示每个声道的单独增益 例如红色、绿色和蓝色。本文档介绍了 例如单通道地图的情况。
  • clamp(x, a, b)

    • 将值 x 限制在 [a, b] 范围内。
  • exp2(x)

    • 以 2 为底数的指数;2
  • floor(x)

    • 返回等于或小于 x 的最接近的整数。
  • log2(x)

    • 以 2 为底的对数;对数2(x)
  • pow(b, x)

    • 指数;bx
  • XMP

  • 多图片格式

    • 多照片格式是由相机和成像技术开发团队开发的 在 Google Cloud 中存储多张 JPEG 编码图片的产品协会 (CIPA) 单个 JPEG 文件
    • 如需了解详情,请参阅相关依赖项 CIPA 白皮书 DC-x 007-2009 多画面格式
  • GContainer

    • GContainer 是一种在一张映像中存储多张图片的方法 容器,其中有一个映像被视为主映像。不限 额外的图片会被视为替代版本或辅助图片。 XMP 元数据用于传达任何 其他图片。有关详情,请参阅 GContainer 详情部分。

编码

本部分介绍如何对符合要求的 JPEG 文件进行编码。请参阅 T.81 (09/92) 连续色调静态图片的数字压缩和编码 依赖项部分,以获取更多信息。 JPEG 格式

增益图生成

相机成像管道通常会执行范围压缩操作 将较高的动态范围亮度数据压缩到常规的较低范围 SDR 显示。增益图提供了一种机制来存储足够的数据, 恢复原始的动态范围亮度数据。

本部分中的以下计算假定使用浮点算法。

以下函数描述了 SDR 映像:

  • SDR'(x, y) 为三通道的非线性(通常为伽马编码) 主要映像
  • SDR(x, y) 是三通道主要图片的线性版本; 通过转换为主图片颜色的线性版本而获得 空间。例如,从使用 sRGB 转换函数的颜色空间 保留 sRGB 原色的线性颜色空间。

Ysdr(x, y) 函数的定义范围为 0.0 到 1.0,并且 标准动态范围主要图片的线性亮度:

Ysdr(x, y) = primary_color_profile_to_luminance(SDR(x, y))

HDR 图片也存在类似的定义。

  • HDR'(x, y) 是三声道非线性函数,即采用 PQ 或 HLG 编码 图片。
  • HDR(x, y) 是三通道线性 HDR 图片。

Yhdr(x, y) 是 HDR 图片给定点的亮度:

Yhdr(x, y) = primary_color_profile_to_luminance(HDR(x, y))

Yhdr(x, y) 的范围为 0.0 到内容增强上限。

SDR 和 HDR 图片必须具有相同的分辨率。SDR 的颜色配置文件 image ,用于定义 HDR 图片的颜色空间。

例如,如果 SDR 主图片使用的是 Display-P3 颜色配置文件 HDR 图片相对于该配置文件的主要颜色进行定义。这个 表示 HDR 图片也具有 Display-P3 原色。

增益图根据包含所需 HDR 图像的两张线性图像计算得出 亮度 (Yhdr(x, y)) 和标准范围的亮度图片 (Ysdr(x, y))。

pixel_gain(x, y) 函数定义为 Yhdr(x, y) 之间的比率, 函数和 Ysdr(x, y) 函数:

pixel_gain(x, y) = (Yhdr(x, y) + offset_hdr) / (Ysdr(x, y) + offset_sdr)

pixel_gain(x, y) 函数的行为,其中 Ysdr(x, y)offset_sdr 和零都是由实现定义的

例如,实现可以处理 Ysdr(x, y) 和 通过将 pixel_gain(x, y) 定义为 1.0,offset_sdr 都为零。或者 实现还可以利用非零 offset_sdr 来避免这种情况。

该实现可能会选择 offset_sdroffset_hdr 的值。

增益图是一个标量函数,用于在pixel_gain(x, y) 相对于最大内容增强和最小内容提升的对数空间:

map_min_log2 = log2(min_content_boost)
map_max_log2 = log2(max_content_boost)

log_recovery(x, y) = (log2(pixel_gain(x, y)) - map_min_log2)
                   / (map_max_log2 - map_min_log2)
clamped_recovery(x, y) = clamp(log_recovery(x, y), 0.0, 1.0)
recovery(x, y) = pow(clamped_recovery(x, y), map_gamma)

pixel_gain(x, y) 为零的 recovery(x, y) 函数行为 已定义实现,因为未定义 log2(0)

map_gamma 是一个浮点数,必须大于 0.0 由实施选择。

内容提升上限和最低内容提升值为 实现定义,并可以由内容创作者任意决定。 内容提升上限必须大于或等于 1.0。最低内容提升要求 在 (0.0, 1.0] 范围内。

recovery(x, y) 中的值不得超过 [0.0, 1.0] 范围。

增益图存储在次要图片 JPEG 中,因此必须进行编码 使用 8 位无符号整数值,因此范围为 [0, 255]。每个值 表示一个 recovery(x, y) 值,并存储在辅助 图片。

对于 8 位无符号整数存储,编码值定义为 以下:

encoded_recovery(x, y) = floor(recovery(x, y) * 255.0 + 0.5)

编码函数的计算以浮点数完成,并以 按指示舍入到 8 位无符号整数结果的末端。

此编码会生成 8 位无符号整数表示, recovery(x, y) 值(介于 0.0 到 1.0 之间)。编码增益图必须存储在 次要图片项 JPEG。该实现会选择 以便在 JPEG 编码期间使用。

增益图存储在次要图像中之后,会附加到主要图像中 包含 MPF 和 GContainer XMP 元数据的映像。主要映像 GContainer 目录中必须包含增益图图像的项。

存储增益图的分辨率由实现定义,可以是 与主要图片的分辨率不同。增益 为存储时,地图会缩放为与主图片不同的分辨率, 采样方法必须是双线性或更好,并且由实现定义。

增益图的方向必须与主要图像的方向一致。如果 存储的增益图图像中的任何方向元数据(如 EXIF), 。

如果存在,则不使用增益图的颜色配置文件。

增益图容器

颜色配置文件

图片的颜色配置文件必须通过 主要映像

XMP 属性

主图片包含 XMP 元数据,用于定义至少两张带有额外信息的图片 的语义信息。

以下各小节包含有关此格式的详细信息。其他 GContainer 的一般一致性信息, GContainer 详细信息部分。

下表中描述的属性值以 XMP 简单 指定 XMP 基本值类型的值。

内容语义值

Item:Semantic 属性定义应用特定的含义 容器目录中每个媒体项的名称

说明
主要 表示媒体内容是可供展示的主图片, 。目录必须包含一个“Primary”内容。
增益图 表示媒体项是增益图。该目录可能包含 最多一个“GainMap”内容。

HDR 增益图元数据

增益图元数据对有关如何解释和应用增益的信息进行编码 映射以生成主要图片的 HDR 表示形式。

增益地图元数据 XMP 扩展的 XMP 命名空间 URI 为 http://ns.adobe.com/hdr-gain-map/1.0/。默认的命名空间前缀是 hdrgm

该元数据存储在增益地图图像的 XMP 数据包中, 属性必须显示在增益地图图像 XMP 的 rdf:Description 中:

名称 类型 说明
hdrgm:版本 文本 所用增益映射格式的版本。此版本为“1.0”。 必需
hdrgm:BaseRenditionIsHDR 布尔值 表示主要图片的动态范围。“False”表示 主要图像为 SDR,增益图可与其结合使用以生成 HDR 呈现。“True”表示主要图像为 HDR,增益图 以生成 SDR 呈现。必须为“False”。 可选;默认值为“False”。
hdrgm:增益映射最小值 Real 或有序 Real 数组 存储 map_min_log2 的值。这是 最低内容提升比例为 log2,这是允许的最小比率 目标 HDR 呈现效果的线性亮度(相对于 SDR 图片大小。可以是单个 Real 或 有序的 Real 数组。当一个有序的 Reals 数组时,它可以包含一个 这个条目会应用于所有通道或 3 个项目(红色、绿色和 分别为蓝色通道。必须小于或等于 hdrgm:GainMapMax可选;默认值为 0.0。
hdrgm:增益图最大 Real 或有序 Real 数组 存储 map_max_log2 的值。这是 内容提升上限的 log2,这是允许的最大比率 目标 HDR 呈现相对于(除 SDR 图片大小。可以是单个 Real 或 有序的 Real 数组。当一个有序的 Reals 数组时,它可以包含一个 这个条目会应用于所有通道或 3 个项目(红色、绿色和 分别为蓝色通道。必须大于或等于 hdrgm:GainMapMin必需
hdrgm:伽马 Real 或有序 Real 数组 存储 map_gamma 的值。这个 gamma 用于 应用于存储的映射值。可以是单个 Real 或 实数。当一个有序的 Real 数组时,它可能包含一项适用 所有通道或 3 项(红色、绿色和蓝色通道) 。必须大于 0.0。可选;默认值为 1.0。
hdrgm:OffsetSDR Real 或有序 Real 数组 存储 offset_sdr 的值。这是相对于 应用到增益图生成和应用期间 SDR 像素值。 可以是单个 Real 或有序的 Real 数组。当一个 实数,它可以包含一个适用于所有频道或三项的项 分别表示红、绿和蓝通道。必须大于或等于 0.0。 可选;默认值为 0.015625 (1/64)。
hdrgm:OffsetHDR Real 或有序 Real 数组 存储 offset_hdr 的值。这是相对于 应用到增益图生成和应用期间的 HDR 像素值。 可以是单个 Real 或有序的 Real 数组。当一个 实数,它可以包含一个适用于所有频道或三项的项 分别表示红、绿和蓝通道。必须大于或等于 0.0。 可选;默认值为 0.015625 (1/64)。
hdrgm:HDRCapacityMin 实数 存储 hdr_capacity_min 的值。这是 地图所适用的最小显示增强值的 log2 该值还会影响基于增益图的应用范围 显示增强。必须大于或等于 0.0。可选;默认 值为 0.0。
hdrgm:HDRCapacityMax 实数 存储 hdr_capacity_max 的值。这是 地图所针对的最大显示增强值的 log2 已完全应用该值还会影响增益图的应用范围 根据显示增强情况进行微调。必须大于 hdrgm:HDRCapacityMin必需

增益图 XMP 示例

以下有效增益映射 XMP 数据包示例包含拍摄的元数据 (请参阅简介部分中介绍的示例文件)。

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.5.0">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description rdf:about=""
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0"
     hdrgm:GainMapMin="-0.57609993"
     hdrgm:GainMapMax="4.7090998"
     hdrgm:Gamma="1"
     hdrgm:OffsetSDR="0.015625"
     hdrgm:OffsetHDR="0.015625"
     hdrgm:HDRCapacityMin="0"
     hdrgm:HDRCapacityMax="4.7090998"
     hdrgm:BaseRenditionIsHDR="False"/>
  </rdf:RDF>
</x:xmpmeta>

增益图的 MPF 存储

根据 CIPA 中的定义,增益图图像必须存储为附加图像 DC-x 007-2009 多画面格式,如 依赖项部分。

解码

本部分介绍了如何从符合要求的 JPEG 文件中解码增益图。

格式的信号

符合此格式的 JPEG 文件可通过存在 hdrgm:Version="1.0",其中 hdrgm 是 命名空间 URI http://ns.adobe.com/hdr-gain-map/1.0/

找到增益图图像

如需详细了解如何解析和解码图片,请参阅以下 GContainer 详情部分。“增益图”XMP 中的语义项 rdf:Directory 用于指示增益地图图像的位置。 MPF Index IFD 并扫描图片的XMP 用于确定 增益图的位置。

处理无效元数据

如果必填字段未显示或存在,元数据就会被视为无效 字段的值无效。值可能无效,因为它不是 可解析为指定类型,或因为它超出了预期范围。

如果遇到无效的元数据,则应忽略增益图并 图片。

显示

以 HDR 增益映射格式编码的文件 传统 SDR 显示屏,或具有更高亮度的 HDR 显示屏 输出。

使用增益图创建自适应 HDR 呈现效果

本部分中的以下计算假定使用浮点算法。

encoded_recovery(x, y) 是单通道 8 位无符号整数值 增益图图像

如果增益图的分辨率与主图像不同,则 encoded_recovery(x, y) 则是由对 在主要图像宽度和高度范围内增益 x 和 y 的地图图像, 。过滤方法必须为双线性或更好,并且 实现。

map_gammahdrgm:Gamma 元数据字段确定。

log_recovery(x, y) 是 对数空间:

recovery(x, y) = encoded_recovery(x, y) / 255.0
log_recovery(x, y) = pow(recovery(x, y), 1.0 / map_gamma)

最大显示屏提升值是一个标量浮点值,定义为 当前 HDR 白点除以当前 SDR 白点。这个 值由显示系统提供,可能会随时间而变化。

hdr_capacity_maxhdrgm:HDRCapacityMax 元数据字段确定。 hdr_capacity_minhdrgm:HDRCapacityMin 元数据字段确定。

hdrgm:BaseRenditionIsHDR 时,weight_factor 会按以下方式确定: “False”:

unclamped_weight_factor = (log2(max_display_boost) - hdr_capacity_min)
                        / (hdr_capacity_max - hdr_capacity_min)
weight_factor = clamp(unclamped_weight_factor, 0.0, 1.0)

hdrgm:BaseRenditionIsHDR 为“True”时,第二个方程式为:

weight_factor = 1.0 - clamp(unclamped_weight_factor, 0.0, 1.0)

gain_map_maxhdrgm:GainMapMax 元数据字段确定。 gain_map_minhdrgm:GainMapMin 元数据字段确定。 offset_sdrhdrgm:OffsetSDR 元数据字段确定。offset_hdr 取决于 hdrgm:OffsetHDR 元数据字段。

线性自适应 HDR 呈现的计算方法如下:

log_boost(x, y) = gain_map_min * (1.0f - log_recovery(x, y))
                + gain_map_max * log_recovery(x, y)
HDR(x, y) = (SDR(x, y) + offset_sdr) * exp2(log_boost(x, y) * weight_factor)
          - offset_hdr

如果需要,该实现可能会对 HDR(x, y) 应用转换,以将 将数据存储在显示屏预期的空间内。任何此类转换都必须 正确。

GContainer 详细信息

本节规定了额外的要求,以使此格式符合 以及 GContainer XML 元数据元数据会按照 ISO 166841:2011(E) XMP 规范第 1 部分和嵌入式 如 Adobe XMP 规范第 3 部分所述, Google 文件极客的存储空间。主图片文件包含 格式为 RDF/XML。

XMP 数据包要求

XMP 数据包应通过 命名空间 URI http://ns.adobe.com/hdr-gain-map/1.0/。默认命名空间 前缀为 hdrgm

XMP 数据包应定义 hdrgm:Version="1.0"

容器元素

GContainer XMP 扩展的 XMP 命名空间是 http://ns.google.com/photos/1.0/container/。默认的命名空间前缀是 Container

主图片在 XMP 元数据中包含 Container:Directory 元素 定义文件中后续媒体文件的顺序和属性 容器。容器中的每个文件在 Container:Directory。媒体内容描述的是文件中的位置 容器和每个串联文件的基本属性。

容器元素以编码方式编入主图片的 XMP 元数据, 定义了容器中媒体项的目录。媒体项必须位于 与 目录,并且必须紧密封装。

目录只能包含一个“Primary”图片项,并且它必须是第一个 目录。

元素名称 类型 说明
容器:目录 有序结构数组 有序结构体数组,其中每个结构体都包含一个 Container:Item 结构体来定义容器的布局和内容。

商品元素

项目元素描述应用如何使用每个媒体项。

GContainer Item XMP 扩展的 XMP 命名空间 URI 为 http://ns.google.com/photos/1.0/container/item/。默认命名空间前缀 为 Item

第一项媒体内容必须是主图片。它必须指定 Item:Semantic = "Primary"Item:Mime 内容 MIME 类型值

主图片内容的长度通过解析主图片内容确定 根据 MIME 类型从文件容器的开头开始。

媒体项可以包含 Item:Padding 属性,用于指定额外的 媒体项末尾与下一个媒体开头之间的内边距 内容。当在 Container:Directory 中的最后一个媒体项上显示时, Item:Padding 表示项末尾与 文件。

每项媒体内容必须包含 Item:Mime 类型和 Item:Semantic 属性。 次要图片媒体内容必须包含 Item:Length 属性。

顺序媒体项可以在文件容器中共享资源数据。通过 第一个媒体内容可确定资源在文件容器中的位置, 并将 Item:Length 设为 0。假设 资源数据本身就是一个容器,Item:URI 可用于确定 媒体项数据在资源中的位置。

媒体内容资源在容器中的位置由 主图片编码的长度、Item:Length 前面的次要媒体内容资源,以及之前的所有 Item:Padding 值。在以下媒体内容资源中,Item:Padding 被视为 0 指定其值。

属性名称 类型 说明
项目:Mime 文本 指示媒体内容 MIME 类型的简单字符串 容器。有关定义,请参阅“内容 MIME 类型值”部分。 必需
Item:语义 文本 简单的字符串,指示媒体的应用特定含义 内容。有关定义,请参阅“商品语义值”部分。 必需
商品:长度 整数 包含商品长度(以字节为单位)的正整数的简单字符串。 长度 0 表示媒体项资源与之前的 媒体项。次要媒体内容的必填项。主实例的可选标记 图片媒体内容。
项目:标签 文本 实现定义的字符串,用于消除多项歧义 具有相同 Item:Semantic 的元素。可选
Item:Padding 整数 包含额外(以字节为单位)长度的正整数的字符串 媒体项的末尾与下一项的开头之间的内边距 媒体项,或者用于 Container:Directory。如果不存在,则假定值为 0。 可选。
项目:URI 文本 符合 ISO/IEC 14496-12 第 8.11.9 节的 URI 字符串,其中包含 媒体内容资源内媒体数据的相对 URI。默认值为 主要图片资源对于 ISO 基本媒体文件格式 ISO/IEC 14496-12 MIME 类型是可选的。 不能用于其他用途。

内容 MIME 类型值

Item:Mime 属性定义每项媒体内容的 MIME 类型 数据。

说明
图片/jpeg JPEG 图片。

GContainer XMP 示例

下例是一个有效的 GContainer XMP 数据包,其元数据取自 请参阅简介部分中介绍的示例文件。

<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.2">
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description
     xmlns:Container="http://ns.google.com/photos/1.0/container/"
     xmlns:Item="http://ns.google.com/photos/1.0/container/item/"
     xmlns:hdrgm="http://ns.adobe.com/hdr-gain-map/1.0/"
     hdrgm:Version="1.0">
      <Container:Directory>
        <rdf:Seq>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="Primary"
             Item:Mime="image/jpeg"/>
          </rdf:li>
          <rdf:li rdf:parseType="Resource">
            <Container:Item
             Item:Semantic="GainMap"
             Item:Mime="image/jpeg"
             Item:Length="66171"/>
          </rdf:li>
        </rdf:Seq>
      </Container:Directory>
    </rdf:Description>
  </rdf:RDF>
</x:xmpmeta>