La separazione delle frequenze é considerata una delle tecniche piú sofistcate e difficili nella postproduzione di immagini, ma abbastanza stranamente é considerata quasi esclusiamente in relazione al ritocco della pelle nel ritratto.
Altrettanto frequentemente é una tecnica usata male ed in modo approssimativo con risultati spesso discutibili, per essere gentili. Quindi ho deciso di fare una serie di post in merito, per chiarire cosa sia, a cosa serva e soprattutto come vada fatta se non bene almeno un po' meglio la separazione delle frequenze. Inoltre alla fine della serie di post vi spiegheró come separare piú frequenze e perché: cioé vi spiegheró come realizzare ed usare un vero e proprio "equalizzatore".
Innanzitutto di cosa stiamo parlando? Il termine "frequenza" si riferisce alla maggiore (o minore) velocitá con la quale un qualsiasi fenomeno oscillante nel tempo cambia di stato: una persona che ripetutamente si alza e si siede e poi si rialza e si risiede, e cosí via é un esempio piuttosto tipico - anche se un po' sciocco. Se ripete il gesto 5 piuttosto che 10 volte al minuto (o 100, o quello che volte) vuol dire che lo fa piú frequentemente o "con una frequenza" piú alta. Ma una fotografia é la cosa piú ferma el mondo, quindi di cosa stiamo parlando? Per analogia stiamo parlando di quelle quantitá la cui variazione avviene piú o meno frequentemente nello spazio della fotografia. Quindi parliamo di frequenze spaziali (anche se il termine é un po' improprio, ma é entrato nell'uso in questo senso), anche se sarebbe piú appropriato forse rifarsi a "gradienti spaziali".
Nella postproduzione di immagini il fatto di poter lavorare solo su quella parte di fotografia le cui variazioni sono rapide o viceversa lente sarebbe naturalmente un bel vantaggio. Rimuovere un neo o i pori della pelle implica lavorare su quelle che abbiamo convenuto chiamare alte frequenze, cambiare il tono generale del colore di un incarnato implica lavorare sulle basse frequenze, invece.
Giá' ma quanto alte (o basse)? Dovreste intuire che nel caso di immagini digitali l'unitá di misura naturale é il pixel [1]. Due particolari (ovvero diversi toni) distanti un pixel sono - per capirci e un po' approssimativamente - il dettaglio minimo visibile (in realtá non é per nulla visibile a meno di ingrandire esageratamente) in una data immagine. Quindi da ora in avanti assumeró il numero di pixel (o se volete un raggio in pixel, dato che l'immagine é bidimensionale) come unitá di riferimento: le frequenze al di sotto dei 10 pixel ad esempio rappresentano particolari o strutture abbastanza di dettaglio, mentre ad esempio le variazioni sull'arco di 100 pixel rappresentano frequenza abbastanza lente o, se preferite, basse.
Naturalmente ció va riferito alle dimensioni totali in pixel dell'immagine: un conto é 10 pixel su un'immagine di 5000 pixel, un altro sarebbero gli stessi 10 pixel su un'immagine di 100 pixel.
Tanto per darvi una indicazione di dove vorrei andare uno delle applicazioni piú note della tecnica della maschera di contrasto (o unsharp mask in inglese) é quella di usare un raggio piuttosto elevato (30 o 50 pixel) ed un'intensitá contenuta allo scopo di aumentare il contrasto locale - e non la nitidezza apparente, per cui bisognerebbe usare raggi molto piccoli ed intensitá elevate. In qualche modo anche questa tecnica rientra, se vogliamo, nella logica della separazione delle frequenze.
In generale rimane vero che le alte frequenze (spaziali) corispondono a raggi (in pixel) minori, le basse frequenze a raggi maggiori. E giá qui vi invito a fare una pausa perché é facile confondersi.
Adesso devo convincervi di un'altra complicazione, ma giuro che é l'ultima: disponiamo in Photoshop (o in un altro software) di un metodo per isolare in un livello solo quella parte di immagine che si riferisce alle alte frequenze (cioé nella strana terminologia che stiamo usando a variazioni tonali che avvengano sulla scala di pochi pixel)?
Dovrebbe essere abbastanza intuitivo convincersi che (quasi) ogni filtro di sfocatura é un filtro che seleziona le basse frequenze proprio perhé annulla i dettagli piú fini. Il problema quindi non é isolare le basse frequnze (e quindi per attrazione, lo vedremo, quelle alte), ma quanto bene agiscono diversi filtri nell'ottenere il risultato.
Se io sfoco tutti i dettagli entro un raggio di 5 pixel (o di 10, o di qualunque altro numero) ho naturalmente filtrato, cioé separato, le frequenze piú lunghe. E allora come molti giá sanno si potranno costruire due livelli copia dell'immagine di partenza: in quello sottostante si procede ad una sfocatura con un certo raggio in pixel, nell'altro dovranno rimanere i dettagli e ció si otterrá applicando a questo livello quello sottostante con metodo di fusione "sottrai" naturalmente. Vogliamo che la sottrazione avvenga al massimo livello, quindi scegliamo la massima scala possibile (cioé 2) e scegliamo un offset (cioé un valore di riferimento) di 128 in modo che sul livello delle alte frequenze compaia il grigio medio uniforme lá dove non ci sono dettagli e qualcosa di piú chiaro o scuro per rappresentare i dettagli.
Qui sopra trovate sulla sinistra l'immagine originale con tutti i dettagli, al centro l'immagine sfuocata (basse frequenze) e a destra i dettagli (alte frequenze). In questo caso ho usato una sfocatura gaussiana a 10 punti. Dato che i livelli cosí costruiti sono sovrapposti nell'ordine da sinistra a destra dal piú in basso a quello piú in alto, voi vedrete solo l'immagine di destra, dato che i 3 livelli sono con il modo fusione "normale". Se adesso scegliete per il livello delle alte frequenza (quello superiore) il metodo fusione "luce lineare" vedrete riapparire la foto originale perché il metodo di fusione scelto é trasparente laddove il livello é grigio medio (cioé dove non ci sono dettagli, questo é il motivo per cui abbiamo scelto il grigio medio come offset), mentre riaggiunge i dettagli lá dove essi ci sono sul livello sottostante (quello sfocato) che contiene solo le variazioni di colore. Il fatto di essere "trasparente" al gigio medio al 50% é un fatto comune a tutti i metodi di fusione dello steso gruppo di "luce lineare" ("Sovrapponi", "Luce soffusa", "Luce intensa", "Luce vivida", "Luce lineare" e "Luce puntiforme")
Questa é la sostanza della separazione delle frequenze: realizzare una coppia di livelli con uno che contiene le lente variazioni di colore con sovrapposto un altro che contiene i dettagli. Questo - per quanto velocemente spiegato - é il metodo di separazione delle frequenze cosí come oggi viene utilizzato. E' il momento - prima di discutere come eventualmente andare oltre, di fare diverse precisazioni e dare un po' di chiarimenti.
Se tra i due livelli cosí costruiti ne inserisco un terzo trasparente, posso utilizzare (delicatamente) un pennello per distribuire un tono di colore lievemente diverso: questo normalmente si fa con un pennello di un raggio non piccolissimo e abbastanza morbido, con opacitá intorno al 10% in modo da non far percepire brusche variazioni di colore. Il sovrastante livello delle alte frequenze (che rimane non modificato) reinserirá automaticamente i dettagli sul colore cosí modificato. Alternativamente potremo cancellare dettagli (ad esempio i pori o i nei) semplicemente dipingendo con il grigio medio sul livello delle alte frequenze.
Ora diverse domande: ho scelto in questa procedura una sfocatura gaussiana di raggio10 punti. Perché gaussiana e perché dieci punti? Sulla scelta di sfocatura gaussiana torneró tra un attimo. I 10 punti di raggio sono stati scelti in modo che i dettagli piú fini scomparissero con la sfocatura (in questa foto) e rimanesse solo la parte meno dettagliata dell'immagine. In un'altra foto questo numero puó essere diverso.
Ma é chiaro che con questa scelta ad esempio la forma delle narici (o dei denti) sono "particolari" rimasti largamente anche sul livello delle basse frequenze e quindi non potró procedere (quando lo volessi) ad esempio a cancellare i denti con la procedura che vi ho appena descritto: il massimo che potrei riuscire a cancellare sono dettagli piú fini dei denti, scanalature o carie ad esempio che compaiono sul livello delle alte frequenze. Come a dire che la scelta di un raggio di 10 punti é largamente arbitraria e relativa all'uso che ne vogliamo fare: se vogliamo dare (o togliere) colore alle gote della modella é ad esempio una scelta conveniente. Ma se si fosse trattato di un cielo con delle nuvole non avrei potuto dipingere quelle nuvole con il blu del cielo perché sopra al quel blu sarebbero stati reinseriti i dettagli strutturali delle nuvole, con un effetto chiaramente falso.
L'immagine originale, con contrasti forzati per far emergere la nuvola
Livello delle basse frequenza
Livello delle alte frequenze (con raggio di 10 pixel)
Quello che ottenete se provate a dipingere sopra le nuvole sulle basse frequenze: come vedete il blu sovraimpresso mantiene la struttura di dettaglio della nuvola perché questa si realizza ad una scala in pixel piú grande dei 10 punti, intorno ai 100-200. Di sotto la stessa operazione fatta su un'immagine sfocata con raggio 200 pixel, fatto piuttosto in fretta solo per far vedere la differenza.
Quindi, prima di andare oltre (separazione a piú frequenza, in particolare) é bene discutere un po' meglio alcuni dettagli. I piú vecchi (fotograficamente parlando) ricorderanno che agli albori della fotografia digitale si procedeva in mdo leggermente diverso rispetto a quello che vi ho mostrato.
In particolare Adobe fornisce un filtro per selezionare le alte frequenze che nella versone inglese si chiama correttamente high-pass filter mentre in quella italiana per motivi incomprensibili viene tradotto in "Accentua passaggio". Quindi un modo alternativo di procedere era (e talvolta viene ancora insegnato) di costruire due copie della foto originale, di agire sulla copia superiore con questo filtro passa-alto (cioé che lascia passare solo le alte frequenze, o accentua passaggio) e sulla copia inferiore con la sfocatura gaussiana avendo l'unica precauzione di utilizzare esattamente lo stesso raggio in entrambi i passaggi. In questa vecchia procedura si sceglieva ancora "luce lineare" come metodo di fusione per il livello superiore o delle alte frequenze, ma riducendone l'opacitá al 50%. Apparentemente di nuovo abbiamo ottenuto l'immagine originale.
Quindi, perché l'uno o l'altro procedimento? Perché naturamente utilizzare due metodi diversi non necessariamente ci porta al risultato di separare le frequenze alte da quelle basse con la stessa precisione, che per il lavoro che vogliamo fare é invece essenziale. Per capire quale dei due metodi sia effettivamente migliore c'é un modo molto semplice: visto che apparentemente in entrambi i casi abbiamo riottenuto l'immagine di partenza, la cosa piú semplice da fare é di confrontare l'immagine a frequenze separate con quella di partenza. Questa procedura é in realtá un po' schiacciare una nocciolina con un maglio, come vedrete: se una cosa non si vede é (quasi) come se non ci fosse, a meno di ripetere le procedura molte (troppe) volte.
In entrambi i casi, dopo aver ottenuto i due livelli con le frequezne separate, procediamo a duplicare ancora una volta l'immagine di partenza, a spostare questo livello al di sopra di tutti ed a impostare il metodo di fusione in differenza. Se é tutto a posto dovrebbe naturalmente risultare un'immagine totlamente nera perché se la separazione delle frequenza avesse prodotto esattamente l'immgine originale, allora sottrendola dall'originale dovremmo ottenere il nero perfetto. Gia a vista scopriamo che non é esattamente cosí ma guardando le statstiche che compaiono sotto all'istogramma vediamo che con la seconda procedura - quella "antica" che utilizzava "accentua passaggio" - sotto all'istogramma compare un valore medio non zero, ma di 0.30 (con deviazione standard di 0.70) [2].
Giá a vista l'immagine di sopra ottenuta sottraendo dall'originale la separazione delle freqenze "vecchio stile" non é perfetta, se guardate con attenzione.
Con la prima procedura - quella "moderna" se vogliamo - otteniamo invece una media di 0.66 con deviazione standard di 0.66; naturalmente se togliamo i due livelli con le frequenze separate otteniamo il confronto tra due immagini identiche (che naturalmente corrisponde a media 0 con deviazione standard 0). Cosa ci dicono questi numeri? Che la differenza tra l'originale e l'immagine a frequenze separate corrisponde a qualcosa che é effettivamente quasi nero, differendo dal nero di mediamente meno di 1 parte (su 255 ovviamente), ma nel caso della vecchia procedura c'é qualche punto dove la differenza é maggiore (perché la deviazione standard é maggiore). E ció un po' si vede.
C'era in realtá anche un terzo modo di procedere (che prevedeva la stessa procedura con il filtro accentua passaggio, ma scegliendo il metodo di fusione "Sovrapponi" ("Overlay") ad una opacitá del 100%), ma da' risultati significativamente peggiori [3] [4].
Ció che rimane da capire é (1) perché la separazione delle frequenze non é perfetta e (2) se c'é modo di porre rimedio a ció. Questo é necessario prima di procedere a separzaioni piú complicate perché se ci portiamo dietro degli errori significativi, questi non possono che amplificarsi se cerchiamo procedure piú complesse.
Il punto da capire é, come dicevo, che ogni filtro di sfocatura in qualche modo seleziona le frequenze piú basse, ma il modo - o se preferite la qualitá - di questa separazione puó essere diversa.
Qui sotto vedete una rappresentazione grafica di quanto siano intense le diverse frequenze in un'immagine su cui é stato usato il filtro di sfocatura mediana (a sinistra), l'originale (al centro) e (a destra) quando si usa invece la sfocatura gaussiana. Devo precisare che non siete in grado di ricostruire queste rappresentazioni perché sono state ottenute con un software diverso. Né credo vi interessino i dettagli della matematica: quello che vedete bene peró nell'immagine di destra in particolare é che due strisce (una orizzontale ed una verticale) sono significativamente schiarite, con ció rappresentando che le frequenze spaziali corrispondenti sono meno intense. Ma (1) nemmeno nel caso del filtro gaussiano trovate una striscia bianca ed il resto piú o meno scuro - il che significa che c'é una certa transizione morbida tra alte e basse frequenze - e (2) quello che ottenete usando filtri di sfocatura diversi é drasticamente diverso.
Da ció desumete che (1) non é la stessa cosa tentare la separazione delle frequenze con un filtro di sfocatura piuttosto che con un altro e (2) per ciascun filtro che seleziona per voi le basse frequenze dovreste trovare il "filtro opposto" opportuno che vi seleziona ció che deve restare nel livello delle alte frequenze.
Il punto (2) lo abbiamo giá risolto in realtá con la procedura "Applica immagine" ed il metodo di sottrazione: nella 'vecchia' procedura assumevamo - senza pensarci troppo - che il filtro passa alto che Adobe ci fornisce fosse esattamente l'inverso di una sfocatura gaussiana, il che non é detto. Anzi possiamo facilmente verificare che cosí non é: costruiamo come al solito due livelli copia dell'immagine originale. Su quello superiore applichiamo il filtro passa alto che Adobe ha nserito in Photoshop con metodo di fusione "Luce lineare" al 50% di opacitá. Su quello inferiore applichiamo la solita sfocatura gaussiana ricordando sempre di usare lo stesso raggio in pixel utilizzato per il fitro passa alto. Ora procediamo cosí: disattiviamo il livello su cui é stata fatta la sfocatura, lasciando attivi solo l'immagine originale ed il livello su cui ha agito il filtro passa-alto.
L'immagine risultante - che corrisponde al filtro passa-alto in fusione "Luce lineare" al 50% di opacitá sul solo sfondo che contiene l'immagine originale - corrisponde molto evidentemente ad una versione con una nitidezza apparente maggiore. Questo era il motivo originale per l'introduzione del filro passa-alto, aumentare la nitidezza apparente. Invertiamo il livello con il filtro passa-alto - ottenendo un'immagine sfocata come ci attendiamo - e selezioniamo tutto, copiando il composito. su un livello ancora sopra. Ora disattiviamo il livello con il filtro passa-alto, mettiamo metodo di fusione differenza sul livello superiore e riattiviamo il livello con la sfocatura gaussiana. Apparentemente é tutto nero, ma i numeri sotto l'istogramma ci avvisano che la media é 0, ma la deviazione standard non é nulla: ció significa che i due livelli non sono identici, anche se la differenza é molto piccola.
Quindi il filtro passa-alto al 50% di opacitá in luce lineare e la sfocatura gaussiana sono quasi l'esatto opposto l'uno dell'altro, ma non lo sono esattamente.
Ora vi chiederete il perché di tutta questa analisi: in fin dei conti le differenze che abbiamo trovato sono cosí piccole da non essere praticamente percettibili e tutte e tre le procedure presentate sono virtualmente equivalenti al fine della separazione delle frequenze. Se una cosa non si vede allora non c'é (a meno che non la amplifichiamo).
Naturalmente c'é - almeno per me - una questione di gusto intellettuale nel comprendere dove stia il problema, ma c'é anche una motivazione molto piú pratica. Se infatti il nostro scopo fosse, come effettivamente é, quello di iterare la procedura che abbiamo visto, aumentando di volta in volta il raggio utilizzato, per ottenere una sequenza di livelli con diverse frequenze separate. in pratica un vero e proprio equalizzatore di frequenze come quelli utilizzati nella gestione audio, allora il rischio é che questi piccoli errori che ci portiamo dietro, alla fine diventino troppo grandi ed ingestibili.
La soluzione a questo piccolo enigma in realtá é piuttosto semplice e la abbiamo sotto gli occhi: il punto é che - senza dirvelo lo ammetto - ho lavorato come spesso si fa a 8 bit (avreste dovuto intuirlo quando vi ho dato il tono (128,128,128) come grigio medio) e disgraziatamente la metá di 255 non é 128, ma 127.5, ovvero un tono che non esiste in questa rappresentazione. In 16 bit il "grigio medio" (128, 128, 128) corrisponde a 16448, non a 16384 che é invece il "vero" grigio medio, o perlomeno un valore non approssimato come quello che otteniamo ad 8 bit di profonditá colore.
Se procedete come vi ho mostrato in precedenza dopo peró aver modificato l'immagine a 16 bit otterrete - a differenza che nel caso precedente - una separazione delle frequenze perfetta, cioé la cui differenza rispetto all'immagine priginale é effettivamente il nero perfetto. C'é solo una piccola differenza da tenere a mente rispetto alla procedura vista nel caso a 8 bit: quando si procede a "Applica immagine" del livello con sfocatura gaussiana su quello che conterrà i dettagli (ovvero le alte frquenze) invece di scegliere metodo di fusione "Sottrai" scegliamo "Aggiungi", ma cliccando la scelta "Inverti" (aggiungere l'inverso é chiaramente lo stesso che sottrarre) lasciando la scala a 2, ma scegliendo offset a 0: ció deriva dal fatto che Adobe ha scelto (probabilmente per evitare numeri troppo grandi) di rappresentare la profonditá a 16 bit da -255 a +255, pertanto il tono 0 rappresenta effettivamente il grigio medio. Quello esatto stavolta.
Fatto questo provvediamo a duplicare ancora lo sfondo, spostralo in alto e scegliere metoto di fusione "Sottrai" per confrontare il composito con l'immagine originale: questa volta otteniamo media 0 e deviazione standard 0, confermando il ragionamento fatto. Adesso la separazione delle frequenze appare perfetta [5], anche se - lo sottolineo ancora - i due livelli non sono cosí rigidamente separati: qualche (poco) dettaglio rimane sul livello contenente le basse frequenze e qualche bassa frequenza rimane ad intensitá molto ridotta nel livello delle alte frequenze.
Date queste basi nel prossimo post di questa serie vedremo come iterare la procedura vista per costruire un vero e proprio filtro multi-frequenza.
_______
[1] Notate bene che il pixel non é una misura di distanza, ma in qualche modo misura le dimensioni di una fotografia: una foto di 500 pixel di lunghezza contiene meno dettagli di una foto della stessa inquadratura ripresa a 5000 pixel. Quindi in qualche modo una volta fissata l'immagine di cui stiamo parlando il numero di pixel di cui due punti sono distanti ci fornisce una buona misura di distanza, anche se piuttosto astratta. Ma di questo parleró in un altro post, eventualmente.
[2] Questi numeri possono essere lievemente diversi a seconda dell'immagine di partenza.
[3] Se notate i diversi metodi di fusione sono raggruppati in 6 diverse tipologie che presentano al loro interno comportamenti piú simili (normali, scurire, schiarire, contrasto, inversione/cancellazione and componenti). I membri del gruppo che contiene come primo metodo "Sovrapponi" ("Overlay") agiscono sul contrasto e sono tutti trasparenti al grigio medio, ma hanno un effetto piú o meno violento. Questo é il motivo per cui utilizzandone uno o l'altro si usano opacitá differenti.
[4] Con questa procedura e ripetendo il confronto per sottrazione con l'immagina originale si ottene un valor medio significativamente maggiore, intorno a 2-3. Non sono un esperto della storia di Photoshop, ma credo che i diversi metodi di fusione siano stati inseriti un po' alla volta, quindi nel passato uno si doveva adattare ai metodi che Adobe forniva in quel momento (oppure usare software piú sofisticati)
[5] Naturalmente se avessimo seguito la procedura che utilizzava il filtro high-pass (o accentua passaggio) come opposto della sfocatura gaussiana l'errore sarebbe rimasto: ció conferma che "Accentua passaggio" e "Sfocatura gaussiana" non sono l'uno l'opposto dell'altro
Comments