Formato de imagen Ultra HDR v1.0

Introducción

En este documento, se define el comportamiento de un nuevo formato de archivo que codifica una imagen de mapa de ganancia de rango logarítmico en un archivo de imagen JPEG. Los lectores heredados que no admiten el formato nuevo leen y muestran la imagen convencional de bajo rango dinámico del archivo de imagen.Los lectores que admiten el formato combinan la imagen principal con el mapa de ganancias y renderizan una imagen de alto rango dinámico en pantallas compatibles.

En el resto de este documento, se describen los métodos de los procesos necesarios para usar este formato. En general, el ciclo de vida de una imagen que cumple con este formato es el siguiente:

  1. Codificación

    1. Obtén la generación de mapas
    2. Cómo ganar compresión de mapa
    3. Obtén la generación de contenedores de mapas
  2. Decodificación


Ejemplo de diseño de archivo de formato de imagen Ultra HDR, con información de desplazamiento y metadatos asociados

Figura 1: Ejemplo de diseño de archivo y metadatos relevantes.

Motivación

El objetivo de este formato de archivo es codificar información adicional en archivos de imagen SDR que se pueda usar en combinación con la técnica de visualización para producir sus formatos HDR óptimos en un solo archivo.

Para que esto sea práctico, el formato de archivo debe cumplir con los siguientes requisitos:

  • Debe ser retrocompatible para que se muestre la imagen SDR convencional en los usuarios simples.
  • No ocupe demasiado espacio extra.

Además, la técnica de visualización debe cumplir con lo siguiente:

  • No requieren procesamiento intensivo para la decodificación.
  • Ser capaz de adaptarse a cualquier proporción entre los puntos blancos de HDR y SDR de una pantalla, que pueden variar significativamente entre dispositivos o incluso temporalmente en uno solo

Por último, la técnica debe poder realizar todas las acciones anteriores sin nunca lo siguiente:

  • Recorte de momentos destacados
  • Sombras que aplastan.
  • Cambiar o comprimir el contraste local
  • Cambiar las relaciones tonales relativas (entre los objetos de la escena)

Dependencias

Las siguientes son referencias normativas para esta especificación:

