Mercoledì 20 Settembre 2017
Accedi Registrati

Accedi al tuo account

Username
Password *
Ricordami

Un formato digitale per immagini HDR

Esempio di immagine HDR, realizzata dall'autore partendo dalle due fotografie a destra e opportunamente "rimappata" per essere mostrata in tutto il suo splendore su un monitor 8 bit.
Esempio di immagine HDR, realizzata dall'autore partendo dalle due fotografie a destra e opportunamente "rimappata" per essere mostrata in tutto il suo splendore su un monitor 8 bit. Author: M. DI Lorenzo (DILO)

Che cosa sono le immagini "High Dinamic Range" e quale dovrebbe essere lo standard più giusto per rappresentarle?

Introduzione: cos'è l'HDR?

 Si sente parlare sempre più spesso delle immagini High Dinamic Range (HDR), sia nella fotografia che (ultimamente) per i televisori. Di cosa si tratta?

 Bisogna partire dalla fisiologia. I fotoricettori presenti nell'occhio umano (coni e bastoncelli della retina) producono uno stimolo sensoriale che è approssimativamente proporzionale al logaritmo dell'intensità luminosa; questo ci permette di apprezzare, in una scena davanti a noi, un grande intervallo di luminosità, distinguendo sia dettagli in ombra che oggetti illuminati direttamente; in pratica, stime empiriche mostrano che l'occhio umano è in grado di apprezzare simultaneamente differenze di illuminazione pari a un fattore 10000:1 e anche qualcosa in più! Tradotto in deciBel, questo significa che l'occhio ha una dinamica di oltre 40 dB mentre, in termini informatico-fotografici, si traduce in una dinamica di circa 14 bit o 14 stop (i numeri coincidono poichè entrambe le scale si basano sul logaritmo in base 2)1.

 Fino a qualche anno fa, le immagini e i video venivano registrati, memorizzati e riprodotti con sistemi che non erano minimamente in grado di abbracciare tutta questa dinamica; in pratica, le prime fotocamere/videocamere digitali non si spingevano oltre una dinamica di circa 20 dB e quindi gli 8 bit presenti in 1 byte erano sufficienti a codificare in maniera lineare l'intensità di ogni pixel, fornendo una dinamica teorica di 255:1 ovvero 24 dB. In realtà, alcuni sistemi analogici di "compressione della dinamica", derivati dalle tecnologie audio, erano stati già implementati nella televisione analogica; in pratica, per ridurre gli effetti negativi del rumore durante il trasferimento dell'informazione, in fase di registrazione il segnale veniva "appiattito" per poi venire "riespanso" in fase di riproduzione, utilizzando una particolare "funzione di trasferimento" detta "Gamma correction" che, in parte, ricalca lo schema fisiologico dei logaritmi ed è analogo al "sistema Dolby" usato nelle audiocassette (per i lettori più attempati).  

 A dire il vero, già da alcuni anni le fotocamere reflex/mirrorless e anche alcune "prosumer" utilizzano il formato "raw" che memorizza i dati nativi del sensore con più di 8 bit per colore e per pixel (si arriva a 14 o addirittura 16 bit) e anche sui dispositivi portatili si sta diffondendo la modalità di ripresa HDR, anche se spesso si tratta della somma di più immagini riprese con diversi tempi di esposizione, combinate e poi riportate a 8 bit ma con una particolare mappatura o funzione di trasferimento simil-logaritmica. D'altronde, i televisori di ultima generazione (quelli con la sigla UHD, per intenderci) utilizzano una modalità HDR a 10 bit; questa tendenza sarà ancora più marcata con il diffondersi della tecnologia OLED, intrinsecamente capace di restituire una elevata dinamica poichè i pixel emettono luce propria invece di filtrare una luce proveniente da una sorgente posta sul retro

 Con tutti i rapidi progressi tecnologici sia nel campo della registrazione (sensori di immagini) che in quello della restituzione (display) è inevitabile che si abbandonino definitivamente i vecchi standard foto/video a 8 bit e si passi a un sistema di codifica più moderno, ma quale standard bisogna adottare?

