Sistemi Multimediali Elaborazione del colore L'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 [email protected], [email protected] L'elaborazione del colore L'elaborazione del colore 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) L'elaborazione del colore L'elaborazione del colore 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. L'elaborazione del colore Ci concentreremo sulle seguenti tecniche: Livelli di luminosita' Curve di colore Luminosita' / contrasto Intensita' del colore Tonalita' / intensita' / saturazione Bilanciamento del colore Mappa sfumatura Livelli di luminosita' L'istogramma dei livelli di luminosita', indica quanti pixel in un'immagine sono caratterizzati da una determinata luminosita'. Livelli di luminosita' Per un'immagine sovraesposta (troppo chiara), l'istogramma e' appiattito a destra. Livelli di luminosita' 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. Livelli di luminosita' Per un'immagine sottoesposta (troppo scura), l'istogramma e' compresso verso sinistra. Livelli di luminosita' In un immagine poco contrastata, i valori dell' istogramma sono concentrati nel mezzo del grafico. Livelli di luminosita' Con un'esposizione corretta, l'istogramma e' ben bilanciato su tutto il grafico. Livelli di luminosita' 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 Livelli di luminosita' Se vi sono tonalita' molto predominanti (tipo il bianco o il nero), puo' essere utile visualizzare l'istogramma in scala logartimica. Lineare Livelli di luminosita' La correzzione dei livelli si effettua selezionando un valore minimo vm ed uno massimo vM. Logaritmico vm Livelli di luminosita' 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. vM Livelli di luminosita' 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))) Livelli di luminosita' Le curve di colore 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. 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. R' = (R-vm)/(vM-vm) Lo strumento delle curve permette di specificare manualmente questa funzione inversa. G' = (G-vm)/(vM-vm) B' = (B-vm)/(vM-vm) Le curve di colore Solitamente lo strumento delle curve di colore permette di disegnare manualmente la funzione inversa g(c). Le curve di colore Le ascisse rappresentano il colore di input, mentre le ordinate il colore di output. Output Input Le curve di colore L'elaborazione applica semplicemente la funzione a tutte le componenti dei colori dei pixel. R' = g(R) G' = g(G) B' = g(B) Le curve di colore Usando curve particolari si possono ottenere effetti non monotoni, o si puo' costruire un "negativo" di un'immagine. Le curve di colore Luminosita' e contrasto 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. Grazie agli apparecchi televisivi, gli utenti sono abituati a ottimizzare le immagini agendo su 3 parametri: Le formule risultano analoghe, ma vengono applicate solamente ai canali selezionati. Luminosita' Contrasto Colore (intensita' del) Luminosita' e contrasto Luminosita' e contrasto 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 R' = l + (1-l) . R G' = (1+l) . G G' = l + (1-l) . G B' = (1+l) . B B' = l + (1-l) . B Luminosita' e contrasto Il contrasto k, si simula invece avvicinando o allontanando il colore dal valore intermedio: Luminosita' e contrasto La presenza della tangente, aggiunge un effetto non lineare al contrasto, rendendolo piu' facile da controllare. d = tan( (k+1) . π/4 ) d = tan( (k+1) . π/4 ) R' = 0.5 + (R-0.5) . d R' = 0.5 + (R-0.5) . d G' = 0.5 + (G-0.5) . d G' = 0.5 + (G-0.5) . d B' = 0.5 + (B-0.5) . d B' = 0.5 + (B-0.5) . d Luminosita' e contrasto Il controllo del colore e' invece legato a come e' codificato il colore nel segnale televisivo. Per poterlo emulare, occorre prima di tutto trasformare il colore in YIQ o YUV (sistemi utilizzati appunto nel segnale televisivo). Tonalita', intensita' e saturazione Le trasformazioni di tonalita', intensita' e saturazione si effettuano trasformando il colore RGB in HLS. Luminosita' e contrasto L'intensita' del colore c diventa quindi semplicemente un guadagno (una costante moltiplicativa) delle componenti di colore (IQ o UV): Y' = Y Y' = Y I' = c . I U' = c . U Q' = c . Q V' = c . V Tonalita', intensita' e saturazione La variazione di tonalita' h e' espressa mediante un valore tra -180o e 180o, che viene sommato (modulo 360o) 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 360o Tonalita', intensita' e saturazione Bilanciamento del colore 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'. i < 0: L' = (1+i) . L s < 0: S' = (1+s) . S i > 0: L' = i + (1-i) . L s > 0: S' = s + (1-s) . S Il colore catturato da una fotografia, dipende fortemente dalla sorgente luminosa utilizzata durante la ripresa. Il bilanciamento dei colori consnete di eliminare colorazioni poco naturali, oppure permette di creare effetti particolari, esaltando alcune tonalita. Bilanciamento del colore Bilanciamento del colore 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. Bilanciamento del colore Bilanciamento del colore 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 Bilanciamento del colore Bilanciamento del colore 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. Il bilanciamento viene quindi effettuato utilizzando il valore specificato dall'utente e questa funzione peso: Ombre Mezze-tinte Luci R' = R + gR . w(R) w(c)= 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. Puo' essere utile per creare effetti artisci quali immagini invecchiate, immagini color sepia, etc... Mappa sfumatura Con due colori, si utilizza semplicemente l'intensita' dell'input (che varia tra 0 ed 1), per interpolare le due tonalita'. 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: 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) 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.