Formato immagine Ultra HDR v1.1

Introduzione

Questo documento definisce il comportamento di un nuovo formato file che codifica un'immagine della mappa di guadagno dell'intervallo logaritmico in un file immagine JPEG. I lettori precedenti che non supportano il nuovo formato leggono e mostrano l'immagine convenzionale con bassa gamma dinamica dal file immagine.I lettori che supportano il formato combinano l'immagine principale con la mappa del guadagno e visualizzano un'immagine ad alta gamma dinamica su display compatibili.

La parte restante di questo documento descrive i metodi delle procedure necessarie per utilizzare questo formato. A livello generale, il ciclo di vita di un'immagine conforme a questo formato è:

  1. Codifica

    1. Generazione di mappe con guadagno
    2. Aumenta la compressione della mappa
    3. Generazione di contenitori mappa
  2. Decodifica


Esempio
di layout dei file in formato immagine Ultra HDR, con informazioni su offset e metadati associati

Figura 1. Esempio di layout di file e metadati pertinenti.

Motivazione

L'obiettivo di questo formato file è codificare informazioni aggiuntive nei file immagine SDR che possono essere utilizzati in combinazione con la tecnica di visualizzazione per produrre le prestazioni HDR ottimali, in un unico file.

Affinché ciò sia pratico, il formato file deve:

  • Essere compatibile con le versioni precedenti, in modo che gli spettatori meno esperti visualizzino l'immagine SDR convenzionale.
  • Non occupano troppo spazio.

Inoltre, la tecnica di visualizzazione deve:

  • Non richiedono un'elaborazione complessa per la decodifica.
  • Essere in grado di adattarsi a qualsiasi rapporto tra i punti bianchi HDR e SDR di un display, che possono variare in modo significativo da un dispositivo all'altro o anche in modo temporale su un singolo dispositivo.

Infine, la tecnica deve essere in grado di eseguire tutte le azioni precedenti senza mai:

  • Clip dei momenti salienti.
  • Ombre schiaccianti.
  • Modifica o compressione del contrasto locale.
  • Modifica delle relazioni tonali relative (tra gli oggetti nella scena).

Dipendenze

Di seguito sono riportati i riferimenti normativi per questa specifica:

