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.