Formato immagine Ultra HDR v1.0

Introduzione

Questo documento definisce il comportamento di un nuovo formato file che codifica un'immagine della mappa del guadagno dell'intervallo logaritmico in un file immagine JPEG. I lettori legacy che non supportano il nuovo formato leggono e visualizzano l'immagine convenzionale a basso intervallo dinamico dal file immagine.I lettori che supportano questo formato combinano l'immagine principale con la mappa di guadagno e visualizzano un'immagine ad alto intervallo dinamico su display compatibili.

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

  1. Codifica

    1. Generare mappe
    2. Ottieni la compressione delle mappe
    3. Generare container mappa
  2. Decodifica


Esempio
Layout file in formato immagine Ultra HDR, con informazioni associate
sull'offset e sui metadati associati

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

Motivazione

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

Affinché questo sia pratico, il formato file deve:

  • Essere compatibile con le versioni precedenti, in modo che, per spettatori ingenui, venga mostrata l'immagine SDR convenzionale.
  • Non occupare 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 di bianco HDR e SDR di un display, che possono variare notevolmente da un dispositivo all'altro o anche temporaneamente su un singolo dispositivo.

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

  • Ritaglio delle alte luci.
  • Ombre che schiacciano.
  • 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à massima nominale di circa 400 cd/m2 o inferiore.
  • Display HDR

    • Un display progettato per contenuti HDR. Questi display in genere producono una luminosità massima nominale superiore a quella di un display SDR, tipicamente pari o superiore a 800 cd/m2, e hanno in genere 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 metadati XMP di GContainer, che definiscono l'ordine e le proprietà dei successivi file di elementi multimediali secondari nel contenitore dei file.
  • Immagine secondaria

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

    • Nella fotografia, le scene reali spesso hanno una gamma più dinamica di quanto non possa essere rappresentato da un display SDR. Operazioni come la compressione intervallo, chiamata anche mappatura dei toni locali, sono necessarie per ridurre l'intervallo dinamico di un'immagine. Questa riduzione consente di evitare di tagliare le alte luci o di schiacciare le ombre, mantenendo il più possibile il contrasto locale.L'obiettivo è ridurre le dimensioni dei bordi di luminanza di grandi dimensioni nell'immagine, il che contribuisce maggiormente al contrasto globale, mantenendo al contempo le dimensioni dei piccoli bordi di luminanza, ovvero i dettagli.Sebbene le implementazioni siano molte diverse, tale operazione è standard sulla maggior parte delle fotocamere digitali moderne.
  • Punto di bianco SDR

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

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

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

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

    • Questo valore consente al creator di contenuti di limitare il livello di scura che un'immagine può ottenere, quando viene mostrata su un display HDR, rispetto alla suddivisione in SDR.Questo valore è una costante per una determinata immagine.
    • Se, ad esempio, il valore è 0,5, per ogni pixel specifico, la luminanza lineare della rendering HDR visualizzata deve essere (almeno) 0,5 volte la luminanza lineare della resa SDR.
    • In pratica, questo valore è generalmente uguale o appena inferiore a 1,0.
    • Sempre inferiore o uguale a Massimizza i contenuti.
  • 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, ad esempio le condizioni di luce ambientale o il numero di pixel luminosi presenti sullo schermo.
    • Ad esempio, se questo valore è 4,0, il display è in grado di mostrare un pixel che è al massimo quattro volte più luminoso del punto di bianco SDR. Questo valore è sempre >= 1,0, poiché il display può mostrare sempre un bianco HDR luminoso almeno quanto il bianco SDR.
  • Migliora display

    • È uguale al minore tra il numero massimo di contenuti e il massimo della visualizzazione. Questo valore è sempre >= 1,0.
    • Ad esempio, se il boosting massimo dei contenuti è 4,0 e il boost display massimo è 3,0, l'incremento del display sarà 3,0. I pixel vengono visualizzati fino a 3 volte più luminosi rispetto a SDR, poiché le capacità di visualizzazione sono il fattore limitante.
    • Per un altro esempio, se il boosting massimo di contenuti è 4,0 e il boost display massimo è 5,0, il boost display sarà 4,0. I pixel vengono visualizzati fino a 4 volte più luminosi rispetto all'SDR, poiché il fattore limitante è l'intento dei contenuti.
  • Rendering HDR target

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

    • La resa HDR finale che viene mostrata sul display, dopo aver adattato la resa HDR target al miglioramento del display corrente.
  • Mappa di guadagno (recovery(x, y) nelle equazioni)

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

    • Limita il valore x all'intervallo [a, b].
  • exp2(x)

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

    • Restituisce il numero intero più vicino uguale o inferiore a x.
  • log2(x)

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

    • Esponenza; bx.
  • XMP

  • Formato multifoto

    • Il formato multi-immagine è 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 dipendenza correlata nel white paper del CIPA DC-x 007-2009 Multi-Picture Format.
  • GContainer

    • GContainer è un metodo per archiviare più immagini in un singolo contenitore di immagini, dove un'immagine è considerata quella principale. Eventuali immagini aggiuntive sono considerate versioni alternative o ausiliarie. I metadati XMP vengono utilizzati per comunicare la presenza e il significato di eventuali immagini aggiuntive. Per ulteriori informazioni, consulta la sezione Dettagli 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 digitale e codifica di immagini fisse a tono continuo nella sezione Dipendenze.