Definizioni

  • Display SDR

    • Un display convenzionale, non progettato per la visualizzazione di contenuti HDR. Questi display in genere producono una luminosità di picco nominale di circa 400 cd/m2 o meno.
  • Display HDR

    • Un display progettato per i contenuti HDR. Questi display in genere producono una luminosità di picco nominale superiore a quella di un display SDR, in genere 800 cd/m2 o superiore, e in genere hanno anche rapporti di contrasto migliori rispetto ai display SDR.
  • Immagine principale

    • La prima istanza di un'immagine in un file GContainer con file multimediali secondari aggiunti. L'immagine principale contiene i metadati XMP GContainer che definiscono l'ordine e le proprietà dei file di elementi multimediali secondari successivi nel contenitore file.
  • Immagine secondaria

    • I file degli elementi multimediali successivi aggiunti all'immagine principale in un file GContainer.
  • Compressione intervallo

    • In fotografia, le scene reali hanno spesso un'ampia gamma dinamica rispetto a quanto possa rappresentare un display SDR. Operazioni come la compressione dell'intervallo, chiamata anche mappatura tonale locale, sono necessarie per ridurre la gamma dinamica di un'immagine. Questa riduzione deve evitare di tagliare le alte luci o schiacciare le ombre, preservando al contempo il più possibile il contrasto locale.Cerchi di ridurre le dimensioni dei grandi bordi di luminanza nell'immagine, che contribuiscono più al suo contrasto globale, cercando di mantenere le dimensioni dei piccoli bordi di luminanza, che sono i dettagli.Sebbene ci siano molte implementazioni diverse, oggi tale operazione è standard sulla maggior parte delle moderne fotocamere digitali.
  • Punto di bianco SDR

    • La luminanza lineare massima dei contenuti SDR su un display in un determinato momento.
  • Punto di bianco HDR

    • La luminanza lineare massima dei contenuti HDR su un display in un determinato momento. Questo valore è generalmente superiore al punto di bianco SDR.
  • Migliora

    • Il punto di bianco HDR diviso per il punto di bianco SDR.
  • Potenziamento dei contenuti max (max_content_boost nelle equazioni)

    • Questo valore consente al creator di contenuti di limitare la luminosità di un'immagine, quando viene mostrata su un display HDR, rispetto alla resa in SDR.
    • Questo valore è una costante per una determinata immagine. Ad esempio, se il valore è quattro, per un determinato pixel la luminanza lineare della rappresentazione HDR visualizzata deve essere al massimo quattro volte la luminanza lineare della rappresentazione SDR. In pratica, ciò significa che le parti più luminose della scena possono essere mostrate fino a 4 volte più luminose.
    • In pratica, questo valore è generalmente maggiore di 1,0.
    • Deve sempre essere maggiore o uguale a Aumento dei contenuti minimo.
  • Potenziamento dei contenuti minimo (min_content_boost nelle equazioni)

    • Questo valore consente al creator di contenuti di limitare l'oscuramento di un'immagine quando viene visualizzata su un display HDR rispetto alla resa SDR. Questo valore è una costante per una determinata immagine.
    • Se, ad esempio, il valore è 0,5, per ogni pixel, la luminanza lineare della resa HDR visualizzata deve essere (almeno) 0,5x la luminanza lineare della resa SDR.
    • In pratica, questo valore è generalmente uguale o inferiore a 1,0.
    • Deve sempre essere inferiore o uguale a Aumento dei contenuti massimo.
  • Aumento massimo della visualizzazione (max_display_boost nelle equazioni)

    • Il booster massimo disponibile supportato da un display, in un determinato momento. Questo valore può cambiare nel tempo in base alle impostazioni del dispositivo e ad altri fattori, come le condizioni di illuminazione ambientale o il numero di pixel luminosi sullo schermo.
    • Ad esempio, se questo valore è 4,0, il display è in grado di visualizzare un pixel fino a quattro volte più luminoso del punto di bianco SDR. Questo valore è sempre >= 1,0, poiché il display può sempre mostrare un bianco HDR almeno uguale a quello SDR.
  • Ottimizzazione display

    • È uguale al valore più basso tra l'incremento massimo dei contenuti e l'incremento massimo della visualizzazione. Questo valore è sempre >= 1,0.
    • Ad esempio, se il miglioramento massimo dei contenuti è 4,0 e il miglioramento massimo della visualizzazione è 3,0, il booster massimo del display è 3,0. I pixel vengono visualizzati fino a 3 volte più luminosi rispetto all'SDR, poiché le funzionalità di visualizzazione sono il fattore limitante.
    • Un altro esempio: se il boost dei contenuti massimo è 4,0 e il boost della visualizzazione è 5,0, il boost della visualizzazione è 4,0. I pixel vengono visualizzati fino a 4 volte più brillanti rispetto all'SDR, poiché l'intenzione dei contenuti è il fattore limitante.
  • Rendezione HDR target

    • La resa HDR ideale, secondo il creator di contenuti.
  • Rendering HDR adattato

    • La resa HDR finale mostrata sul display, dopo aver adattato la resa HDR target per l'attuale miglioramento del display.
  • Mappa del guadagno (recovery(x, y) nelle equazioni)

    • Una mappa che indica quanto illuminare ciascun pixel nella rappresentazione SDR per produrre la rappresentazione HDR target. Questa mappa può essere monocanale o multicanale. Una mappa multicanale indica un guadagno separato per ciascun canale colore, come rosso, verde e blu. Questo documento illustra il caso di una mappa monocanale.
  • clamp(x, a, b)

    • Applica un limite superiore e inferiore al valore x nell'intervallo [a, b].
  • exp2(x)

    • Esponenziale base 2; 2x.
  • floor(x)

    • Restituisce il numero intero più vicino uguale o minore di x.
  • log2(x)

    • Logaritmo in base 2; log2(x)
  • pow(b, x)

    • Potenza; bx.
  • XMP

  • Formato multi-immagine

    • Multi-Picture Format è una tecnica sviluppata dalla Camera and Imaging Products Association (CIPA) per archiviare più immagini con codifica JPEG in un singolo file JPEG.
    • Per ulteriori informazioni, consulta la relativa dipendenza, White paper di CIPA DC-x 007-2009 Multi-Picture Format.
  • GContainer

    • GContainer è un metodo per archiviare più immagini in un contenitore di immagini, dove un'immagine è considerata l'immagine principale. Le eventuali immagini aggiuntive sono considerate versioni alternative o ausiliarie. I metadati XMP vengono utilizzati per comunicare la presenza e il significato di eventuali altre immagini. Per ulteriori informazioni, consulta la sezione Dettagli di GContainer.