Uno standard tutto digitale

 Attualmente, gli standard per contenuti video ad alta dinamica (HDR) fanno uso di sistemi a 10 bit “ibridi”, in cui l'input (codifica) avviene secondo parole digitali lunghe 10 bit (1024 combinazioni) e l'output (che corrisponde all'intensità del segnale in uscita sul display e anche del segnale in ingresso prima della codifica) è dato da una funzione “analogica” di trasferimento, in particolare la PQ (Perceptual Quantizer o SMPTE ST2084) di Dolby.

 In questa sede, invece, intendo occuparmi di funzioni di trasferimento o codifica digitale-digitale, che trasformano cioè un contenuto digitale ad alta dinamica in un altro più compatto, che può essere poi riespanso numericamente, restituendo la dinamica originale anche se con un lieve degrado in termini di precisione fotometrica, non percepibile ad occhio. Si tratta in altre parole di un sistema di compressione “lossy” della dinamica, fisologicamente efficiente.

 Un sistema sarà “fisiologicamente efficente” se rispetta due condizioni fondamentali: da un lato, la dinamica deve essere nettamente superiore a quella fornita dalla grafica tradizionale, che utilizza 8 bit per la codifica pari a una dinamica di almeno 14 bit; l'altra è una buona precisione fotometrica, con errore inferiore al cosiddetto limite di Schreiber, pari a circa il 2%, soglia sopra la quale la variazione di luminosità tra due livelli diviene percepibile; esiste in realtà un limite più stringente in questo senso, il cosiddetto limite di Barten che vale solo in condizioni di illuminazione ottimale ed ammonta circa a 0.4%; al di sopra di queste soglie, l'occhio di uno spettatore attento è in grado di apprezzare le differenze (come bande di diversa luminosità o “effetto banding”) tra livelli contigui nelle regioni dell'immagine con luminosità media e alta, soprattutto se abbastanza spaziate tra loro; in pratica, questa situazione si verifica quando nella scena è presente un gradiente di luminosità che varia in modo molto regolare e graduale, come mostrato nell'esempio sottostante.

maxresdefault

Esempio di immagine affetta da "banding effect" (a sinistra); a destra l'immagine originale prima della quantizzazione. Credits: Justin Hemsley - fonte

 Il rispetto dei due criteri appena citati, se applicato a una codifica lineare della luminosità, richiederebbe parole di almeno 21 bit che è una lunghezza davvero eccessiva per lo spreco di banda e memoria che comporta, dal momento che lo stesso sistema visivo ha una risposta logaritmica e non lineare allo stimolo luminoso e non sarebbe mai in grado di apprezzare le piccole differenze di luminosità. Un discorso analogo, in realtà, si potrebbe fare anche senza ricorrere ai limiti della fisiologia; ad esempio, anche in termini di semplice rumore statistico, non ha senso riportare l'esatto valore per regioni con luminosità elevata (ma lontano dalla zona di saturazione del sensore) poichè l'incertezza di quel valore aumenta in ragione della radice quadrata del numero di fotoelettroni.

 E' necessario dunque un sistema con una risposta approssimativamente logaritmica per codificare il segnale. L'idea più immediata per realizzare un sistema fisiologico è quello di ricorrere al logaritmo dell'intensità, dato che imiterebbe la risposta della retina allo stimolo luminoso; per la decodifica si userebbe l'esponenziale, che è l'operazione inversa. Ebbene, questo è quello che, in parte, fanno i sistemi HDR in uso (PQ e curve Gamma-Log) ma, come dicevo prima, si tratta di soluzioni miste analogico-digitali.

 Volendo invece ricorrere a una codifica completamente digitale, si parte da un segnale in ingresso e in uscita descritto da m bit lineari e da una codifica con n bit (dove n<m); il passaggio tra il segnale originale a quello codificato e viceversa è definito da una opportuna funzione di trasferimento. Qui mi concentrerò su due tipi diversi di funzioni di trasferimento completamente digitali: quello del formato in virgola mobile (qui ridotto a un numero molto contenuto di bit) e quello delle tabelle di trasferimento (LUT); vediamoli nell'ordine.

Unsigned Micro-Floating (UMF)

 L'idea, imparentata con la funzione logaritmo dell'intensità, spinge l'uso del sistema “Floating Point” su parole di lunghezza limitata (non oltre 16 bit) con due varianti importanti rispetto ai formati FP tradizionali: il bit dedicato al segno della mantissa non ha senso poichè le intensità sono sempre positive, perciò invece di lasciarlo inutilizzato può venire fruttuosamente usato per aumentare la precisione. Inoltre, sia i valori ± che i codici “NaN” non servono e quindi il valore massimo dell'esponente viene utilizzato effettivamente. Resta inteso che si sfrutta sempre il trucco del ”bit nascosto” (hidden bit) tranne il caso in cui l'esponente ha valore minimo; in quel frangente, il numero codificato è “subnormale” il che vuol dire che non c'è “hidden bit” e il valore più basso vale zero; il quella regione, inevitabilmente, l'errore di precisione (ovvero la variazione relativa di intensità tra due livelli consecutivi) sale a valori altissimi che comunque non possono essere apprezzati ad occhio poichè stiamo parlando di zone estremamente buie nell'immagine. Ecco quelle che reputo le configurazioni ottimali da usare:

bit totali (n) bit mantissa bit esponente err. precisione gamma dinamica in stop o bit (m)
9 6 3 < 1.58 % 13.0
10 7 3 < 0.79% 14.0
12 8 4 < 0.39% 16.0
14 9 5 < 0.196% 18.0
16 10 6 < 0.098% 20.0

 Come si vede, questi “unsigned micro-Floating” si prestano molto bene allo scopo. Il primo già soddisfa le richieste fisiologiche in termini di precisione, mentre la dinamica è un pò limitata, mentre quello a 10 bit soddisfa in pieno i requisiti di dinamica, andando anche oltre in termini di precisione; infine, lo standard a 12 bit riesce a coprire una dinamica eccellente di 16 bit (difficilmente sfruttabile/superabile in un sistema di acquisizione video) stando addirittura sotto lo stringente limite di Barten sulla precisione fotometrica! Personalmente, ritengo non abbia molto senso andare oltre quest'ultimo livello3. Un altro aspetto interessante di tutti i sistemi "microfloat" sopra riportati (tranne il primo) è che sono "retrocompatibili" con il formato a 8 bit, nel senso che fino al livello 255 (valore massimo del formato a 8 bit lineare) i valori in ingresso e in uscita coincidono, come evidente dal seguente grafico sul sistema a 10 bit (in verde la funzione di trasferimento, in rosso l'incremento da essa utilizzato al variare dell'esponente).

microFloat 10a

 Nel grafico qui sopra, nel riquadro, c'è l'ingrandimento relativo ai livelli di bassa luminosità mentre, di seguito, la curva Drel (con scala sulla destra) mostra la variazione relativa di intensità in output passando da un livello codificato al successivo; naturalmente, nella prima zona a sinistra con numeri “sub-normali” (primi 128 livelli codificati), il limite massimo sulla precisione viene violato e di fatto diventa infinito passando dal livello 0 al livello 1, ma questa è una caratteristica inevitabile, comune a tutti i sistemi di codifica. Nelle rimanenti 7 regioni a maggiore luminosità, la Drel oscilla tra 0,39 e 0,79% e alla fine la dinamica è 16 volte più ampia rispetto a una codifica lineare a 10 bit2.

microFloat 10b

 L'unico scotto da pagare è che gli incrementi, passando da un esponente a quello successivo, raddoppiano e quindi sono tutte potenze di due; in questo modo, non si sfruttano tutti i valori intermedi che renderebbero la curva del Drel meno discontinua, con salti sempre più piccoli mano a mano che n aumenta. E questa è proprio la prerogativa del prossimo sistema.

Look-Up Tables (LUT)

 Il secondo metodo di compressione è quello più efficiente ma, apparentemente, meno intuitivo e più “pesante” dal punto di vista dell'implementazione, se non altro in termini di memoria occupata; si tratta delle cosiddette “Look-Up Tables", un sistema ben noto nel campo della elaborazione digitale delle immagini che fa ricorso a una tabella di riferimento per passare dai valori originali a quelli codificati e viceversa. In pratica, si tratta di due matrici di corrispondenza, ciascuna contenente due “array” o sequenze di numeri pre-calcolati: la prima tabella serve per codificare i 2m livelli in ingresso in 2n possibili livelli della funzione di trasferimento (con inevitabili approssimazioni per cui la funzione non è biunivoca e valori vicini nel primo array corrispondono allo stesso valore nel secondo array); la seconda tavola definisce l'operazione inversa di decodifica e stavolta si torna a un range che va da 0 a 2m-1 ma saltando molti valori nella parte alta a causa della precedente "quantizzazione" o approssimazione.

 Nelle LUT qui presentate, la maggiore richiesta di memoria è solo apparente poichè le tabelle si costruiscono con un algoritmo piuttosto semplice e non c'è reale bisogno di memorizzarle, a meno che questo non comporti una maggiore velocità di esecuzione. In pratica, se chiamiamo Di l'i-esimo incremento e outi l'i-esimo elemento nella tabella di decodifica, basta fissare il numero di bit di codifica n e il livello di precisione Dmax; la tabella viene generata imponendo che:

Drel = Di/outi < Dmax  [ con outi>1/Dmax ]

 Qui sotto gli andamenti relativi alla curva con codifica a 10 bit (n=10) e Dmax=0,784% che è la stessa precisione della codifica "micro-Float" a 10 bit discussa al pararafo precedente:

LUT10a

 Come si vede, a parità di precisione fotometrica la dinamica è nettamente migliore, quasi 16.3 bit/stop ovvero 4,8 volte più ampia! Naturalmente, volendo invece limitare la dinamica a 14 bit, questo si tradurrà in una precisione migliore, con un Dmax=0,604%. Dunque le tabelle di riferimento, con la loro ottimizzazione degli incrementi, si dimostrano nettamente superiori alla codifica "microfloat".4

 L'ultimo grafico qui sotto riassume le prestazioni che possono essere raggiunte con codifiche LUT a 9,10,11 e 12 bit, sia in termini di gamma dinamica risultante in bit (ascisse) che di precisione fotometrica (ordinate); dato che gli andamenti sono grossomodo rettilinei, sono indicate anche le rette che li approssimano con le corrispondenti equazioni.

 LUTs

 La linea viola orizzontale indica la soglia di Barten mentre quella verticale il requisito dei 14 bit di dinamica; come si vede, l'uso di parole a 9 bit non riesce a soddisfare nessuno dei due requisiti mentre è necessario ricorrere a una codifica di almeno 11 bit per raggiungerli entrambi. Nella figura ho cerchiato in azzurro quelle che ritengo le codifiche ottimali per ciascuna lunghezza utilizzata; esse sono le codifiche 9→12 bit, 10→14 bit, 11→16 bit e 12→20 bit, che giacciono approssimativamente su una curva simile ad una iperbole (in azzurro).

 

Note:

1) Dati due livelli estremi di luminosità Imax e Imin, la gamma dinamica in deciBel si calcola nel modo seguente:

DR (dB) = 10·Log10(Imax/Imin)

Mentre in termini di bit o di stop il calcolo è:

DR (bit) = Log2(Imax/Imin)

Di conseguenza, dato che per le leggi sui logaritmi Log2(x)=Log10(x)/Log10(2), per convertire i valori nelle due scale basta fare:

DR (dB) ≈ 3,01·DR (bit) ;  DR (bit)  DR (dB) / 3,01

Purtroppo, per motivi storici, il range dinamico in dB viene spesso calcolato in maniera errata, moltiplicando il numero di bit per 6  invece che per 3; questa scellerata convenzione deriva da una trasposizione acritica di quanto si fa in campo audio, dove l'intensità sonora non è direttamente proporzionale al segnale elettrico ma al suo quadrato. Qui naturalmente non farò questo errore e userò il modo giusto di calcolare!

2) Un altro aspetto interessante a favore della codifica float 10 bit è che il massimo incremeno Delta, relativo all'ultima zona con 895<i<1023, vale 64 lsb (less significant bit); questo può sembrare un valore alto ma, considerando che codifica valori originali compresi tra 8192 e 16383, dovrebbe essere confrontabile o al di sotto dell'incertezza (rumore) statistica associato a un segnale molto alto. In effetti, assumendo ragionevolmente che 1 lsb corrisponda a 0,5÷1 fotoelettroni nel sensore, il rumore statistico in quella regione è maggiore di √(0,5·8192)=64 lsb. Quindi si tratta di una codifica ottimale non solo dal punto di vista fisiologico ma anche statistico-metrologico!