Generare mappe

Le pipeline di immagine della videocamera normalmente eseguono un'operazione di compressione dell'intervallo per comprimere i dati di luminanza dell'intervallo dinamico più elevato nella gamma inferiore dei display SDR convenzionali. La mappa di guadagno fornisce un meccanismo per archiviare i dati sufficienti a recuperare i dati originali sulla luminanza dell'intervallo dinamico più elevato.

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

Le seguenti funzioni descrivono l'immagine SDR:

  • SDR'(x, y) è l'immagine principale a tre canali non lineare (solitamente con codifica gamma).
  • SDR(x, y) è la versione lineare dell'immagine principale a tre canali, ottenuta trasformandola in una versione lineare dello spazio 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 con intervallo dinamico:

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

Esistono definizioni simili per l'immagine HDR.

  • HDR'(x, y) è l'immagine a tre canali non lineare, ovvero un'immagine con codifica 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))

Yhdr(x, y) è definito in un intervallo compreso tra 0,0 e il boost di contenuti massimo.

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 anche l'immagine HDR presenta i colori primari Display-P3.

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

La funzione pixel_gain(x, y) è definita come 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), in cui Ysdr(x, y) e offset_sdr sono entrambi 0, è definito dall'implementazione.

Ad esempio, le implementazioni possono gestire il caso in cui Ysdr(x, y) e offset_sdr siano entrambi 0, 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 offset_sdr e offset_hdr.

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

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) è zero è definito per l'implementazione, perché log2(0) non è definito.

map_gamma è un numero con rappresentazione in virgola mobile che deve essere maggiore di 0,0 ed è scelto dall'implementazione.

I valori per Incremento massimo dei contenuti e Incremento minimo dei contenuti sono definiti dall'implementazione e possono essere stabiliti in modo arbitrario dal creator dei contenuti. Il boosting massimo dei contenuti deve essere maggiore o uguale a 1,0. Il boosting minimo di contenuti 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 è archiviata in un'immagine JPEG secondaria, pertanto deve essere codificata utilizzando valori interi senza segno a 8 bit, quindi nell'intervallo [0, 255]. Ogni valore rappresenta un valore recovery(x, y) ed è archiviato in un pixel dell'immagine secondaria.

Per l'archiviazione di numeri interi senza segno 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 intero senza segno a 8 bit mediante arrotondamento come indicato.

Questa codifica genera una rappresentazione di un numero intero senza segno a 8 bit di valori recovery(x, y), compresi tra 0,0 e 1,0. La mappa di guadagno codificata deve essere archiviata in un elemento immagine secondaria come JPEG. L'implementazione sceglie la quantità di compressione da usare durante la codifica JPEG.

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

La risoluzione della mappa di guadagno archiviata è 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 è definito l'implementazione.

L'orientamento della mappa di 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 colori della mappa di guadagno non viene utilizzato.

Ottieni il contenitore della mappa

Profilo 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 per 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 XMP semplici 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 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".
Mappa guadagno Indica che l'elemento multimediale è una mappa di guadagno. La directory può contenere al massimo un elemento "GainMap".

Metadati mappa Guadagno HDR

I metadati della mappa codificano le informazioni su come interpretare e applicare la mappa del 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 vengono archiviati nel pacchetto XMP dell'immagine della mappa di guadagno e le seguenti proprietà devono essere visualizzate nell'immagine della mappa di guadagno rdf:Description di XMP:

Nome Tipo Descrizione
hdrgm:Versione Testo La versione del formato della mappa di guadagno in uso. Questa versione è "1.0". Required.
hdrgm:BaseRenditionIsHDR Booleano Indica l'intervallo dinamico dell'immagine principale. "False" indica che l'immagine principale è SDR e la mappa di guadagno può essere combinata con questa immagine per produrre una resa HDR. "True" indica che l'immagine principale è HDR e la mappa di guadagno può essere combinata con questa immagine per produrre la resa SDR. Deve essere "False". Facoltativo; il valore predefinito è "False".
hdrgm:GainMapMin Array reale o ordinato di Real Archivia i valori di map_min_log2. Questo valore corrisponde a log2 dell'incremento minimo dei contenuti, ovvero il rapporto minimo consentito tra la luminanza lineare della resa HDR target e (divisa per) quella dell'immagine SDR, in corrispondenza di un determinato pixel. Può essere un singolo elemento reale o un array ordinato di elementi reali. Un array ordinato di Real, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali Rosso, Verde e Blu, rispettivamente. Deve essere minore o uguale a hdrgm:GainMapMax. Facoltativo; il valore predefinito è 0,0.
hdrgm:GainMapMax Array reale o ordinato di Real Archivia i valori di map_max_log2. Questo valore corrisponde a log2 dell'incremento massimo di contenuti, ovvero il rapporto massimo consentito tra la luminanza lineare della versione HDR target e quella dell'immagine SDR (divisa per) in corrispondenza di un determinato pixel. Può essere un singolo elemento reale o un array ordinato di elementi reali. Un array ordinato di Real, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali Rosso, Verde e Blu, rispettivamente. Deve essere maggiore o uguale a hdrgm:GainMapMin. Obbligatorio.
hdrgm:Gamma Array reale o ordinato di Real Archivia i valori di map_gamma. Questa è la gamma da applicare ai valori delle mappe archiviate. Può essere un singolo elemento reale o un array ordinato di elementi reali. Quando un array ordinato di Real, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali Rosso, Verde e Blu, rispettivamente. Deve essere maggiore di 0,0. Facoltativo; il valore predefinito è 1,0.
hdrgm:OffsetSDR Array reale o ordinato di Real Archivia i valori di offset_sdr. Questo è l'offset da applicare ai valori dei pixel SDR durante la generazione e l'applicazione della mappa di guadagno. Può essere un singolo elemento reale o un array ordinato di elementi reali. Quando un array ordinato di Real, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali Rosso, Verde e Blu, rispettivamente. Deve essere 0,0 o superiore. Facoltativo; il valore predefinito è 0,015625 (1/64).
hdrgm:OffsetHDR Array reale o ordinato di Real Archivia i valori di offset_hdr. Questo è l'offset da applicare ai valori dei pixel HDR durante la generazione e l'applicazione della mappa di guadagno. Può essere un singolo elemento reale o un array ordinato di elementi reali. Quando un array ordinato di Real, può contenere un elemento che si applica a tutti i canali o tre elementi per i canali Rosso, Verde e Blu, rispettivamente. Deve essere 0,0 o superiore. Facoltativo; il valore predefinito è 0,015625 (1/64).
hdrgm:HDRCapacitàMin Esiste Memorizza il valore di hdr_capacity_min. log2 del valore minimo del booster di visualizzazione a cui viene applicata la mappa. Questo valore influisce anche su quanto applicare la mappa di guadagno in base al miglioramento della visualizzazione. Deve essere 0,0 o superiore. Facoltativo; il valore predefinito è 0,0.
hdrgm:HDRCapacityMax Esiste Memorizza il valore di hdr_capacity_max. È una percentuale pari a log2 del valore massimo di incremento della visualizzazione a cui la mappa viene applicata completamente. Questo valore influisce anche su quanto applicare la mappa di guadagno in base al miglioramento della visualizzazione. Deve essere maggiore di hdrgm:HDRCapacityMin. Obbligatorio.

Esempio di mappa di guadagno (XMP)

Il seguente esempio di pacchetto XMP valido per la mappa del guadagno contiene metadati ricavati 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 del guadagno deve essere memorizzata come immagine aggiuntiva definita nel formato multi-immagine CIPA DC-x 007-2009, come indicato nella sezione Dipendenze.

Decodifica

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

Indicatore 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/.

Individuare l'immagine della mappa dei guadagni

Per 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 di guadagno. In alternativa, l'indice MPF IFD e l'XMP di scansione delle immagini vengono utilizzati per determinare la posizione di una mappa di guadagno.