Codifica

Questa sezione descrive come codificare un file JPEG conforme. Per ulteriori informazioni sul formato JPEG, consulta la sezione T.81 (09/92) Compressione e codifica digitale di immagini fisse a tono continuo nella sezione Dipendenze.

Generazione di mappe con profitto

Le pipeline di imaging delle videocamere di solito eseguono un'operazione di compressione dell'intervallo per comprimere i dati di luminanza della gamma dinamica più elevata nella gamma inferiore dei display SDR convenzionali. La mappa del guadagno fornisce un meccanismo per archiviare dati sufficienti per recuperare i dati di illuminazione originali con un intervallo dinamico più elevato.

I seguenti calcoli in questa sezione si basano sull'aritmetica in virgola mobile.

Le seguenti funzioni descrivono l'immagine SDR:

  • SDR'(x, y) è l'immagine principale a tre canali non lineare (generalmente con codifica gamma).
  • SDR(x, y) è la versione lineare dell'immagine principale a tre canali, ottenuta mediante la trasformazione in una versione lineare dello spazio di colore dell'immagine principale. Ad esempio, da uno spazio colore con una funzione di trasferimento sRGB a uno spazio colore lineare che conserva i colori primari sRGB.

La funzione Ysdr(x, y) è definita nell'intervallo da 0,0 a 1,0 ed è la luminanza lineare dell'immagine principale standard della gamma dinamica:

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

Definizioni simili per l'immagine HDR sono disponibili.

  • HDR'(x, y) è il non lineare a tre canali, ovvero un'immagine codificata PQ o HLG.
  • HDR(x, y) è l'immagine HDR lineare a tre canali.

Yhdr(x, y) è la luminanza in un determinato punto dell'immagine HDR:

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

Il valore Yhdr(x, y) è compreso tra 0,0 e il miglioramento massimo dei contenuti.

Le immagini SDR e HDR devono avere la stessa risoluzione. Il profilo di colore dell'immagine SDR definisce lo spazio colore dell'immagine HDR.

Ad esempio, se l'immagine principale SDR ha un profilo di colore Display-P3, l'immagine HDR viene definita in base ai colori primari di quel profilo. Ciò significa che l'immagine HDR ha anche i colori primari Display-P3.

La mappa del guadagno viene calcolata a partire da due immagini lineari contenenti la luminosità dell'immagine HDR voluta, Yhdr(x, y), e l'immagine della luminosità dell'intervallo standard, Ysdr(x, y).

La funzione pixel_gain(x, y) è definita come il rapporto tra la funzione Yhdr(x, y) e la funzione Ysdr(x, y):

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

Il comportamento della funzione pixel_gain(x, y) quando Ysdr(x, y) e offset_sdr sono entrambi pari a zero è definito dall'implementazione.

Ad esempio, le implementazioni possono gestire il caso in cui Ysdr(x, y) e offset_sdr sono entrambi pari a zero definendo pixel_gain(x, y) come 1,0. In alternativa, le implementazioni evitano questo scenario utilizzando un valore offset_sdr diverso da zero.

L'implementazione potrebbe scegliere i valori di offset_sdr e offset_hdr.