3) In effetti, anche ammesso che il sistema di acquisizione/riproduzione dell'immagine abbia una dinamica ampissima, l'uso di parole più lunghe sarebbe di fatto inutile dato che, per ogni scena, l'occhio non è in grado di apprezzare una dinamica maggiore di 14 bit basterebbe rimodulare per ogni scena la luminosità complessiva aumentando così in modo irrisorio la banda occupata.

4) In realtà si potrebbe fare anche di meglio consentendo, nella parte iniziale della codifica, un limite leggermente più rilassato su Drel, facendo leva sul fatto che a livelli così bassi di luminosità la precisione fotometrica del sistema visivo umano degrada. Qui non esamino questa possibilità ma è giusto che una LUT "fisiologica" debba tenerne conto. 

 

Riferimenti:
- http://www.digitaltveurope.net
- https://books.google.it/

Condividi e resta aggiornato!

Marco Di Lorenzo (DILO)

Sono laureato in Fisica e insegno questa materia nelle scuole superiori; in passato ho lavorato nel campo dei semiconduttori e dei sensori d'immagine. Appassionato di astronautica e astronomia fin da ragazzo, ho continuato a coltivare queste passioni sul web, elaborando e pubblicando numerose immagini insieme al collega Ken Kremer. E naturalmente amo la fantascienza e la fotografia!