Definiciones

  • Pantalla SDR

    • Una pantalla convencional, que no está diseñada para mostrar contenido HDR. Estas pantallas suelen producir un brillo máximo nominal de aproximadamente 400 cd/m2 o menos.
  • Pantalla HDR

    • Una pantalla diseñada para contenido HDR. Estas pantallas generalmente producen un brillo máximo nominal mayor que el de una pantalla SDR (800 cd/m2 o más) y también tienen una mejor proporción de contraste que las pantallas SDR.
  • Imagen principal

    • La primera instancia de una imagen en un archivo GContainer con archivos multimedia secundarios adjuntos. La imagen principal contiene metadatos XMP de GContainer que definen el orden y las propiedades de los archivos de elementos multimedia secundarios posteriores en el contenedor de archivos.
  • Imagen secundaria

    • Archivos de elementos multimedia posteriores que se agregan a la imagen principal en un archivo GContainer.
  • Compresión de rango

    • En fotografía, las escenas del mundo real suelen tener más rango dinámico que el que puede representar una pantalla SDR. Las operaciones como la compresión de rango, también llamada asignación de tono local, son necesarias para reducir el rango dinámico de una imagen. Esta reducción tiene que evitar recortar zonas brillantes o aplastar las sombras, a la vez que se preserva el contraste local tanto como sea posible.Se intenta reducir el tamaño de los grandes bordes de luminancia en la imagen, lo que contribuye más a su contraste global, a la vez que intentas preservar el tamaño de los pequeños bordes de luminancia, que son los detalles.Aunque existen muchas implementaciones diferentes, esa operación es estándar en la mayoría de las cámaras digitales modernas de la actualidad.
  • Punto blanco de SDR

    • La luminancia lineal máxima del contenido SDR en una pantalla en un momento determinado.
  • Punto blanco HDR

    • Es la luminancia lineal máxima del contenido HDR en una pantalla en un momento determinado. Este valor suele ser superior al punto blanco de SDR.
  • Amplificación

    • Es el punto blanco de HDR dividido por el punto blanco de SDR.
  • Aumento máximo del contenido (max_content_boost en ecuaciones)

    • Este valor permite que el creador del contenido restrinja cuánto más brillante puede obtener una imagen cuando se muestra en una pantalla HDR, en relación con la representación SDR.
    • Este valor es una constante para una imagen en particular. Por ejemplo, si el valor es cuatro, para cualquier píxel determinado, la luminancia lineal de la representación HDR que se muestra debe ser, como máximo, 4 veces la luminancia lineal de la representación SDR. En la práctica, esto significa que las partes más brillantes de la escena pueden mostrarse hasta 4 veces más brillantes.
    • En la práctica, este valor suele ser mayor que 1.0.
    • Siempre es mayor o igual que el aumento mínimo del contenido.
  • Aumento mínimo del contenido (min_content_boost en ecuaciones)

    • Este valor permite que el creador del contenido restrinja cuánto más oscura puede volverse una imagen, cuando se muestra en una pantalla HDR, en relación con la representación SDR.Este valor es una constante para una imagen en particular.
    • Si, por ejemplo, el valor es 0.5, para cualquier píxel determinado, la luminancia lineal de la representación HDR que se muestra debe ser (al menos) 0.5 veces la luminancia lineal de la representación SDR.
    • En la práctica, este valor suele ser igual o solo menor que 1.0.
    • Siempre debe ser menor o igual que el Aumento máximo del contenido.
  • Mejora máx. en la Red de Display (max_display_boost en ecuaciones)

    • Es la mejora máxima disponible que admite una pantalla en un momento determinado. Este valor puede cambiar con el tiempo según la configuración del dispositivo y otros factores, como las condiciones de luz ambiente o la cantidad de píxeles brillantes en la pantalla.
    • Por ejemplo, si este valor es 4.0, la pantalla puede mostrar un píxel que sea, como máximo, cuatro veces más brillante que el punto blanco de SDR. Este valor siempre es >= 1.0, ya que la pantalla siempre puede mostrar HDR en blanco al menos tan brillante como el blanco SDR.
  • Mejora de la pantalla

    • Igual al menor entre la mejora del contenido máximo y la potencia máxima de anuncios gráficos Este valor es siempre >= 1.0.
    • Por ejemplo, si la mejora máxima del contenido es de 4.0 y la mejora máxima de la Red de Display es de 3.0, la mejora de la Red de Display es de 3.0. Los píxeles se muestran hasta 3 veces más brillantes que los SDR, ya que las capacidades de la pantalla son el factor limitante.
    • Por otro ejemplo, si la mejora máxima del contenido es de 4.0 y la mejora máxima de la Red de Display es de 5.0, la mejora de la pantalla es de 4.0. Los píxeles se muestran hasta 4 veces más brillantes que los SDR, ya que la intención del contenido es el factor limitante.
  • Renderización HDR objetivo

    • La representación HDR ideal según el creador del contenido.
  • Renderización HDR adaptada

    • Es la representación final de HDR que se muestra en la pantalla después de adaptar la representación HDR de destino para la mejora de la pantalla actual.
  • Mapa de ganancias (recovery(x, y) en ecuaciones)

    • Es un mapa que indica el nivel de brillo de cada píxel, en la representación SDR, para producir la representación HDR objetivo. Este mapa puede ser de un solo canal o multicanal. Un mapa multicanal indica una ganancia separada para cada canal de color, como rojo, verde y azul. En este documento, se ilustra el caso de un mapa de un solo canal.
  • clamp(x, a, b)

    • Fija el valor x al rango [a, b].
  • exp2(x)

    • Exponenciación en base 2; 2x.
  • floor(x)

    • Muestra el número entero más cercano que sea igual o inferior a x.
  • log2(x)

    • Logaritmo en base 2; logaritmo2(x)
  • pow(b, x)

    • Exponenciación; bx.
  • XMP

  • Formato multiimagen

    • El formato multiimagen es una técnica desarrollada por la Asociación de productos de imagen y cámara (CIPA) para almacenar varias imágenes codificadas en JPEG en un solo archivo JPEG.
    • Para obtener más información, consulta la dependencia relacionada en el Informe de CIPA sobre el formato de varias imágenes DC-x 007-2009.
  • GContainer

    • GContainer es un método para almacenar varias imágenes en un contenedor, en el que una imagen se considera la principal. Las imágenes adicionales se consideran versiones alternativas o auxiliares. Los metadatos de XMP se usan para comunicar la presencia y el significado de cualquier imagen adicional. Para obtener más información, consulta la sección Detalles de GContainer.