La mappa del guadagno è una funzione scalare che codifica pixel_gain(x, y) in uno spazio logaritmico, rispetto al miglioramento massimo dei contenuti e al miglioramento minimo dei contenuti:

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)

Il comportamento della funzione recovery(x, y) in cui pixel_gain(x, y) è pari a zero è l'implementazione definita, perché log2(0) non è definito.

map_gamma è un numero con virgola mobile che deve essere maggiore di 0,0 e viene scelto dall'implementazione.

I valori di incremento massimo dei contenuti e incremento minimo dei contenuti sono definiti dall'implementazione e possono essere stabiliti arbitrariamente dal creator dei contenuti. Il valore massimo dell'incremento dei contenuti deve essere maggiore o uguale a 1,0. Il miglioramento dei contenuti minimo deve essere compreso nell'intervallo [0,0, 1,0].

I valori in recovery(x, y) sono limitati all'intervallo [0,0, 1,0].

La mappa di guadagno viene memorizzata in un'immagine JPEG secondaria e, pertanto, deve essere codificata utilizzando valori interi non firmati a 8 bit, quindi nell'intervallo [0, 255]. Ogni valore rappresenta un valore recovery(x, y) e viene memorizzato in un pixel dell'immagine secondaria.

Per lo spazio di archiviazione di numeri interi non firmati a 8 bit, il valore codificato è definito come segue:

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

Il calcolo della funzione di codifica viene eseguito in virgola mobile e convertito alla fine nel risultato del numero intero senza segno a 8 bit mediante l'arrotondamento come indicato.

Questa codifica genera una rappresentazione di interi non firmati a 8 bit dei valori recovery(x, y), da 0,0 a 1,0. La mappa di guadagno codificata deve essere archiviata in un elemento immagine secondario in formato JPEG. L'implementazione sceglie il livello di compressione da utilizzare durante la codifica JPEG.

Una volta archiviata in un'immagine secondaria, la mappa del guadagno viene aggiunta a un'immagine principale con i metadati MPF e GContainer XMP. La directory GContainer dell'immagine principale deve contenere un elemento per l'immagine della mappa guadagno.

La risoluzione della mappa del guadagno memorizzata è definita dall'implementazione e può essere diversa dalla risoluzione dell'immagine principale. Nel caso in cui la Gain Map venga scalata a una risoluzione diversa dall'immagine principale per l'archiviazione, il metodo di campionamento deve essere bilineare o migliore ed essere definito dall'implementazione.

L'orientamento della mappa del guadagno deve corrispondere a quello dell'immagine principale. Se presenti, i metadati di orientamento nell'immagine della mappa di guadagno archiviata, come in EXIF, non vengono utilizzati.

Se presente, il profilo di colore della mappa di guadagno non viene utilizzato.

Contenitore mappa di guadagno

Profilo di colore

Il profilo di colore dell'immagine deve essere indicato tramite un profilo ICC per l'immagine principale.

Attributi XMP

L'immagine principale contiene metadati XMP per definire almeno due immagini con informazioni semantiche aggiuntive per il formato della mappa di guadagno HDR.

Le seguenti sottosezioni contengono dettagli specifici di questo formato. Ulteriori informazioni sulla conformità generale a GContainer sono specificate nella sezione Dettagli GContainer.

I valori degli attributi descritti nelle seguenti tabelle sono memorizzati come valori semplici XMP dei tipi di valori di base XMP specificati.

Valori semantici degli elementi

La proprietà Item:Semantic definisce il significato specifico per l'applicazione di ogni elemento multimediale nella directory del container.

Valore Descrizione
Principale Indica che l'elemento multimediale è l'immagine principale, pronta per la visualizzazione, nel contenitore. La directory deve contenere un elemento "Principale".
GainMap Indica che l'elemento multimediale è una mappa di guadagno. La directory potrebbe contenere al massimo un elemento "GainMap".

Metadati guadagno HDR

I metadati della mappa di guadagno codificano le informazioni su come interpretare e applicare la mappa di guadagno per produrre la rappresentazione HDR dell'immagine principale.