Gestire i metadati non validi

I metadati vengono 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 è analizzabile in base al tipo specificato o perché non rientra nell'intervallo previsto.

Se vengono rilevati metadati non validi, è necessario ignorare la mappa di guadagno e visualizzare 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 con output con luminosità più elevata.

Utilizza la mappa di guadagno per creare la resa HDR adattata

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

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

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

Il valore map_gamma è determinato dal campo dei metadati hdrgm:Gamma.

log_recovery(x, y) è il guadagno di pixel normalizzato in virgola mobile 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)

Il boost display massimo è un valore in virgola mobile scalare definito come il rapporto tra il punto bianco HDR attuale e diviso per il punto 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 viene 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 è invece:

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

Il valore gain_map_max è determinato dal campo dei metadati hdrgm:GainMapMax. Il valore gain_map_min è determinato dal campo dei metadati hdrgm:GainMapMin. Il valore offset_sdr è determinato dal campo dei metadati hdrgm:OffsetSDR. offset_hdr è 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. Queste trasformazioni devono essere colorimetricamente corrette.

Dettagli GContainer

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

Requisiti dei pacchetti XMP

Il pacchetto XMP includerà 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 definisce hdrgm:Version="1.0".

Elemento container

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 successivo file multimediale nel contenitore di file. A ogni file nel contenitore è associato un elemento multimediale in Container:Directory. L'elemento multimediale descrive la posizione nel contenitore file e le proprietà di base di ogni file concatenato.

L'elemento container è codificato nei metadati XMP dell'immagine principale e definisce una directory di elementi multimediali nel container. Gli elementi multimediali devono trovarsi nel file del contenitore nello stesso ordine degli elementi degli elementi multimediali nella directory e devono essere compressi.

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

Nome elemento Tipo Descrizione
Container:directory Array ordinato di strutture Array ordinato di struct, ciascuno contenente uno struct Container:Item che definisce il layout e i contenuti del container.

Elemento elemento

Gli elementi elemento descrivono in che modo ogni elemento multimediale viene utilizzato dall'applicazione.

L'URI dello spazio dei nomi XMP per l'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 elemento.

La lunghezza dell'elemento dell'immagine principale viene determinata analizzando l'immagine principale in base al tipo MIME a partire dall'inizio del contenitore del 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 la spaziatura interna 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 dell'immagine secondaria 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 i successivi elementi multimediali condivisi hanno Item:Length impostato su 0. Nel caso in cui i dati della risorsa siano essi stessi un container, Item:URI potrebbe essere utilizzato per determinare la posizione dei dati dell'elemento multimediale all'interno della risorsa.

La posizione delle risorse dell'elemento multimediale nel container viene determinata sommando la lunghezza della codifica dell'immagine principale, i valori Item:Length delle risorse degli elementi multimediali secondari precedenti e tutti i valori Item:Padding precedenti. Item:Padding è considerato 0 nelle risorse dell'elemento multimediale che non specificano il proprio valore.

Nome attributo Tipo Descrizione
Articolo:Mimo Testo Semplice stringa che indica il tipo MIME dell'elemento multimediale nel container. Per una definizione, consulta la sezione Valori del tipo MIME elemento. Required.
Articolo:Semantico Testo Semplice stringa che indica il significato specifico dell'applicazione dell'elemento multimediale. Per una definizione, consulta la sezione Valori semantici elemento. Required.
Articolo:Lunghezza Numero intero Stringa semplice contenente un numero intero positivo in byte dell'elemento. Una 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 immagine principale.
Elemento:Etichetta Testo Stringa definita per l'implementazione utilizzata per distinguere più elementi dell'elemento con lo stesso Item:Semantic. Facoltativo.
Articolo: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 oppure la fine del file se utilizzata sull'ultimo elemento multimediale in Container:Directory. Se non presente, si presuppone un valore pari a 0. Facoltativo.
Elemento:URI Testo Una stringa URI conforme alla sezione ISO/IEC 14496-12 della sezione 8.11.9, 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 ISO/IEC 14496-12 per il formato dei file multimediali ISO di base. Non possono essere utilizzati in altro modo.

Valori di tipo MIME elemento

L'attributo Item:Mime definisce il tipo MIME di ogni dato degli elementi multimediali.

Valore Descrizione
immagine/jpeg Immagine JPEG.

Esempio di GContainer XMP

L'esempio seguente di un pacchetto XMP GContainer valido include 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>