Codificar

En esta sección, se describe cómo codificar un archivo JPEG conforme. Consulta T.81 (09/92) Compresión digital y codificación de imágenes estáticas de tono continuo en la sección Dependencias para obtener más información sobre el formato JPEG.

Obtén la generación de mapas

Por lo general, las canalizaciones de imágenes de la cámara realizan una operación de compresión de rango para comprimir los datos de luminancia de rango dinámico más alto en el rango más bajo de pantallas SDR convencionales. El mapa de ganancia proporciona un mecanismo para almacenar suficientes datos a fin de recuperar los datos originales de la luminancia de rango dinámico más alto.

Los siguientes cálculos de esta sección suponen la aritmética de punto flotante.

Las siguientes funciones describen la imagen SDR:

  • SDR'(x, y) es la imagen principal no lineal de tres canales (por lo general, con codificación gamma).
  • SDR(x, y) es la versión lineal de la imagen principal de tres canales, que se obtiene mediante la transformación a una versión lineal del espacio de color de la imagen principal. Por ejemplo, desde un espacio de color con una función de transferencia sRGB hasta un espacio de color lineal que conserva los colores primarios sRGB.

La función Ysdr(x, y) se define en el rango de 0.0 a 1.0 y es la luminancia lineal estándar de la imagen principal del rango dinámico:

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

Existen definiciones similares para la imagen HDR.

  • HDR'(x, y) es la imagen no lineal de tres canales, es decir, una imagen codificada en PQ o HLG.
  • HDR(x, y) es la imagen HDR lineal de tres canales.

Yhdr(x, y): Es la luminancia en un punto determinado de la imagen HDR:

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

Yhdr(x, y) se define en el rango de 0.0 a máxima mejora del contenido.

Las imágenes SDR y HDR deben tener la misma resolución. El perfil de color de la imagen SDR define el espacio de color de la imagen HDR.

Por ejemplo, si la imagen principal del SDR tiene un perfil de color Display-P3, la imagen HDR se define según los colores primarios de ese perfil. Esto significa que la imagen HDR también tiene colores primarios de Display-P3.

El mapa de ganancia se calcula a partir de dos imágenes lineales que contienen la luminancia de imagen HDR deseada, Yhdr(x, y), y la imagen de luminancia de rango estándar, Ysdr(x, y).

La función pixel_gain(x, y) se define como la relación entre la función Yhdr(x, y) y la función Ysdr(x, y):

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

El comportamiento de la función pixel_gain(x, y) en el que Ysdr(x, y) y offset_sdr son cero está definido por la implementación.

Por ejemplo, las implementaciones pueden controlar el caso en el que Ysdr(x, y) y offset_sdr son cero si se define pixel_gain(x, y) como 1.0. Como alternativa, las implementaciones también evitan esta situación mediante el uso de un offset_sdr distinto de cero.

La implementación puede elegir los valores de offset_sdr y offset_hdr.

El mapa de ganancias es una función escalar que codifica pixel_gain(x, y) en un espacio logarítmico en relación con la mejora máxima y la mínima del contenido:

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)

El comportamiento de la función recovery(x, y) en el que pixel_gain(x, y) es cero se define en la implementación porque log2(0) no está definido.

map_gamma es un número de punto flotante que debe ser mayor que 0.0 y que la implementación elige.

Los valores de los valores máximo y mínimo del contenido se definen en la implementación, y el creador del contenido puede decidir de manera arbitraria. El aumento máximo del contenido debe ser mayor o igual que 1.0. El aumento mínimo del contenido debe estar en el rango (0.0, 1.0).

Los valores en recovery(x, y) están limitados al rango [0.0, 1.0].

El mapa de ganancias se almacena en una imagen JPEG secundaria y, por lo tanto, se debe codificar con valores enteros de 8 bits sin firma, dentro del rango [0, 255]. Cada valor representa un valor de recovery(x, y) y se almacena en un píxel de la imagen secundaria.