L'URI dello spazio dei nomi XMP per l'estensione XMP dei metadati della mappa di guadagno è http://ns.adobe.com/hdr-gain-map/1.0/. Il prefisso dello spazio dei nomi predefinito è hdrgm.

Questi metadati sono memorizzati nel pacchetto XMP dell'immagine della mappa di guadagno e le seguenti proprietà devono essere visualizzate in rdf:Description dell'XMP dell'immagine della mappa di guadagno:

Nome Digitazione Descrizione
hdrgm:Version Testo La versione del formato della mappa di guadagno in uso. Questa versione è "1.0". Required.
hdrgm:BaseRenditionIsHDR Booleano Indica la gamma dinamica dell'immagine principale. "False" indica che l'immagine principale è SDR e che la mappa del guadagno può essere combinata con essa per produrre una resa HDR. "True" indica che l'immagine principale è HDR e la mappa di guadagno potrebbe essere combinata con quest'ultima per produrre la resa in SDR. Deve essere "False". Facoltativo. Il valore predefinito è "False".
hdrgm:GainMapMin Matrice reale o ordinata di valori reali Memorizza i valori di map_min_log2. Si tratta di log2 del miglioramento minimo dei contenuti, ovvero il rapporto minimo consentito della luminanza lineare per la resa HDR target rispetto a (diviso per) quella dell'immagine SDR, in un determinato pixel. Può essere un singolo reale o un array ordinato di valori reali. Un array ordinato di Real può contenere un elemento valido per tutti i canali o tre elementi rispettivamente per i canali rosso, verde e blu. Deve essere minore o uguale a hdrgm:GainMapMax. Facoltativo; il valore predefinito è 0,0.
hdrgm:GainMapMax Array di valori reali ordinati o reali Archivia i valori di map_max_log2. Si tratta di log2 del potenziamento massimo dei contenuti, ovvero il rapporto massimo consentito della luminanza lineare per la resa HDR target rispetto a (diviso per) quella dell'immagine SDR, in un determinato pixel. Può essere un singolo numero reale o un array ordinato di numeri reali. Quando si tratta di un array ordinato di valori reali, può contenere un elemento che si applica a tutti i canali o tre elementi rispettivamente per i canali rosso, verde e blu. Deve essere maggiore o uguale a hdrgm:GainMapMin. Obbligatorio.
hdrgm:Gamma Array di valori reali ordinati o reali Archivia i valori di map_gamma. Questa è la gamma da applicare ai valori delle mappe archiviati. Può essere un singolo reale o un array ordinato di valori reali. Un array ordinato di Real può contenere un elemento valido per tutti i canali o tre elementi rispettivamente per i canali rosso, verde e blu. Deve essere maggiore di 0,0. Facoltativo; il valore predefinito è 1.0.
hdrgm:OffsetSDR Array di valori reali ordinati o reali Archivia i valori di offset_sdr. Si tratta dell'offset da applicare ai valori dei pixel SDR durante la generazione e l'applicazione della mappa di guadagno. Può essere un singolo numero reale o un array ordinato di numeri reali. Quando si tratta di un array ordinato di valori reali, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali rosso, verde e blu. Deve essere pari a 0,0 o superiore. Facoltativo; il valore predefinito è 0,015625 (1/64).
hdrgm:OffsetHDR Matrice reale o ordinata di valori reali Archivia i valori di offset_hdr. Si tratta dell'offset da applicare ai valori dei pixel HDR durante la generazione e l'applicazione della mappa del guadagno. Può essere un singolo numero reale o un array ordinato di numeri reali. Quando si tratta di un array ordinato di valori reali, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali rosso, verde e blu. Deve essere pari a 0,0 o superiore. Facoltativo; il valore predefinito è 0,015625 (1/64).
hdrgm:HDRCapacityMin Esiste Memorizza il valore di hdr_capacity_min. log2 del valore di boost di visualizzazione minimo a cui viene applicata la mappa. Questo valore influisce anche sulla quantità di applicazione della mappa del guadagno in base al miglioramento della visualizzazione. Deve essere pari a 0,0 o superiore. Facoltativo. Il valore predefinito è 0,0.
Hdrgm:HDRCapacitàMax Esiste Memorizza il valore di hdr_capacity_max. Si tratta di log2 del valore massimo dell'aumento della visualizzazione per il quale la mappa viene applicata completamente. Questo valore influisce anche su quanto applicare la mappa del guadagno in base al miglioramento della visualizzazione. Deve essere maggiore di hdrgm:HDRCapacityMin. Obbligatorio.