Sito web: https://www.facebook.com/marco.lorenzo.58
Email Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.

Altri articoli di Marco Di Lorenzo (DILO)

Lascia un commento

Assicurati di inserire (*) le informazioni necessarie ove indicato.
Codice HTML non è permesso.

Newsletter

I nostri articoli sono anche su Coelum Astronomia!

GRATIS E DIGITALE: leggilo ora!

Immagine del giorno

Mission log

AstroAppuntamenti

Settembre 2017
L M M G V S D
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Meteo spaziale

  • NEO News
    NEO News

    Notizie e aggiornamenti sugli incontri ravvicinati con oggetti potenzialmente pericolosi e sulla loro catalogazione. Aggiornato al 18 Settembre.

Sole e Luna

Attività solare - Credit: SDO/HMI / spaceweather.com

Buchi coronali - Credit: SDO/AIA / spaceweather.com

SOHO LASCO C2 - Credit ESA/NASA SOHO/LASCO

SOHO LASCO C3 - Credit ESA/NASA SOHO/LASCO

Aurora - Europa - Credit: NOAA/Ovation

CURRENT MOON

Aggregatore notizie RSS - - Paperblog : le migliori informazioni in diretta dai blog - Segnala a Zazoom - Blog Directory - intopic.it

[IT] Questo sito utilizza cookie tecnici e di terze parti, per migliorare i servizi e l'esperienza dei lettori. Per saperne di più o negare il consenso prendete visione dell'Informativa Estesa.
Chiudendo questo banner cliccando su 'Accetto' ed in qualunque altro modo, o proseguendo la navigazione su questo sito web, acconsentite al loro uso.
[EN] This site uses technical and third-party cookies, in order to improve services and experiences of our readers. If you want to know more or deny cookies exchange, please view "Cookie Information".
Closing this banner clicking on 'Agree' and in any other way, or continuing to browse this website, you consent with the cookies usage.