Para el almacenamiento de números enteros sin firma de 8 bits, el valor codificado se define de la siguiente manera:

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

El cálculo de la función de codificación se realiza en punto flotante y se convierte al final en el resultado de número entero sin firma de 8 bits mediante el redondeo como se indica.

Esta codificación da como resultado una representación de número entero sin firma de 8 bits de valores recovery(x, y), de 0.0 a 1.0. El mapa de ganancias codificado se debe almacenar en un elemento de imagen secundaria como un JPEG. La implementación elige la cantidad de compresión que se usará durante la codificación JPEG.

Después de que el mapa de ganancias se almacena en una imagen secundaria, se adjunta a una imagen principal con metadatos de MPF y GContainer XMP. El directorio GContainer de imágenes principal debe contener un elemento para la imagen del mapa de ganancias.

La resolución del mapa de ganancias almacenado está definida por la implementación y puede ser diferente de la resolución de la imagen principal. En caso de que el mapa de ganancias se ajuste a una resolución diferente a la de la imagen principal para el almacenamiento, el método de muestreo debe ser bilineal o mejor, y se define la implementación.

La orientación del mapa de ganancias debe coincidir con la de la imagen principal. Si está presente, no se usan los metadatos de orientación en la imagen del mapa de ganancias almacenada, como en el archivo EXIF.

Si está presente, no se usa el perfil de color del mapa de ganancias.

Obtener contenedor de mapa

Perfil de color

El perfil de color de la imagen debe indicarse mediante un perfil de ICC para la imagen principal.

Atributos XMP

La imagen principal contiene metadatos XMP para definir al menos dos imágenes con información semántica adicional para el formato de mapa de ganancia HDR.

Las siguientes subsecciones contienen detalles específicos de este formato. En la sección Detalles de GContainer, se especifica información adicional sobre el cumplimiento general de GContainer.

Los valores de los atributos que se describen en las siguientes tablas se almacenan como valores simples de XMP de los tipos de valores básicos de XMP especificados.

Valores semánticos del elemento

La propiedad Item:Semantic define el significado específico de la aplicación de cada elemento multimedia en el directorio del contenedor.

Valor Descripción
Principal Indica que el elemento multimedia es la imagen principal, lista para mostrar, en el contenedor. El directorio debe contener un elemento "Principal".
Mapa de ganancias Indica que el elemento multimedia es un mapa de ganancias. El directorio puede contener como máximo un elemento "GainMap".

Obtener metadatos de mapas mediante HDR

Los metadatos del mapa de ganancia codifica la información sobre cómo interpretar y aplicar el mapa de ganancias para producir la representación HDR de la imagen principal.

El URI del espacio de nombres XMP para la extensión XMP de metadatos de mapa de obtención es http://ns.adobe.com/hdr-gain-map/1.0/. El prefijo del espacio de nombres predeterminado es hdrgm.

Estos metadatos se almacenan en el paquete XMP de la imagen del mapa de ganancias y las siguientes propiedades deben aparecer en el rdf:Description de la imagen de mapa de ganancias de XMP:

Nombre Tipo Descripción
hdrgm:Versión Texto Es la versión del formato de mapa de ganancias en uso. Esta versión es la “1.0”. Obligatorio:
hdrgm:BaseRenditionIsHDR Booleano Indica el rango dinámico de la imagen principal. "False" indica que la imagen principal es SDR y el mapa de ganancias se puede combinar con ella para producir una representación HDR. "Verdadero" indica que la imagen principal es HDR y que el mapa de ganancias podría combinarse con ella para producir la representación en SDR. Debe ser "Falso". Opcional; el valor predeterminado es "False".
hdrgm:GainMapMin Array reales o ordenados de reales Almacena los valores de map_min_log2. El valor mínimo de aumento del contenido es de log2, que es la proporción mínima permitida de la luminancia lineal para la representación HDR objetivo en relación con la de la imagen SDR (dividida por) en un píxel determinado. Puede ser un solo Real o un array ordenado de Reals. Cuando un array ordenado de valores reales puede contener un elemento que se aplica a todos los canales o tres para los canales rojo, verde y azul, respectivamente. Debe ser menor o igual que hdrgm:GainMapMax. Opcional; el valor predeterminado es 0.0.
hdrgm:GanarMapMax Array reales o ordenados de reales Almacena los valores de map_max_log2. El valor es log2 del aumento máximo del contenido, que es la proporción máxima permitida de la luminancia lineal para la representación HDR objetivo en relación con la de la imagen SDR (dividida por) en un píxel determinado. Puede ser un solo Real o un array ordenado de Reals. Cuando un array ordenado de valores reales puede contener un elemento que se aplica a todos los canales o tres para los canales rojo, verde y azul, respectivamente. Debe ser mayor o igual que hdrgm:GainMapMin. Obligatoria.
hdrgm:Gamma Array reales o ordenados de reales Almacena los valores de map_gamma. Es el valor gamma que se aplicará a los valores del mapa almacenado. Puede ser un valor real único o un array ordenado de valores reales. Cuando un array ordenado de valores reales puede contener un elemento que se aplica a todos los canales o tres elementos para los canales rojo, verde y azul, respectivamente. Debe ser mayor que 0.0. Opcional; el valor predeterminado es 1.0.
hdrgm:DesfaseSDR Array reales o ordenados de reales Almacena los valores de offset_sdr. Es el desplazamiento que se aplica a los valores de píxeles de SDR durante la generación y aplicación del mapa de obtención de mapas. Puede ser un solo Real o un array ordenado de Reals. Cuando un array ordenado de valores reales puede contener un elemento que se aplica a todos los canales o tres elementos para los canales rojo, verde y azul, respectivamente. Debe ser 0.0 o mayor. Opcional; el valor predeterminado es 0.015625 (1/64).
hdrgm:Desfase de HDR Array reales o ordenados de reales Almacena los valores de offset_hdr. Es el desplazamiento que se aplica a los valores de píxeles HDR durante la generación y aplicación del mapa cuando se obtiene. Puede ser un solo Real o un array ordenado de Reals. Cuando un array ordenado de valores reales puede contener un elemento que se aplica a todos los canales o tres elementos para los canales rojo, verde y azul, respectivamente. Debe ser 0.0 o mayor. Opcional; el valor predeterminado es 0.015625 (1/64).
hdrgm:HDRCapacidadMin Real Almacena el valor de hdr_capacity_min. Este es el log2 del valor mínimo de mejora de la visualización para el que se aplica el mapa. Este valor también afecta la cantidad que se debe aplicar el mapa de ganancias según la mejora de la pantalla. Debe ser 0.0 o mayor. Opcional; el valor predeterminado es 0.0
hdrgm:HDRCapacidadMax Real Almacena el valor de hdr_capacity_max. Este es el log2 del valor máximo de mejora de la visualización para el que se aplica completamente el mapa. Este valor también afecta la cantidad que se debe aplicar el mapa de ganancias según la mejora de la pantalla. Debe ser superior a hdrgm:HDRCapacityMin. Obligatoria.

Ejemplo de XMP del mapa de ganancias

El siguiente ejemplo de un paquete XMP de mapa de ganancia válido contiene metadatos tomados del archivo de ejemplo ilustrado en la sección Introducción.

<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>

Almacenamiento de MPF del mapa de ganancias

La imagen del mapa de ganancias se debe almacenar como una imagen adicional, según se define en el formato de imagen múltiple CIPA DC-x 007-2009, como se indica en la sección Dependencias.

Decodificar

En esta sección, se describe cómo decodificar el mapa de ganancias de un archivo JPEG conforme.

Indicador del formato

Un archivo JPEG que cumple con este formato se puede identificar por la presencia de hdrgm:Version="1.0" en el paquete XMP de la imagen principal, en el que hdrgm es el URI del espacio de nombres http://ns.adobe.com/hdr-gain-map/1.0/.

Ubica la imagen del mapa de ganancias

Para obtener información detallada sobre el análisis y la decodificación de la imagen, consulta la siguiente sección Detalles de GContainer. Un elemento semántico "GainMap" dentro del rdf:Directory de XMP se usa para indicar la ubicación de una imagen de mapa de ganancias. Como alternativa, se usa el IFD del índice de MPF y el XMP de las imágenes de escaneo para determinar la ubicación de un mapa de ganancias.