Esempio di mappa XMP del guadagno

Il seguente esempio di pacchetto XMP valido per la mappatura del guadagno contiene metadati presi dal file di esempio illustrato nella sezione Introduzione.

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

Archiviazione MPF della mappa di guadagno

L'immagine della mappa di guadagno deve essere archiviata come immagine aggiuntiva come definito nel CIPA DC-x 007-2009 Multi-Picture Format, a cui si fa riferimento nella sezione Dipendenze.

Decodifica

Questa sezione descrive come decodificare la mappa del guadagno da un file JPEG conforme.

Segnale del formato

Un file JPEG conforme a questo formato può essere identificato dalla presenza di hdrgm:Version="1.0" nel pacchetto XMP dell'immagine principale, dove hdrgm è l'URI dello spazio dei nomi http://ns.adobe.com/hdr-gain-map/1.0/.

Individua l'immagine della mappa dei profitti

Per maggiori dettagli sull'analisi e sulla decodifica dell'immagine, consulta la seguente sezione Dettagli di GContainer. Un elemento semantico "GainMap" all'interno dell'XMP rdf:Directory viene utilizzato per segnalare la posizione di un'immagine della mappa guadagno. In alternativa, vengono utilizzati l'IFD dell'indice MPF e l'XMP delle immagini di scansione per determinare la posizione di una mappa di guadagno.

Gestire i metadati non validi

I metadati sono considerati non validi se non è presente un campo obbligatorio o se è presente un campo con un valore non valido. Un valore potrebbe non essere valido perché non può essere analizzato per il tipo specificato o perché non rientra nell'intervallo previsto.

Se vengono rilevati metadati non validi, la mappa del guadagno deve essere ignorata e deve essere visualizzata l'immagine SDR.

Display

I file codificati nel formato della mappa di guadagno HDR possono essere visualizzati su display SDR convenzionali o su display HDR in grado di produrre un'uscita con una maggiore luminosità.

Utilizzare la mappa di guadagno per creare la resa HDR adattata

I seguenti calcoli in questa sezione presuppongono l'aritmetica a virgola mobile.

encoded_recovery(x, y) è il valore intero senza segno a 8 bit a canale singolo dall'immagine della mappa del guadagno.

Se la mappa di guadagno ha una risoluzione diversa da quella dell'immagine principale,encoded_recovery(x, y) viene invece determinata da un campionamento filtrato dell'immagine della mappa di guadagno per x e y nell'intervallo della larghezza e dell'altezza dell'immagine principale, rispettivamente. Il metodo di filtrazione deve essere bilineare o migliore ed è definito dall'implementazione.

map_gamma viene determinato dal campo dei metadati hdrgm:Gamma.

log_recovery(x, y) è il guadagno di pixel in virgola mobile normalizzato in uno spazio logaritmico:

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

L'incremento massimo del display è un valore in virgola mobile scalare definito come il rapporto tra il punto di bianco HDR attuale e il punto di bianco SDR attuale. Questo valore viene fornito dal sistema di visualizzazione e può cambiare nel tempo.

Il valore hdr_capacity_max è determinato dal campo dei metadati hdrgm:HDRCapacityMax. Il valore hdr_capacity_min è determinato dal campo dei metadati hdrgm:HDRCapacityMin.

weight_factor è determinato come segue quando hdrgm:BaseRenditionIsHDR è "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)

Quando hdrgm:BaseRenditionIsHDR è "True", la seconda equazione è:

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

