NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Teoria della CG: Luminosità vs Gamma Correction

 

In questo tutorial metteremo a confronto l'utilizzo dello strumento di variazione di luminosità di base e l'operatore Gamma per rendere più o meno luminose delle immagini. La variazione di luminosità è un'operazione abbastanza intuitiva, mentre per la correzione Gamma dobbiamo spendere qualche parola...

 

 

 

 

Detto in maniera "brutale", il Gamma è un valore numerico (per la precisione, un coefficiente), ed in particolare si ha che un valore in output è dato dall'input elevato al valore Gamma; questa è, in generale, la regola più adottata, ma alcuni sistemi considerano come esponente dell'input la frazione 1/Gamma, per cui fate attenzione a qual è la convenzione adottata dal vostro sistema.

 

 

La correzione Gamma è stata introdotta principalmente per risolvere alcuni problemi dei vecchi monitor CRT (tubo a raggi catodici) ma viene utilizzata anche per la conversione di immagini dall'analogico al digitale, o comunque che devono essere visualizzate o proiettate su sistemi diversi (ad esempio, schermi LCD o stampanti).

 

 

Il valore Gamma è utilizzato anche come misura del contrasto offerto dalle pellicole fotografiche (in generale, è un indice della risposta di un segnale rispetto all'input); la codifica e la decodifica del Gamma vengono utilizzate anche in fase di salvataggio e apertura delle immagini digitali e, a seconda delle piattaforme hardware e software, i valori dei coefficienti possono variare sensibilmente.

 

 

Nel nostro caso, lo utilizzeremo – in maniera molto, molto banale – per rendere più o meno luminosa un'immagine; in particolare, utilizzeremo il Nodes Editor di Blender 3D 2.5, per vedere quali strumenti ci offre il programma per questo scopo.

 

 

La correzione Gamma è un'operazione non lineare, profondamente diversa dalla somma o dalla moltiplicazione, che sono operazioni lineari; l'immagine seguente serve a comprendere meglio la differenza: il grafico mostra, sull'asse X, i valori “originali” di un pixel, mentre sull'asse Y abbiamo i valori in uscita dopo aver effettuato l'operazione.

 

 

La scala dei valori è 0.0 (nero puro) – 1.0 (bianco puro), qualora alcuni valori dovessero superare questi estremi, in negativo o in positivo, verranno troncati a 0 o 1.

 

 

Nel primo grafico, che mostra l'immagine originale senza alcuna operazione applicata, l'output è identico all'input, quindi la curva di trasformazione dei valori è una retta.

 

 

Nel secondo grafico, applichiamo +0.5 (con un'operazione di somma, quindi) ai valori in input: notiamo che abbiamo spostato in alto la curva, perdendo il nero assoluto (perché qualsiasi pixel a 0.0 partirà da 0.5, e così via) e abbiamo portato a bianchi molti pixel, ed in particolare tutti quelli che avevano un valore maggiore uguale a 0.5, e questo perché la scala dei valori è 0.0-1.0, con 1.0 che rappresenta il bianco puro.

 

 

Nel terzo grafico, moltiplichiamo i valori originali per 1.5: questa volta il nero puro resta tale, visto che 0 per un fattore moltiplicativo fa 0, ma ancora una volta corriamo il rischio di portare a bianco puro certi pixel e, di conseguenza, di perdere delle informazioni sull'immagine originale.

 

 

Il quarto grafico mostra l'effetto dell'operatore Gamma con valore 0.6 secondo la convenzione input elevato a Gamma: la trasformazione è una curva che congiunge il nero puro e il bianco puro aumentando tutti gli altri valori ma mantenendoli nel range originale.

 

 

Il nero puro resta tale e così anche il bianco, mentre tutti gli altri colori risultano più luminosi in maniera “naturale”, nessun pixel nel range intermedio tra nero e bianco viene “troncato” a uno dei due valori, evitando tra l'altro la perdita di informazioni.

 

 

Per utilizzare la Gamma Correction in Blender, è sufficiente aggiungere un Nodo di tipo Color-Gamma, passare un'immagine sulla socket di input e prelevarla su quella di uscita e specificare un valore di correzione Gamma all'interno del Nodo; Blender utilizza la convenzione input elevato a Gamma per effettuare la conversione, con valori di input espressi nel range 0.0-1.0, quindi con valori maggiori di 1 per Gamma avremo immagini più scure, mentre con valori minori di 1 avremo immagini più chiare (ad esempio, con Gamma 0.7 un pixel con valore di input 0.5 assumerà valore di output 0.61).

 

 

Il Nodes Editor dell'esempio mostra, mediante gli istogrammi, la perdita di informazione dovuta ad una semplice addizione, ottenuta mediante il Nodo Brightness/Contrast, ossia Contrasto e Luminosità, con un fattore additivo per la luminosità: i pixel scuri, al di sotto di una certa soglia, sono andati semplicemente perduti, mentre Gamma li mantiene ancora, com'è possibile verificare osservando l'istogramma in arrivo dal Nodo Gamma, in basso.

 

 
Vai all'inizio della pagina