Cómo procesar metadatos no válidos

Los metadatos se consideran no válidos si no hay un campo obligatorio o si hay algún campo con un valor no válido. Es posible que un valor no sea válido porque no se puede analizar para el tipo especificado o porque está fuera del rango esperado.

Si se encuentran metadatos no válidos, se debe ignorar el mapa de ganancias y se debe mostrar la imagen SDR.

Display

Los archivos codificados en el formato de mapa de ganancias HDR pueden procesarse en pantallas SDR convencionales o en pantallas HDR capaces de generar una salida con mayor luminosidad.

Usa el mapa de ganancias para crear la representación HDR adaptada.

Los siguientes cálculos de esta sección suponen la aritmética de punto flotante.

encoded_recovery(x, y) es el valor de número entero sin firma de 8 bits y de un solo canal proveniente de la imagen del mapa de ganancias.

Si la resolución del mapa de ganancias es diferente a la de la imagen principal, encoded_recovery(x, y) se determina mediante una muestra filtrada de la imagen del mapa de ganancias para x e y sobre el rango del ancho y la altura de la imagen principal, respectivamente. El método de filtrado debe ser bilineal o mejor, y está definido por la implementación.

map_gamma se determina mediante el campo de metadatos hdrgm:Gamma.

log_recovery(x, y) es la ganancia normalizada de píxeles de punto flotante en un espacio logarítmico:

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

La mejora máxima de la pantalla es un valor de punto flotante escalar que se define como la relación entre el punto blanco de HDR actual y dividido por el punto blanco de SDR actual. El sistema de visualización proporciona este valor y puede cambiar con el tiempo.

hdr_capacity_max se determina mediante el campo de metadatos hdrgm:HDRCapacityMax. hdr_capacity_min se determina mediante el campo de metadatos hdrgm:HDRCapacityMin.

weight_factor se determina de la siguiente manera cuando hdrgm:BaseRenditionIsHDR es "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)

Cuando hdrgm:BaseRenditionIsHDR es "True", la segunda ecuación es en su lugar:

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

gain_map_max se determina mediante el campo de metadatos hdrgm:GainMapMax. gain_map_min se determina mediante el campo de metadatos hdrgm:GainMapMin. offset_sdr se determina mediante el campo de metadatos hdrgm:OffsetSDR. offset_hdr se determina mediante el campo de metadatos hdrgm:OffsetHDR.

La representación lineal en HDR adaptada se puede calcular de la siguiente manera:

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

Si es necesario, la implementación puede aplicar una transformación a HDR(x, y) para colocar los datos en el espacio que espera la pantalla. Estas transformaciones deben ser colorimétricamente correctas.

Detalles de GContainer

En esta sección, se especifican los requisitos adicionales para que este formato se ajuste a los metadatos XML de GContainer. Los metadatos se serializan según la especificación ISO 166841:2011(E) Parte 1 de la especificación XMP y se incorporan dentro del archivo de imagen principal como se describe en Almacenamiento en archivos de la parte 3 de la especificación de Adobe XMP. El archivo de imagen principal contiene los siguientes elementos, con formato RDF/XML.

Requisitos de los paquetes XMP

El paquete XMP debe incluir la extensión XMP de metadatos del mapa de ganancias a través del URI de espacio de nombres http://ns.adobe.com/hdr-gain-map/1.0/. El prefijo del espacio de nombres predeterminado es hdrgm.

El paquete XMP debe definir hdrgm:Version="1.0".

Elemento de contenedor

El espacio de nombres XMP para la extensión XMP de GContainer es http://ns.google.com/photos/1.0/container/. El prefijo del espacio de nombres predeterminado es Container.

La imagen principal contiene un elemento Container:Directory en los metadatos XMP que define el orden y las propiedades del archivo multimedia posterior en el contenedor de archivos. Cada archivo del contenedor tiene un elemento multimedia correspondiente en Container:Directory. El elemento multimedia describe la ubicación en el contenedor de archivos y las propiedades básicas de cada archivo concatenado.

El elemento de contenedor está codificado en los metadatos XMP de la imagen principal y define un directorio de elementos multimedia en el contenedor. Los elementos multimedia deben estar ubicados en el archivo del contenedor en el mismo orden que los elementos de los elementos multimedia del directorio y deben estar bien empaquetados.

