La grafica dai 24 ai 32 bits colore

La grafica dai 24 ai 32 bits colore

 

L’evoluzione delle tecnologie informatiche negli ultimi 4/5 anni e la riduzione dei prezzi dell’hardware hanno permesso l’uso di nuovi software grafici anche al grande pubblico.

 

In particolare l’introduzione di memorie massa sempre più veloci,  capienti e con costi contenuti hanno permesso di implementare degli algoritmi sempre più sofisticati, in grado di elaborare immagini sempre più grandi e con profondità di colore sempre maggiori. Solo pochi anni or sono, le tecnologie avevano il loro massimo in sensori di circa 10Mpixel, molti con sistemi di interpolazione dati, formati di file con profondità colore di 16bits  e software in grado di elaborare solamente una parte della profondità colore necessaria, più per limitazioni di hardware .

 

Per motivi tecnici, la profondità colore di monitor ed immagini ideale è il 24bits, 8bits per il rosso, 8bits per il verde ed 8 bits per il blu; le combinazioni permesse sono di 2 ^ 24 ossia oltre 16 milioni di possibili colori. L’introduzione dei 32 bits ha permesso di aggiungere un canale “alpha”, ossia un canale di trasparenza alle immagini, che quindi, possono essere sovrapposte tra di loro mediante l’uso del sistema di blend :

 

Colore Dest = ( Colore Dest * Alpha  ) + ( Colore Sorg * ( Inv. Alpha ) )

 

Questo semplice sistema funziona tranquillamente ed in modo efficiente per quanto concerne l’uso del RGB e per una profondità di 8bits canale ma,  se consideriamo il “mondo fotografico e la grafica avanzata”,  questo sistema comporta solamente un consumo di memoria.

Solitamente, nei programmi di grafica, i canali “alpha” sono separati, in questo modo è possibile trattare i vari campi colore in modo indipendente dalle trasparenze delle immagini ( consideriamo i  sistemi CYMK, XYZ, o le immagini a 16 bits canale ), quindi la funzione del 32bits viene a mancare.

 

Quindi, se consideriamo quanto descritto, perché utilizzare, nei programmi di elaborazione grafica, i 32bits? Semplicemente per l’allineamento della memoria: i pixel vengono allineati a 4 bytes, ossia 32bits, per accedere nel modo più rapido possibile alla memoria ed elaborare i dati nel modo migliore.

 

Dopo lo sviluppo di frameworks integrati come lo XAIBRAIN, ho elaborato alcune tecniche e teorie per minimizzare il consumo di memoria, utilizzando in maniera semplice ed efficace i 32bits e quindi gli 8 bits aggiuntivi che altrimenti sarebbero sprecati. Per meglio comprendere i concetti utilizzo alcuni esempi pratici, dal problema alla possibile soluzione.

 

 Uno degli effetti maggiormente utilizzati nella fotografia “glamour” è il bianco e nero. Questa semplice “elaborazione” produce effetti matematici molto evidenti nelle elaborazioni classiche, se vogliamo “ridurre” i colori in bianco/nero dobbiamo rendere i 3 canali ( rosso, verde, blu ) uguali, ossia con lo stesso valore numerico, questo implica che il numero di colori “visibili” e quindi elaborabili si riduce da 16milioni a 256.

 

2^24 a 2 ^ 8

 

R ^ 8 * G ^ 8 * B ^ 8 => G ^ 8

 

Quindi,  se ipotizziamo una conversione semplificata, un colore :

R = 200, G = 201, B = 200

 

Mediante la formula

Grigio = (R + G + B) / 3

 

( in realtà le formule di conversione del bianco e nero sono molteplici, utilizzano campi colore diversi ed integrano sistemi di correzione degli errori percettivi, utilizziamo questa semplice formula solo per semplificare il tutto )

 

Il valore di scala di grigio risulta 200, in realtà il valore sarebbe 200.3333, in questo semplice caso si ha una “perdita” di conversione di 1/3 di pixel. Questa perdita di dati, a prima vista assolutamente irrisoria, implica una modifica percettiva dell’immagine che si ripercuote nelle elaborazioni successive.

 

Se semplicemente si modifica il contrasto dell’immagine per fornire una maggior profondità ai colori scuri, possiamo perdere un “punto” dal valore effettivo al valore reale, quindi elaborazioni successive introducono una serie di “errori“ e di “arrotondamenti” che influiscono in modo significativo nella resa finale dell’immagine. Possiamo anche considerare come elaborazioni consequenziali portino ad una “compensazione” degli errori matematici, questo è effettivamente vero, soprattutto se consideriamo che le immagini vengono stampate su carte e quindi i colori vengono “mescolati” rendendo gli stessi molto meno definiti rispetto alla visione “a video”.

 

Per ovviare , almeno in parte, alla perdita di dati, utilizziamo il canale “alpha” come un sistema di correzione degli errori in grado di “accumulare” i pezzi dei pixel che altrimenti andrebbero persi. Se semplifichiamo, i 32bits possono essere divisi in 3 canali da 10bits, quindi la profondità del colore passa da 2^8 a 2^10, se ci riportiamo alle elaborazioni classiche dove il colore ha valori da 0 a 255, mediante questo semplice sistema i colori possono avere una precisione di ¼ di pixel, in questo caso l’errore di 0.333 sarebbe ridotto a 0.088 con notevole miglioramento di precisione delle elaborazioni e contemporanea riduzione delle imperfezioni dovute all’elaborazioni successive.

 

Tecnicamente, per mantenere una compatibilità tra questo sistema ed i sistemi tradizionali, i dati vengono trattati come 8+2bits e non come 10bits contigui, questa soluzione, a prima vista inefficiente, in realtà nasconde una tecnica più sofisticata. Mantenendo un sistema RGB a 8 bits + Accumulatore a 8 bits si possono aumentare le profondità colore sino a 16bits, in particolare nel bianco e nero, utilizzando gli errori accumulati solamente nei canali necessari e non in modo rigido e fisso. Questa tecnica è molto complessa e richiederebbe una spiegazione che esula da questo articolo.

 E' vietata la riproduzione anche parziale di articoli e foto presenti nel sito senza previa autorizzazione.

News Letter

Facebook

Counter

Today 30 Yesterday 82 Week 649 All 164885

Currently are 33 guests and no members online