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: operazioni di post-processing sulle immagini e perdita di informazioni

 

Questo è un tutorial teorico che tratta un problema che può presentarsi in fase di post-produzione: la perdita di informazione dovuta ad operazioni che in linea di principio sono reversibili ma che, in pratica, non si comportano proprio così...

 

 

 

 

Il “colore” di un pixel, o comunque il valore di intensità (per immagini in scala di grigi), è memorizzato nel computer mediante numeri che possono variare in un determinato range, ad esempio 0-255 per canale colore in formati a 8 bit.

 

Le operazioni di post-produzione cambiano tali valori mediante operazioni matematiche; quando, ad esempio, raddoppiamo la luminosità, stiamo moltiplicando i valori originali per ottenere un nuovo risultato.

 

 

Il problema è che queste operazioni possono modificare le informazioni in modo tale da non poter tornare indietro, ossia da non poter recuperare l'immagine originale applicando un'operazione inversa... vediamo alcuni esempi.

 

 

Se aggiungiamo ad un'immagine il colore grigio puro, rappresentato dai valori 0.5 per tutti e tre i canali RGB nel range 0.0 – 1.0, tendiamo a rendere più chiara l'immagine; tuttavia, i pixel dell'immagine originale che avevano valori maggiori di 0.5 per uno o più canali si ritroveranno con il valore “troncato”, per così dire, a 1.0, che è il massimo della scala e che rappresenta il bianco puro.

 

 

Provando ad applicare successivamente una sottrazione di 0.5, non torneremo all'immagine di partenza: prendendo ad esempio un pixel a 0.8 e sommandogli 0.5, memorizzeremo 1.0 anziché 1.3 perché il massimo della scala è 1.0, dopodiché togliendogli 0.5 arriveremo appunto a 0.5, non più lo 0.8 iniziale.

 

 

Considerazioni analoghe possono essere fatte per la sottrazione che viene troncata a 0.0, che rappresenta il nero puro, non ammettendo valori negativi; in questo caso, partendo ad esempio da 0.3 e sottraendogli 0.5 arriveremo a 0.0, dopodiché sommandogli 0.5 arriveremo a 0.5, che è un valore maggiore (e, quindi, “più luminoso”, in un certo senso) di quello di partenza!

 

 

Il discorso può essere esteso a tutti gli operatori matematici, quindi anche a moltiplicazione e divisione, e ad intere espressioni che rappresentano, in effetti, particolari operatori di compositing.

 

 

Altro esempio: la variazione del contrasto.

 

 

Partiamo sempre dall'immagine originale...

 

 

...dopodiché dividiamo il contasto per due per ottenere una prima immagine intermedia...

 

 

...quindi prendiamo questa immagine e moltiplichiamo il contrasto per 2:

 

 

ancora una volta, l'output è diverso dall'immagine originale, e questo perché i valori fuori scala sono stati tagliati, ed anzi a seconda della precisione numerica adottata dal software utilizzato possiamo aver perso dei valori nel range standard per motivi di arrotondamento nelle moltiplicazioni in virgola mobile (ad esempio se il software memorizza solo una cifra decimale, dividendo 1.5 per due otterremo 0.75, arrotondato quindi a 0.8 dal software, moltiplicandolo poi per due otterremo 1.6, che chiaramente non è 1.5... peggio ancora se si lavora solo con numeri interi, ad esempio nel range 0-255 senza decimali).

 

 

La differenza può essere quasi impercettibile, ma c'è, come mostrato dall'immagine seguente, dove sono presenti gli istogrammi dell'immagine originale e quello dell'immagine finale, ottenuta dopo la moltiplicazione per due.

 

 

Questi esempi sono davvero banali, potreste obiettare che non ha molto senso dividere e poi ri-moltiplicare un'immagine in questo modo... in effetti, non penso vi capiterà mai di applicare questi passaggi DI SEGUITO, ma in un processo di compositing medio-lungo, dove possono esserci anche maschere ed altri elementi da integrare in una singola scena, può capitare, per cui è bene sapere qualche elemento di teoria, un po' di “dietro le quinte” di queste operazioni.

 

 

Possibili rimedi sono ad esempio l'utilizzo di software non banali (ossia che memorizzino i valori fuori scala nei passi intermedi e almeno due cifre dopo la virgola), l'utilizzo di formati di immagine con una profondità dei dati maggiore, come ad esempio EXR (utilizzato soprattutto per le immagini in HDR ma che può tornare molto utile anche in post-processing con immagini “standard”) oppure soluzioni ad hoc a seconda del tipo di problema; ad esempio, per rendere più luminosa un'immagine potremmo utilizzare l'operatore Gamma anziché la luminosità con addizione o moltiplicazione... ma di quest'ultimo argomento parleremo in un altro tutorial ad hoc.

 

 

C'è da dire inoltre che i programmi utilizzano spesso rappresentazioni interne che “sforano” i limiti di 1.0 e 0.0, memorizzando anche i valori fuori scala nei passi intermedi di post-processing, per cui se ad esempio elaborate la sequenza Somma 0.5 e Sottrai 0.5 nel Nodes Editor di Blender non noterete questo problema, perché Blender memorizzerà anche i valori fuori scala, ma se il software da voi utilizzato non dovesse presentare questa caratteristica o se doveste salvare su singoli file i passi intermedi ed elaborarli successivamente, come ho fatto io per ottenere le varie immagini mostrate finora, allora lì si avrà quanto detto.

 

 
Vai all'inizio della pagina