El directorio solo puede contener un elemento de imagen "Principal" y debe ser el primero en él.

Nombre del elemento Tipo Descripción
Contenedor:Directorio Arreglo ordenado de estructuras Es el array ordenado de structs, cada uno con una Container:Item struct que define el diseño y el contenido del contenedor.

Elemento del elemento

Los elementos de los elementos describen cómo la aplicación usa cada elemento multimedia.

El URI de espacio de nombres XMP para la extensión XMP del elemento de GContainer es http://ns.google.com/photos/1.0/container/item/. El prefijo del espacio de nombres predeterminado es Item.

El primer elemento multimedia debe ser la imagen principal.Debe especificar Item:Semantic = "Primary" y un Item:Mime enumerado en los Valores de tipo de MIME de elemento.

La longitud del elemento de la imagen principal se determina mediante el análisis de la imagen principal en función del tipo de MIME a partir del comienzo del contenedor del archivo.

Los elementos multimedia pueden contener un atributo Item:Padding que especifique un relleno adicional entre el final del elemento multimedia y el comienzo del siguiente. Cuando está presente en el último elemento multimedia de Container:Directory, Item:Padding indica padding entre el final del elemento y el final del archivo.

Cada elemento multimedia debe contener el tipo Item:Mime y los atributos Item:Semantic. Los elementos multimedia de la imagen secundaria deben contener atributos Item:Length.

Los elementos multimedia secuenciales pueden compartir datos de recursos dentro del contenedor de archivos. El primer elemento multimedia determina la ubicación del recurso en el contenedor de archivos, y los elementos multimedia compartidos posteriores tienen el valor Item:Length establecido en 0. En caso de que los datos del recurso sean en sí mismos un contenedor, se podría usar Item:URI para determinar la ubicación de los datos del elemento multimedia en el recurso.

La ubicación de los recursos de elementos multimedia en el contenedor se determina mediante la suma de la longitud de la codificación de la imagen principal, los valores Item:Length de los recursos del elemento multimedia secundario y todos los valores Item:Padding anteriores. Item:Padding se considera 0 en recursos de elementos multimedia que no especifican su valor.

Nombre del atributo Tipo Descripción
Elemento:MIME Texto Es la string simple que indica el tipo de MIME del elemento multimedia en el contenedor. Para ver una definición, consulta la sección Valores de tipos de MIME de artículos. Obligatorio:
Elemento:semántica Texto Es la string simple que indica el significado específico de la aplicación del elemento multimedia. Para obtener una definición, consulta la sección Valores semánticos de elementos. Obligatorio:
Artículo:Longitud Entero String simple que contiene un número entero positivo en bytes del elemento. La longitud 0 indica que el recurso del elemento multimedia se comparte con el elemento multimedia anterior. Obligatorio para los elementos multimedia secundarios. Opcional para el elemento multimedia de imagen principal.
Elemento:Etiqueta Texto Es una cadena definida de implementación que se usa para desambiguar varios elementos de elementos con el mismo Item:Semantic. Opcional.
Elemento:Relleno Entero Es una cadena que contiene una longitud de número entero positivo en bytes de padding adicional entre el final del elemento multimedia y el comienzo del siguiente elemento multimedia, o el final del archivo cuando se usa en el último elemento multimedia de la Container:Directory. Se supone que es 0 cuando no está presente. Opcional.
Elemento:URI Texto Una string de URI que cumple con la sección 8.11.9 de ISO/IEC 14496-12, que contiene el URI relativo de los datos multimedia dentro del recurso del elemento multimedia El valor predeterminado es el recurso de imagen principal. Opcional para los tipos de MIME ISO/IEC 14496-12 con el formato de archivo multimedia base ISO. No se pueden usar de otra manera.

Valores del tipo de MIME del elemento

El atributo Item:Mime define el tipo de MIME de cada dato de elemento multimedia.

Valor Descripción
imagen/jpeg Imagen JPEG.

XMP de GContainer de ejemplo

El siguiente ejemplo de un paquete XMP de GContainer válido tiene metadatos tomados del archivo de ejemplo ilustrado en la sección Introducción.

<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>