gain_map_max viene determinato dal campo dei metadati hdrgm:GainMapMax. gain_map_min viene determinato dal campo dei metadati hdrgm:GainMapMin. offset_sdr viene determinato dal campo dei metadati hdrgm:OffsetSDR. offset_hdr viene determinato dal campo dei metadati hdrgm:OffsetHDR.

La resa HDR adattata lineare può essere calcolata come segue:

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

Se necessario, l'implementazione potrebbe applicare una trasformazione a HDR(x, y) per inserire i dati nello spazio previsto dal display. Eventuali trasformazioni di questo tipo devono essere colorimetricamente corrette.

Dettagli GContainer

Questa sezione specifica requisiti aggiuntivi per fare in modo che questo formato sia conforme ai metadati XML di GContainer. I metadati sono serializzati secondo la specifica ISO 166841:2011(E) XMP Parte 1 e incorporati all'interno del file immagine principale come descritto nella specifica di Adobe XMP, parte 3, Archiviazione nei file. Il file immagine principale contiene i seguenti elementi, formattati come RDF/XML.

Requisiti dei pacchetti XMP

Il pacchetto XMP deve includere l'estensione XMP dei metadati della mappa di guadagno tramite l'URI dello spazio dei nomi http://ns.adobe.com/hdr-gain-map/1.0/. Il prefisso dello spazio dei nomi predefinito è hdrgm.

Il pacchetto XMP deve definire hdrgm:Version="1.0".

Elemento contenitore

Lo spazio dei nomi XMP per l'estensione XMP GContainer è http://ns.google.com/photos/1.0/container/. Il prefisso dello spazio dei nomi predefinito è Container.

L'immagine principale contiene un elemento Container:Directory nei metadati XMP che definisce l'ordine e le proprietà del file multimediale successivo nel file contenutore. A ogni file nel contenitore è associato un elemento multimediale corrispondente nell'elemento Container:Directory. L'elemento multimediale descrive la posizione nel contenitore dei file e le proprietà di base di ciascun file concatenato.

L'elemento contenitore viene codificato nei metadati XMP dell'immagine principale e definisce una directory di elementi multimediali nel contenitore. Gli elementi multimediali devono trovarsi nel file contenitore nello stesso ordine degli elementi degli elementi multimediali nella directory e devono essere imballati in modo compatto.

La directory può contenere un solo elemento immagine "Principale" e deve essere il primo elemento della directory.

Nome elemento Digitazione Descrizione
Contenitore:directory Array ordinato di strutture Array ordinato di struct contenenti ciascuna una struct Container:Item che definisce il layout e i contenuti del contenitore.

Elemento elemento

Gli elementi Item descrivono la modalità di utilizzo di ciascun elemento multimediale da parte dell'applicazione.

L'URI dello spazio dei nomi XMP dell'estensione GContainer Item XMP è http://ns.google.com/photos/1.0/container/item/. Il prefisso dello spazio dei nomi predefinito è Item.

Il primo elemento multimediale deve essere l'immagine principale.Deve specificare Item:Semantic = "Primary" e un Item:Mime elencati in Valori di tipo MIME dell'elemento.

La lunghezza dell'elemento dell'immagine principale viene determinata analizzando l'immagine principale in base al suo tipo MIME a partire dall'inizio del contenitore di file.

Gli elementi multimediali possono contenere un attributo Item:Padding che specifica una spaziatura interna aggiuntiva tra la fine dell'elemento multimediale e l'inizio dell'elemento multimediale successivo. Se presente nell'ultimo elemento multimediale in Container:Directory, Item:Padding indica il riempimento tra la fine dell'elemento e la fine del file.

Ogni elemento multimediale deve contenere il tipo Item:Mime e gli attributi Item:Semantic. Gli elementi multimediali immagine secondari devono contenere attributi Item:Length.

Gli elementi multimediali sequenziali possono condividere i dati delle risorse all'interno del contenitore dei file. Il primo elemento multimediale determina la posizione della risorsa nel contenitore dei file, mentre il valore Item:Length per gli elementi multimediali condivisi successivi è impostato su 0. Se i dati della risorsa sono essi stessi un contenitore, Item:URI potrebbe essere utilizzato per determinare la posizione dei dati dell'elemento multimediale all'interno della risorsa.

