Rieccomi ad approfittare dell’ospitalità di Marco.
In seguito ai ragionamenti fatti nei due articoli precedenti (quello sulle selezioni cromatiche in RGB e quello sul canale del bianco), seguendo le stesse logiche, ho ideato una tecnica che credo nuova per ottenere maschere cromatiche in Lab.
Mostrerò innanzitutto come procedere. Poi, per i più curiosi, mi dilungherò in una noiosa spiegazione.
Consideriamo una sfumatura dal verde al magenta, dove il verde corrisponde ai valori negativi di “a” e il magenta ai valori positivi, sempre di “a”.
Inseriamo un nuovo livello di regolazione, curve, con una maschera bianca dove vogliamo isolare i verdi.
Applichiamo il canale “a” con le impostazioni in figura.
Ci basta questa sola applicazione ed abbiamo selezionato i valori negativi di “a”, i verdi di Lab, in modo proporzionale alla loro presenza.
Lo si può vedere nella miniatura della maschera di livello che è più chiara a sinistra, in corrispondenza dei verdi più saturi, e diventa progressivamente più scura al diminuire della saturazione, fino a diventare nera al centro, in corrispondenza della neutralità, e in tutta la parte destra, in corrispondenza del magenta.
Volendo, possiamo facilmente aumentare il contrasto della maschera, ma per ora lasciamo che agisca in modo proporzionale alla presenza del colore selezionato, per il verde ma anche per gli altri colori che andremo a vedere.
Con una maschera così scura, l’effetto della curva sulla componente cromatica selezionata viene ridotto, il che può essere un vantaggio, specialmente in Lab dove a piccoli spostamenti delle curve corrispondono grandi effetti cromatici. Nel caso ci trovassimo però a dover intervenire in modo deciso, la possibilità di contrastare la maschera è sempre disponibile.
Dalla stessa maschera bianca, se al posto dei verdi vogliamo isolare i magenta, “a” deve essere applicato invertito e sposta impostato a -128, ad essere pignoli.
Abbiamo in tal modo selezionato i valori positivi di “a”, i magenta di Lab, in modo proporzionale alla loro presenza, come si può vedere dalla miniatura della maschera di livello.
Vediamo ora il caso di una sfumatura dal blu al giallo, dove il blu corrisponde ai valori negativi di “b” e il giallo ai valori positivi, sempre di “b”, e inseriamo un nuovo livello di regolazione, curve, con una maschera bianca dove vogliamo isolare i blu.
Applichiamo il canale “b” con le impostazioni in figura.
Abbiamo così selezionato i valori negativi di “b”, il blu di Lab, in modo proporzionale alla loro presenza. Anche in questo caso, l’osservazione della distribuzione dei grigi nella miniatura della maschera di livello ci aiuta a capire meglio.
Dalla stessa maschera bianca, se al posto dei blu vogliamo isolare i gialli, “b” deve essere applicato invertito e Sposta impostato a -128.
Ed ecco selezionati i valori positivi di “b”, i gialli di Lab, in modo proporzionale alla loro presenza. La miniatura della maschera di livello conferma la correttezza dell’operazione.
Il tutto è piuttosto semplice da farsi ed eventuali azioni, semplici da realizzare, vengono eseguite molto velocemente. Potremo quindi fermarci qua, ma ho promesso una noiosissima spiegazione e vorrei mantenere la promessa.
Per farlo partirò dal ricordare gli aspetti fondamentali dei canali e delle maschere.
Sia i canali sia le maschere lavorano in scala di grigi. Se stiamo lavorando a 8 Bit/Canale hanno a disposizione 256 livelli di grigio, dallo zero del nero al 255 del bianco.
Per ragionare meglio sull’importanza di questa scala ho creato un’immagine larga 256 px, dove la prima colonna di pixel ha una luminosità di valore zero, la seconda valore 1, la terza valore 2 e così via fino alla 256esima che ha valore 255.
In RGB canali e maschere seguono la stessa logica.
In un canale, R ad esempio, se un pixel ha valore zero significa che la presenza di rosso è pari a 0/255esimi; se ha valore 1, R sarà presente per 1/255esimo; se ha valore 2, R sarà presente per 2/255esimi; e così via fino al massimo di 255/255esimi.
Le maschere di livello rispettano lo stesso principio.
Una maschera completamente nera nasconde totalmente il livello al quale è collegata. Per meglio dire, lo rende completamente trasparente.
Una maschera completamente bianca mostra completamente il livello alla quale è collegata. Per meglio dire, lo rende completamente opaco.
Livelli di grigio intermedi mostrano in modo proporzionale alla loro luminosità il livello al quale la maschera è collegata. Nella scala di grigi che ho proposto, lo zero è nel limite a sinistra dell’immagine, nella prima colonna di pixel.
La luminosità aumenta via via che ci si sposta a destra. Lo si può vedere nell’immagine ingrandita dove ho posizionato 10 campionatori colore e mostrato i relativi valori nella palette Info. (NB: se voleste provare, ricordate di impostare la lettura dello strumento Contagocce su Punto campione. In caso contrario, le letture verrebbero mediate su aree piccole ma più grandi di un pixel, e i valori risulterebbero falsati.)
Quando in RGB applico un canale ad una maschera ho una corrispondenza diretta: la maschera mostra il livello al quale è collegata nelle stesse proporzioni con le quali il canale dal quale ha avuto origine mostra la componente cromatica del canale stesso.
In Lab, quando applico su una maschera il canale L (Luminosità, in Photoshop – più correttamente sarebbe il termine Chiarezza), questa logica rimane invariata. Le cose vanno diversamente per i canali cromatici “a” e “b”.
Proviamo a capire i motivi.
Per questi due canali, che non devono trasportare informazioni sulla luminosità (se ne occupa L), i 256 livelli di grigio sono dedicati alla registrazione di 2 distinti colori opponenti.
Il verde e il magenta nel canale “a”;
il blu e il giallo nel canale “b”.
Questi colori in Lab mostrano una certa differenza dai loro omonimi RGB, ma questo ora non è importante.
I colori primari di Lab sono dunque quattro, registrati in due canali. (A questo punto, Marco mi avrà già censurato? :-). Su questo punto la pensiamo in modo diverso, ma spero chiuda un occhio)
Due componenti cromatiche ben distinte per ciascun canale.
INSERTO DI MO: Per chi capitasse per la prima volta in questo genere di discussione, Luca si riferisce al fatto che utilizziamo due modelli diversi per distinguere il colore. Come scrive qui sopra, egli considera “verde” e “magenta” come due primari Lab, ancorché opponenti. Io invece considero “verde-magenta” come un unico primario, perché considero le due componenti come manifestazioni diverse e inseparabili dello stesso fenomeno: un po’ come i poli positivo e negativo in una calamita, che esistono sempre come dipolo, ma non come monopoli separati. La distinzione in realtà è ininfluente ai fini pratici, riguarda solo modi diverso di pensare allo stesso concetto.
Ecco il problema.
In RGB, l’assenza di una componente cromatica in un canale corrisponde al nero, lo zero.
Nei canali cromatici di Lab, la presenza di due componenti cromatiche per canale ha suggerito una scelta diversa. O, meglio, lo zero continua a rappresentare l’assenza delle componenti cromatiche di quel canale, ma non è più rappresentato dal nero.
Nei canali “a” e “b” di Lab, lo zero, l’assenza di componenti cromatiche, non è rappresentato dal nero ma dal grigio medio.
In “a” i valori negativi, i grigi più scuri, indicano la presenza del verde che è proporzionale alla “distanza” dal grigio medio. I valori positivi, i grigi più chiari, indicano la presenza del magenta che è proporzionale alla “distanza” dal grigio medio.
In “b” i valori negativi, i grigi più scuri, indicano la presenza del blu che è proporzionale alla “distanza” dal grigio medio. I valori positivi, i grigi più chiari, indicano la presenza del giallo che è proporzionale alla “distanza” dal grigio medio.
Ma qual’è il valore del grigio medio?
Abbiamo 256 livelli di grigio a disposizione. Possiamo visualizzare la suddivisione in due prendendo la scala di grigi che ho prima proposto nell’immagine larga 256 px. Riporto la parte centrale ingrandita, divisa esattamente a metà da una guida in azzurro.
Rispetto alla linea guida, in azzurro, abbiamo 128 px a sinistra (corrispondente a 128 livelli di luminosità) e 128 a destra.
(La luminosità dei pixel è scalata di uno rispetto alla posizione perché, ricordiamolo, al primo pixel è attribuito il valore di zero. )
La metà esatta è in corrispondenza della linea guida, tra il pixel di luminosità 127 e il pixel di luminosità 128. Ma poiché per pixel intendiamo l’unità più piccola dell’immagine, tra due pixel adiacenti non posso avere niente. Di norma, quando dobbiamo approssimare un numero decimale a un intero, si sceglie l’intero precedente se la parte decimale è inferiore a 0,5, ma l’intero seguente se è superiore o uguale a 0,5. In questo caso abbiamo un valore che idealmente sarebbe 127,5 – quindi si approssima questo numero a 128.
Questo è il nostro grigio medio, questo è il valore corrispondente allo zero nei canali “a” e “b” di Lab. A questo valore corrisponde l’assenza cromatica valutata nei singoli canali.
Zero nel canale “a” significa dunque l’assenza sia di verde sia di magenta. Zero nel canale “b” significa l’assenza sia di blu sia di giallo.
Riassumiamo:
Nei canali “a” e “b” di Lab, l’assenza di colore è indicata dal numero “zero” che è rappresentato da un grigio medio di luminosità pari a 128.
In “a“, i valori numerici compresi tra -1 e -128 indicano la presenza del verde, in modo proporzionale al valore assoluto, e corrispondono ai livelli di grigio compresi tra 127 e zero.
In “a“, i valori numerici compresi tra +1 e +127 indicano la presenza del magenta, in modo proporzionale al valore assoluto, e corrispondono ai livelli di grigio compresi tra 129 e 255.
Nell’immagine sotto il risultato della sfumatura da zero a 255 applicata al canale “a”.
Composito e canale a confronto.
Ho ingrandito l’immagine al massimo, 3200%, per visualizzare pixel e righelli. Ho posizionato 10 campionatori colore.
I campionatori dispari sono alla sinistra del grigio medio, i valori negativi, i verdi.
Il campionatore 2, corrispondente alla posizione/livello 128, corrisponde alla neutralità, indicato con 0 nella palette Info.
Gli altri numeri pari, a destra del grigio medio, sono i numeri positivi, i magenta.
Si può vedere la perfetta corrispondenza tra i numeri indicati nella palette Info e la distanza dal valore 128, indicato con lo zero.
In “b“, i valori numerici compresi tra -1 e -128 indicano la presenza del blu, proporzionalmente al loro valore assoluto, e corrispondono ai livelli di grigio compresi tra 127 e zero.
In “b“, i valori numerici compresi tra +1 e +127 indicano la presenza del giallo,proporzionalmente al loro valore assoluto, e corrispondono ai livelli di grigio compresi tra 129 e 255.
Nell’immagine sotto il risultato della sfumatura da zero a 255 applicata al canale “b”.
Composito e canale a confronto.
Ancora, ho ingrandito l’immagine al massimo, 3200%, per visualizzare pixel e righelli. Ho quindi messo 10 campionatori colore.
I campionatori dispari sono alla sinistra del grigio medio, i valori negativi, i blu.
Il campionatore 2, corrispondente alla posizione/livello 128, corrisponde alla neutralità, indicato con 0 nella palette Info;
i campionatori pari, a destra del grigio medio, sono i numeri positivi, i gialli.
Si può vedere la perfetta corrsipondenza tra i numeri indicati nella palette Info e la distanza dal valore 128, indicato con lo zero.
Alla luce di tutte queste considerazioni, rivediamo la tecnica proposta all’inizio.
Riprendiamo l’ultima immagine, una scala di grigi applicato nel canale “b”, il che corrisponde ad una sfumatura dal blu al giallo. Aggiungiamo un livello di regolazione curve e selezioniamo la maschera, bianca, che corrisponde al livello 255, e applichiamo il canale “b” con l’intento di isolare la componente blu.
L’operazione che facciamo con Applica immagine è una sottrazione. Sottraiamo cioè, pixel per pixel, le luminosità individuate nei singoli pixel del canale “b” al bianco, di valore 255 e presente in ogni pixel della maschera. Questa operazione ci porta al risultato di 127 in corrispondenza dei valori neutri.
Bianco della maschera (255) – grigio medio dei toni neutri (128) = 127
Ma qual’è il risultato in corrispondenza dei gialli?
Poiché ai gialli corrispondono valori superiori a 128, per effetto della sottrazione si riposizioneranno in corrispondenza di valori inferiori a 127.
Il contrario succede per i blu. I blu hanno nel canale valori inferiori a 128, quindi al bianco sarà sottratto un valore inferiore a 128 e i risultati corrisponderanno a valori superiori a 127.
Dunque, per effetto della sottrazione:
- i toni neutri assumeranno nella maschera il valore di 127;
- i blu valori superiori a 127;
- i gialli valori inferiori a 127;
Ed ecco l’importanza di Sposta (scala è una divisione, non ci interessa).
Sposta -127 corrisponde a un’ulteriore sottrazione.
In tal modo i toni neutri, che abbiamo già portato a 127, arrivano allo zero, al nero.
I valori in corrispondenza dei gialli, che per effetto della prima sottrazione sono inferiori a 127, vengono anch’essi annullati. Il risultato è sotto lo zero, negativo, ma Photoshop non può rappresentare valori più scuri del nero. Al nero ci si ferma, tutti i valori al di sotto vengono tagliati fuori, eliminati.
Solo in corrispondenza dei blu abbiamo un risultato positivo. Ecco quindi che ogni punto di luminosità della maschera è la perfetta corrispondenza della presenza di blu nel canale e nell’immagine.
Vediamo ora cosa abbiamo fatto per isolare il giallo. Consideriamo la maschera di prima. Abbiamo applicato il canale “b”, ma con due cambiamenti.
Il primo è nel segno di spunta su Inverti. Il motivo è presto detto: vogliamo avere come risultato della sottrazione valori più alti in corrispondenza dei gialli, rispetto al grigio medio, e più bassi in corrispondenza dei blu, che è la componente opponente che vogliamo annullare.
Il secondo è dovuto al fatto che nell’inversione i toni neutri si spostano di un punto. Faremo qualche verifica poi, perché la cosa è curiosa, ma il motivo è nel compromesso iniziale, quando si è scelto il valore del grigio medio.
Il grigio esattamente a metà sarebbe stato il valore 127,5 (che nell’inversione cambierebbe), ma si è dovuto scegliere tra 127 e 128. Il che comporta un leggero slittamento di un tono del valore medio che, matematicamente, medio non è.
Ma vediamo in cosa consiste l’inversione.
L’inversione è la creazione di un negativo. E il negativo è il risultato di questa operazione:
Negativo = 255 – positivo.
Poiché abbiamo detto che per i toni neutri è stato scelto il valore 128, ecco nell’inversione questo valore slitta a 127.
Infatti: Negativo = 255 – 128 = 127
Quindi, poiché al bianco sottraiamo il canale invertito, ecco che nei toni neutri dobbiamo considerare questo aspetto.
255 – 127 = 128
Quindi, per effetto della sottrazione di “b” invertito dalla maschera bianca avremo il seguente risultato:
- i toni neutri assumeranno nella maschera il valore di 128;
- i blu valori inferiori a 128;
- i gialli valori superiori a 128;
Sposta -128 porta di conseguenza al nero i toni neutri;
Otteniamo nero anche in corrispondenza dei blu, dove i risultati sono negativi.
Solo in corrispondenza dei gialli abbiamo risultati positivi, con valori di luminosità superiori a quelli del nero.
Abbiamo cioè ottenuto la maschera che volevamo.
Non ripeterò ora il ragionamento per la creazione di maschere per il verde e per il magenta in quanto non aggiungerei niente a quanto già visto.
Preferisco invece fare qualche verifica dell’effetto dell’inversione e conseguente spostamento del valore medio.
Per capire meglio cosa succede quando si invertono i valori tonali, prendiamo la scala di grigi del file largo 256 px e mettiamolo a confronto con il suo negativo.
Le differenze maggiori si hanno agli estremi, dove il bianco diventa nero e il nero diventa bianco. Le differenze diventano minori avvicinandosi al centro.
Proviamo ad individuare una regola.
Abbiamo detto che il bianco diventa nero: 255 –> 0, il quasi bianco, diventa quasi nero : 254 –> 1, e via scrivendo.
Proviamo a mettere insieme qualche numero:
255 –> 0;
254 –> 1;
253 –> 2;
252 –> 3;
251 –> 4;
250 –> 5;
È facile vedere come la somma delle coppie di numeri che si riferiscono al negativo e al positivo sia sempre 255.
Consideriamo quindi il valore di 128, in negativo assume il valore di 127.
128 –>127, la cui somma è 255.
Possiamo arrivare alla stessa conclusione anche partendo da una considerazione geometrica. Ho già detto che la scala di grigi è costruita con livelli di luminosità da zero a 255 e che il file ha una larghezza di 256 px.
Da questo file possiamo ottenere il negativo usando il comando Immagine –> Regolazioni –> Inverti.
Ma possiamo ottenere lo stesso risultato con il comando Modifica –> Trasforma –> Rifletti orizzontale.
Nella scala di grigi proposta, infatti, c’è una corrispondenza precisa tra la posizione orizzontale dei pixel e la loro luminosità. Otteniamo quindi l’inversione anche ruotando l’immagine attorno all’asse verticale.
Andiamo a vedere la parte centrale da vicino.
I righelli mostrano la posizione dei pixel;
una guida orizzontale divide il positivo (sopra) dal negativo (sotto);
una guida verticale divide a metà il file in larghezza.
Invertire il file o ruotare l’immagine intorno al suo asse verticale porta allo stesso risultato. È facile quindi vedere come nel passaggio da positivo a negativo i valori 127 e 128 del positivo si siano convertiti nei valori 128 e 127 del negativo.
Facciamo ora la stessa prova con il positivo e il negativo in Lab. Nell’immagine che potete vedere sotto, la parte alta è il positivo, dove L è bianco, mentre sia al canale “a” sia al canale “b” è stata applicata la solita sfumatura.
Nella parte bassa “a” e “b” sono stati invertiti.
Anche per questa immagine ho inserito i campionatori colore nella parte centrale.
Possiamo vedere che i valori neutri, corrispondenti al campionatore colore n° 2 del positivo, di luminosità 128, sono effettivamente neutri, e il campionatore colore indica zero sia in “a” sia in “b”.
Con l’inversione, campionatore n° 4, si perde la neutralità perché la luminosità si abbassa di un punto, come evidenziato dalla palette info dove sia “a” sia “b” mostrano ora il valore di -1.
Al contrario, succede che un punto negativo (campionatore 1) si neutralizza nell’inversione (punto 3)
Prima di finire vorrei provare un breve riepilogo.
La tecnica si basa essenzialmente su questa equazione.
Abbiamo infatti già visto che la somma dei valori del negativo e del suo positivo danno sempre come risultato 255, il bianco.
Dall’equazione principale possiamo facilmente ricavare la seguente:
Sottrarre il positivo al bianco è quello che abbiamo fatto fatto con Applica immagine per creare le maschere per i verdi (sottraendo il canale a) e i blu (sottraendo il canale b). Abbiamo cioè ottenuto un negativo con valori chiari per i verdi o per i blu e scuri per i magenta o per i gialli. I valori neutri si sono spostati da 128 a 127.
È quindi bastato, nella stessa finestra di Applica immagine, sottrarre 127 punti (sposta -127) per eliminare tutti i valori corrispondenti ai magenta o gialli e portare a zero i valori neutri. In tal modo i valori positivi rimasti corrispondono ai verdi o blu.
Il risultato della sottrazione con sposta -127.
Dall’equazione principale possiamo ricavare anche questa equazione:
Sottrarre il negativo al bianco è quello che abbiamo fatto fatto con applica immagine e segno di spunta su Inverti per creare le maschere per i magenta (applicando il canale a) e i gialli (applicando il canale b). Abbiamo cioè ottenuto valori chiari per i magenta o per i gialli e scuri per i verdi o per i blu. Mentre i valori neutri, nel positivo, sono a 128 punti.
Ci è quindi bastato, nella stessa finestra di applica immagine, sottrarre 128 punti (sposta -128) per eliminare tutti i valori corrispondenti ai verdi o blu e portare a zero i valori neutri. In tal modo i valori positivi rimasti corrispondono ai magenta o gialli.
Il risultato della sottrazione con sposta -128.
Spiegazione lunghissima per un semplice Applica immagine. Senza contare che ho sorvolato su un aspetto che affronterò tra un paio di articoli ritornando a parlare di Lab.
Avrei potuto essere più breve, poiché il ragionamento sarebbe stato più semplice e lineare, se invece della sottrazione avessi usato l’addizione. In tal caso però occorre aggiungere un’operazione che consiste nell’inversione iniziale della maschera da bianca a nera. Io però volevo ridurre le operazioni rispetto la tecnica classica e per farlo ho dovuto sottrarre. Mi auguro però che nei commenti qualcuno di voi (Marco escluso) spieghi come ottenere le stesse maschere cromatiche usando “aggiungi” al posto di “sottrai”.
Non ho parlato della tecnica classica per ottenere le maschere cromatiche in Lab. Come esempio, senza fermarmi a spiegare i passaggi logici, vediamo come viene creata la maschera per “a” negativo, i verdi di Lab. Sulla maschera di una curva applico il canale “a”, in modalità normale; quindi riempio di grigio al 50% in modalità “scurisci”; segue Immagine -> Tono automatico e, infine, l’inversione della maschera. In alternativa posso eliminare un comando in questo modo: sulla maschera di una curva applico il canale “a”, in modalità normale ma invertito; quindi riempio di grigio al 50% in modalità “schiarisci”; segue Immagine -> Tono automatico. Naturalmente il risultato è identico. O no? Escludendo di nuovo Marco, l’invito è quello di dare una risposta.
In conclusione, mostrare da subito la tecnica per ottenere le maschere cromatiche, penso sia stata la cosa migliore di questo articolo. 😉
Un caro saluto
LN
P.S. In seguito ai ragionamenti fatti sul negativo e sul positivo è nata una tecnica in RGB per scurire il blu del cielo ed altre cose. Alcuni di voi già la conoscono perché ne ho anticipato i contenuti nel gruppo FB di correzione colore. Trovo molto interessanti i principi su cui si basa e mi propongo di tornare a parlarne più approfonditamente in un prossimo articolo.