Sistemi Multimediali Elaborazione del colore Molti degli strumenti offerti da un programma di fotoritocco ci permettono di lavorare sui colori. Questi strumenti vengono solitamente utilizzati per correggere difetti che rigaurdano un'immagine catturata. Marco Gribaudo marcog@di.unito.it, gribaudo@elet.polimi.it Gli agloritmi di elaborazione del colore considerano i pixel dell'immagine uno alla volta... Ed applicano ad ogni pixel una formula. Essa, lavorando esclusivamente sul colore in input, produce un nuovo colore in output. R' = fr(r,g,b) G' = fg(r,g,b) B' = fb(r,g,b) Vista la ripetitivita' del procedimento, questi algoritmi sono facilmente parallelizzabili. Tutte le schde video moderne posseggono una GPU dotata di numerose processing unit indipendenti (almeno 128). L'utilizzo della GPU per effettuare queste elaborazioni permette quindi uno speedup notevole, consentendone l'utilizzo anche in applicazioni in tempo reale.
Ci concentreremo sulle seguenti tecniche: Curve di colore Luminosita' / contrasto Intensita' del colore Tonalita' / intensita' / saturazione Mappa sfumatura Uno dei piu' comuni errori che si puo' fare in fotografia e' sbagliare l'esposizione. La tecnica dei livelli permette di correggere (almeno in parte) questi difetti. L'istogramma dei livelli di luminosita', indica quanti pixel in un'immagine sono caratterizzati da una determinata luminosita'. Per un'immagine sottoesposta (troppo scura), l'istogramma e' compresso verso sinistra. Per un'immagine sovraesposta (troppo chiara), l'istogramma e' appiattito a destra. In un immagine poco contrastata, i valori dell' istogramma sono concentrati nel mezzo del grafico.
Con un'esposizione corretta, l'istogramma e' ben bilanciato su tutto il grafico. L'istogramma di colore si costruisce in modo molto semplice, contando i pixel con una data luminosita'. for x = 1..w { for y = 1..h { I = round(p.y(x,y)*255); cnt[i]++; } } // p.y(x,y) e' l'intensita' del pixel (x,y) // pari a: 0.333*R + 0.588*G + 0.114*B Se vi sono tonalita' molto predominanti (tipo il bianco o il nero), puo' essere utile visualizzare l'istogramma in scala logartimica. La correzzione dei livelli si effettua selezionando un valore minimo vm ed uno massimo vm. Lineare Logaritmico vm vm Tutti pixel con luminosita' inferiore al minimo vm verranno visualizzati col colore nero. Tutti pixel con luminosita' superiore al massimo vm verranno visualizzati col colore bianco. Le intensita' degli altri pixel verranno scalate uniformemente tra i due estremi. In pratica, il pixel in uscita viene calcolato con la seguente formula: R' = max(0, min(1, (R-vm)/(vM-vm))) G' = max(0, min(1, (G-vm)/(vM-vm))) B' = max(0, min(1, (B-vm)/(vM-vm)))
Le operazioni di max(0, min(1, c)) sevono ad accertarsi che il valore in uscita sia compreso tra 0 ed 1, e sono necessarie in tutte le elaborazioni. Nelle formule successive verranno omesse per semplificare la notazione. R' = (R-vm)/(vM-vm) G' = (G-vm)/(vM-vm) B' = (B-vm)/(vM-vm) Come visto in precedenza, la gamma di un immagine potrebbe essere una funzione qualunque: in quel caso per correggere la gamma occorre utilizzare la funzione inversa. Lo strumento delle curve permette di specificare manualmente questa funzione inversa. Solitamente lo strumento delle curve di colore permette di disegnare manualmente la funzione inversa g(c). Le ascisse rappresentano il colore di input, mentre le ordinate il colore di output. Output Input L'elaborazione applica semplicemente la funzione a tutte le componenti dei colori dei pixel. Usando curve particolari si possono ottenere effetti non monotoni, o si puo' costruire un "negativo" di un'immagine. R' = g(r) G' = g(g) B' = g(b)
Sia le modifiche delle curve che quelle dei livelli di colore possono essere applicate a tutti i canali, oppure solamente ad uno (o due) dei colori primari. Le formule risultano analoghe, ma vengono applicate solamente ai canali selezionati. Grazie agli apparecchi televisivi, gli utenti sono abituati a ottimizzare le immagini agendo su 3 parametri: Luminosita' Contrasto Colore (intensita' del) La luminosita' viene implementata solitamente con un parametro l che varia tra -1 ed 1. Se l < 0, l'immagine viene scurita (fatta tendere verso il nero). Nella formula, con l < 0, si avra' 1+l < 1: Se l > 0, l'immagine viene schiarita (fatta tendere verso il bianco). Nella formula il parametro l interpola linearmente la componente tra il valore iniziale ed il bianco: R' = (1+l). R G' = (1+l). G B' = (1+l). B R' = l + (1-l). R G' = l + (1-l). G B' = l + (1-l). B Il contrasto k, si simula invece avvicinando o allontanando il colore dal valore intermedio: La presenza della tangente, aggiunge un effetto non lineare al contrasto, rendendolo piu' facile da controllare. d = tan( (k+1). π/4 ) R' = 0.5 + (R-0.5). d G' = 0.5 + (G-0.5). d B' = 0.5 + (B-0.5). d d = tan( (k+1). π/4 ) R' = 0.5 + (R-0.5). d G' = 0.5 + (G-0.5). d B' = 0.5 + (B-0.5). d
Il controllo del colore e' invece legato a come e' codificato il colore nel segnale televisivo. L'intensita' del colore c diventa quindi semplicemente un guadagno (una costante moltiplicativa) delle componenti di colore (IQ o UV): Per poterlo emulare, occorre prima di tutto trasformare il colore in YIQ o YUV (sistemi utilizzati appunto nel segnale televisivo). Y' = Y I' = c. I Q' = c. Q Y' = Y U' = c. U V' = c. V Tonalita', intensita' e saturazione Tonalita', intensita' e saturazione Le trasformazioni di tonalita', intensita' e saturazione si effettuano trasformando il colore RGB in HLS. La variazione di tonalita' h e' espressa mediante un valore tra -180 o e 180 o, che viene sommato (modulo 360 o ) alla componente H del colore. Esse permettono di ricolorare (cambiare la tonalita'), schiarire e scuirire, o togliere i colori ad un'immagine. H' = (H + h) mod 360 o Tonalita', intensita' e saturazione Intensita' i e saturazione s, modificano i parametri L ed S del colore con una variazione tra -1 ed 1. La formula e' simile a quella vista in precedenza per la luminosita'. Il colore catturato da una fotografia, dipende fortemente dalla sorgente luminosa utilizzata durante la ripresa. i < 0: L' = (1+i). L i > 0: L' = i + (1-i). L s < 0: S' = (1+s). S s > 0: S' = s + (1-s). S Il bilanciamento dei colori consnete di eliminare colorazioni poco naturali, oppure permette di creare effetti particolari, esaltando alcune tonalita.
Ad esempio puo' essere utilizzato per eliminare le componenti predominanti di una certa colorazione (in figura si e' ridotto il viola). Per ridurre l'intensita' di una tonalita', occorre potenziare il colore opposto. Solitamente gli strumenti di fotoritocco permettono di bilanciare i tre colori primari, attraverso 3 cursori che si spostano tra un primario ed il suo complementare. In linea di principio, il bilanciamento di colore si applica semplicemente moltiplicando i colori primari per coefficienti differenti. R' = gr. R G' = gg. G B' = gb. B In pratica, si utilizza un peso w(x) dipendente dall'intensita' del colore in input, e si utilizzano funzioni distinte a seconda che si voglia intervenire sulle luci, sulle mezze-tinte o sulle ombre. w(c)= Ombre Mezze-tinte Luci Il bilanciamento viene quindi effettuato utilizzando il valore specificato dall'utente e questa funzione peso: R' = R + gr. w(r) G' = G + gg. w(g) B' = B + gb. w(b)
Mappa sfumatura L'effetto di mappa sfumatura, prende in input la luminosita' dell'immagine e la utilizza per selezionare un colore da un gradiente. Mappa sfumatura Con due colori, si utilizza semplicemente l'intensita' dell'input (che varia tra 0 ed 1), per interpolare le due tonalita'. Puo' essere utile per creare effetti artisci quali immagini invecchiate, immagini color sepia, etc... Y=0.333. R + 0.588. G + 0.114. B R = R0. (1-Y) + R1. Y G = G0. (1-Y) + G1. Y B = B0. (1-Y) + B1. Y Mappa sfumatura Si possono ottenere effetti piu' complessi interpolando tra piu' colori intermedi. Se il gradiente assume il colore (Ri, Gi, Bi) nel punto yi: Mappa sfumatura Un caso classico e' il duo-tono, dove si utilizzanano due sfumature di uno stesso colore, interposte tra il bianco ed il nero. Y=0.333. R + 0.588. G + 0.114. B if yi-1 < Y < yi : R = Ri-1. (yi - Y)/(yi - yi-1) + Ri. (Y - yi-1)/(yi - yi-1) G = Gi-1. (yi - Y)/(yi - yi-1) + Gi. (Y - yi-1)/(yi - yi-1) B = Bi-1. (yi - Y)/(yi - yi-1) + Bi. (Y - yi-1)/(yi - yi-1)