La posizione delle risorse elemento multimediale nel contenitore viene determinata sommando la lunghezza della codifica dell'immagine principale, i valori Item:Length delle risorse elemento multimediale secondarie precedenti e tutti i valori Item:Padding precedenti. Item:Padding è considerato pari a 0 nelle risorse elemento multimediale che non specificano il relativo valore.

Nome attributo Digitazione Descrizione
Elemento: Mime Testo Stringa semplice che indica il tipo MIME dell'elemento multimediale nel contenitore. Per una definizione, consulta la sezione Valori tipo MIME elemento. Required.
Elemento:semantico Testo Stringa semplice che indica il significato specifico dell'elemento media per l'applicazione. Per una definizione, consulta la sezione Valori semantici dell'articolo. Required.
Elemento:Lunghezza Numero intero Stringa semplice contenente una lunghezza in byte dell'elemento pari a un numero intero positivo. La lunghezza 0 indica che la risorsa dell'elemento multimediale è condivisa con l'elemento multimediale precedente. Obbligatorio per gli elementi multimediali secondari. Facoltativo per l'elemento multimediale dell'immagine principale.
Articolo:Etichetta Testo Stringa definita dall'implementazione utilizzata per distinguere più elementi dell'elemento con lo stesso Item:Semantic. Facoltativo.
Elemento: spaziatura interna Numero intero Una stringa contenente un numero intero positivo in byte di spaziatura interna aggiuntiva tra la fine dell'elemento multimediale e l'inizio dell'elemento multimediale successivo o la fine del file quando viene utilizzata sull'ultimo elemento multimediale in Container:Directory. Se non presente, si presume il valore 0. Facoltativo.
Elemento:URI Testo Una stringa URI conforme alla sezione 8.11.9 della norma ISO/IEC 14496-12, contenente l'URI relativo dei dati multimediali all'interno della risorsa elemento multimediale. Il valore predefinito è la risorsa dell'immagine principale. Facoltativo per i tipi MIME con formato file multimediale di base ISO/IEC 14496-12. Non può essere utilizzato in altro modo.

Valori di tipo MIME dell'elemento

L'attributo Item:Mime definisce il tipo MIME di ogni dato dell'elemento multimediale.

Valore Descrizione
image/jpeg immagine JPEG.

GContainer XMP di esempio

Il seguente esempio di pacchetto GContainer XMP valido contiene metadati ricavati dal file di esempio illustrato nella sezione Introduzione.

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

Compatibilità con ISO 21496-1

ISO 21496-1 fornisce un meccanismo di incapsulamento alternativo per la codifica dei metadati della mappa di guadagno in un file immagine. Puoi codificare sia i metadati Ultra HDR sia i metadati ISO 21496-1 in un file JPEG utilizzando un'unica immagine GAinmap all'interno del file.

I metadati ISO 21496-1 vengono visualizzati subito dopo il segmento XMP APP1
in entrambe le immagini JPEG.

Figura 2. Esempio di layout di file con metadati Ultra HDR e ISO 21496-1.

Per la massima compatibilità multipiattaforma, le implementazioni e le app Android che implementano la propria codifica o decodifica dei file JPEG con mappe di guadagno devono supportare la codifica e la decodifica sia per i metadati Ultra HDR v1 sia per quelli ISO 21496-1. Durante un'operazione di codifica, l'implementazione o l'app deve codificare entrambi i formati dei metadati. Se durante un'operazione di decodifica sono presenti entrambi i tipi di metadati, l'implementazione o l'app dovrebbe preferire l'utilizzo dei metadati ISO 21496-1.

Log delle modifiche

Questa sezione contiene informazioni sulle modifiche tra le versioni di questa specifica.

v1.1

Tutte le modifiche in questa versione della specifica Ultra HDR sono informative e riguardano la compatibilità con ISO 21496-1. Il formato effettivo del file non viene modificato.

v1.0

La pubblicazione iniziale della specifica Ultra HDR.