cerca
Fotoritocco HDR
modifica cronologia stampa login logout

Wiki

Tools

Categorie

Help

edit SideBar

Fotoritocco HDR

 :: Fotoritocco HDR ::

Preambolo

HDR sta per High Dynamic Range, e in questo caso parliamo di immagini che hanno un'ampia gamma dinamica, dove per dinamicità si intende la rappresentazione della luminosità. Inoltre nel titolo c'è "fotoritocco" perché di fotoritocco si tratta: si parte da fotografie normali e si arriva ad un'immagine hdr. Non si parla invece di rendering 3D eseguito tramite tecniche di hdr o altra roba.

Tutto ciò nasce dalla considerazione che le macchine fotografiche, rispetto all'occhio umano, sono limitate: se vedi bene ciò che è chiaro, quello che è scuro diventa più scuro. Se vedi bene ciò che è scuro, quello che è chiaro diventa praticamente bianco. In pratica, la gamma dinamica delle immagini prodotte dalle macchine fotografiche è ridotta, mentre l'occhio umano ce l'ha più ampia.

In rete si trovano programmi che, a partire da foto diversamente esposte, creano automaticamente un'immagine hdr. C'è anche un plugin per Gimp, che ho provato senza molto successo, e un plugin molto più complesso per CinePaint (una versione più figosa del Gimp, ma anche più ostica da usare), per il cui funzionamento vedi sotto. C'è però un modo per fare ste cose manuali: ci vuole un poco di pazienza e alla fine, anche se non si arriverà a risultati stratosferici, qualcosa di carino salta fuori. Però è necessario fare prima un po' di riassunto tecnico.

L'esposizione

Per intenderci, l'esposizione è la quantità di luminosità che entra in una fotocamera. Le macchine hanno all'interno un apparecchio chiamato esposimetro, che rileva la luminosità della scena e possibilmente imposta automaticamente la macchina affinché la combinazione del tempo di esposizione e l'apertura del diaframma portino alla giusta quantità di luce rappresentata.

Ecco un po' di spiegazione sintetica dei termini:

  • Tempo di esposizione = per quanto tempo l'otturatore rimane aperto
  • Apertura del diaframma = quanto è aperto il diaframma, in rapporto alla dimensione della lente
  • Otturatore = quell'affare che fa il classico "clac" della macchina fotografica, cioè un affare che viene aperto per quella frazione di secondo e, mentre è aperto, fa passare la luce
  • EV = exposure value

Adesso, freghiamocene dell'apertura del diaframma, e guardiamo al tempo di esposizione. Se tengo aperto 1 secondo, entra tot luce. Se tengo aperto 1/2 secondo, di luce ne entra la metà. Se tengo aperto 2 secondi, entra il doppio della luce.

Quando la macchina prende l'esposizione alla scena, quel valore di luminosità viene chiamato 0 EV (è quindi relativo alla scena ripresa: se cambio scena, lo 0 sarà altrove). Mi darà anche un tempo di esposizione. Se lo diminuisco della metà, avrò 1 EV in meno. Se lo raddoppio, avrò 1 EV in più.

Che cosa ci serve?

Servono, per i nostri scopi, almeno tre foto della stessa scena: una con EV 0 (l'esposizione consigliata dalla macchina), una con EV +2 e una con EV -2. In realtà possiamo prendere anche foto ad altre esposizioni, intermedie tra queste oppure ancora più distanziate, però diciamo pure che 3 vanno più che bene:)

Per riprendere la scena, è d'uopo mettere la macchina su di un cavalletto e non spostarla mentre si cambiano i valori, altrimenti le foto semplicemente non coincideranno, e sarà un po' più casinistico farle coincidere...:) Inoltre, se è possibile, è meglio cambiare l'EV agendo solo sul tempo di scatto, perché cambiare l'apertura del diaframma, anche se raggiunge lo stesso scopo in termini di luce, ha altri effetti che hanno a che fare con la profondità di campo, e quindi potrebbero uscire 3 foto completamente diverse.

Se la macchina è ben ferma, si possono fare allegramente queste tre foto, che chiameremo Media, Chiara e Scura. Uh, la fantasia non fa mai difetto.

Exposure Blending col Gimp

Questa tecnica non genera un vero HDR, né un vero tonemapping. Si chiama Exposure Blending perché consiste nel "mischiare" (= blending) diverse immagini a diverse esposizioni per ottenerne una che sommi.

Come prima cosa, apriamo tutte le tre immagini col Gimp. Se sono di dimensioni generose, è meglio scalarle a, che so, 1024x768 o roba simile, che occupano meno RAM e il Gimp lavora più serenamente.

E adesso si comincia

  • Prendiamo l'immagine Scura. La selezioniamo tutta (Ctrl-A oppure c'è una voce nel menu Modifica), e la copiamo.
  • Andiamo a Media. Facciamo, dal menu modifica, "Incolla come nuovo livello".
  • Andiamo a Chiara: la selezioniamo tutta, la copiamo, e la incolliamo in Media come nuovo livello.

Quindi, a questo punto in Media ci saranno tre livelli: quello in basso con la foto normale, quello in mezzo con la foto Scura, e quello sopra con la foto Chiara.

Facciamo ora un altro excursus gimpesco. Ogni livello può avere una sua maschera di livello. Questa maschera dice quali punti del livello saranno visibili, e quali no. Il bianco vuol dire punto visibile, mentre il nero vuol dire punto trasparente. Tutte le sfumature di grigio rappresenteranno quindi vari gradi di trasparenza.

Torniamo a Media: occorre creare una maschera di livello sia per il livello scuro, che per il livello chiaro. Si clicca col destro sul livello, e si sceglie "Aggiungi maschera di livello". Comparirà una scelta: bianco, nero bla bla bla: non ha importanza quello che scegliete qui, poi si vedrà il perché.

Quindi, adesso che avete una maschera di livello per i livelli chiaro e scuro, torniamo alle immagini Scura e Chiara

  • Andiamo in Chiara
  • Andiamo sul menu Colori e scegliamo Desatura. Una qualsiasi desaturazione dovrebbe andare bene, sicuramente qualcosa cambierà, ma vabbé
  • L'immagine diventerà in toni di grigio (desatura = togli la tinta, in pratica)
  • Selezioniamo tutto, e copiamo

Il passaggio seguente è da fare con precisione:

  • Andiamo in Media
  • Selezioniamo la maschera di livello del livello chiaro. Nella finestra dei livelli e layer, il livello o la maschera selezionati sono circondati dal bianco
  • Premiamo Ctrl-V, ovvero incolla
  • Il gimp creerà un livello flottante, sopra tutti i livelli
  • Premiamo il pulsantino con l'àncora (è sotto la lista dei livelli) e vedremo che la nostra immagine in bianco e nero verrà ricopiata nella maschera di livello del livello chiaro
  • Andiamo in Scura
  • Desaturiamo, come prima
  • Adesso, nel menu Colori scegliamo Inverti.
  • L'immagine diventa un negativo, in pratica
  • Selezioniamo tutto e copiamo
  • Andiamo in Media, e incolliamo questo negativo nella maschera di livello del livello scuro

Il gioco è fatto! Quello che è successo è che dall'immagine scura, tramite la maschera di livello, prendo le parti più chiare, mentre dall'immagine chiara prendo le parti scure. Così ho una gamma dinamica che va dal medio, allo scuro, al chiaro, più di quanto l'immagine Media non possa fare da sola.

Per regolare le cose, si può cambiare la luminosità o il contrasto delle immagini desaturate, così che la relativa maschera di livello sia differente. Inoltre, è possibile anche applicare alle maschere di livello un po' di sfocatura Gaussiana, così che si fondono meglio.

Se non escono risultati eclatanti come quelli che si vedono in rete, occorre tenere presente che ci sono molte altre cose da fare per dare quel tipico aspetto onirico alle foto.

HDR con Cinepaint

Cinepaint è una versione di Gimp che aggiunge sostanzialmente la capacità di manipolare immagini con più di 8 bit per canale. Nel caso delle immagini HDR, ciò viene utile perché la gamma di luminosità di un'HDR è superiore a quella che 8 bit possono contenere. Cinepaint è in grado di salvare immagini con 32 bit per canale (!!).

Produrre immagini HDR a partire da foto scattate con diversa esposizioni è piuttosto semplice, una volta che si capisce come funziona l'ambaradan. Nel menu File | New From... c'è una voce che dice Bracketing to HDR. Bracketing = esposizione a forcella, cioè media, scura e chiara. Si devono scegliere le immagini da caricare, e lui le carica.

Salterà fuori una tabella con la lista delle immagini, ordinate dalla più scura alla più chiara. E qui viene la parte un po' più complessa. L'ultima colonna a destra è il tempo di esposizione relativo tra le immagini. Si devono assegnare dei valori relativi a ciascuna immagine, in modo che il rapporto tra questi numeri sia il rapporto effettivo tra la luminosità delle immagini.

Si può ad esempio stabilire che l'immagine media abbia luminosità 1. Di quest'immagine in genere si sa con che tempo di otturazione è stata scattata, perché viene salvato nei dati EXIF della macchina (per qualche ragione Cinepaint non li vuole leggere...). Quindi supponiamo che l'immagine media sia stata scattata con tempo 1/50 di secondo. L'immagine scura supponiamo sia stata scattata con 1/100 di secondo, e quindi, rispetto al valore 1 attribuito alla media, nella colonna time le diamo 0.5. Allo stesso modo, se l'immagine chiara è stata scattata con 1/25, le diamo valore 2.0. L'importante, come dicevo sopra, è che i valori siano proporzionati. Nessuno ci impediva di dare all'immagine media il valore .07643, e calcolare le altre di conseguenza. Ad esempio, si può mettere direttamente il tempo di scatto: 1/50 = 0,02, 1/100 = 0,01 e così via.

Fatto questo, si premono in sequenza (in realtà non è necessario) i pulsanti Init, Compute Response e HDR. Quest'ultimo creerà l'immagine HDR che ci serve. Ci sono anche altre finestrelle che compaiono, ma i valori relativi li rimando ad un eventuale approfondimento.

Molto probabilmente, quando si creerà l'immagine HDR, Cinepaint si lamenterà che lo schermo non è calibrato bla bla. Vabbeh, chissenefrega. Probabilmente però l'immagine risultante avrà un sacco di colore PORPORA: uno schifo! Ma in realtà questo non importa, è solo un problema di visualizzazione. Occorre salvare quest'immagine con l'estensione .hdr, e Cinepaint la salverà per noi.

A questo punto, l'HDR c'è ed è valido, ma manca una cosa importante: il tone mapping.

Il tone mapping

Tone mapping vuol dire mappare le differenze di luminosità in differenze cromatiche. Le immagini normali, gli schermi, i proiettori etc. lavorano bene o male tutti con RGB a 8 bit. Ma la nostra immagine è ben più cicciona, in termini di gamma (sia luminosa che cromatica). Gli algoritmi di tone mapping servono appunto a convertire la gamma luminosa in una gamma cromatica che ci stia negli 8x8x8 bit dell'RGB standard.

A questo scopo, occorre un programma apposito. Ce n'è uno interessante, e si chiama Qtpfsgui. Lo si scarica, e tramite questo si apre l'immagine HDR appena salvata con Cinepaint. Già lui tendenzialmente la visualizzerà meglio. A questo proposito, c'è una combo box chiamata Mapping che ci permette di scegliere quale gamma visualizzare. Si può quindi notare, cambiano le gamme, che anche con diverse gamme di luminosità il colore è comunque presente: questo sta a dimostrare che c'è un vero high dynamic range.

C'è un pulsante in cima che dice "Tonemap the hdr", e premutolo ci aprirà una nuova finestra. Sostanzialmente, qui dentro si deve scegliere la dimensione dell'anteprima in alto, e uno degli algoritmi in basso. Quello che fa gli effetti più marziani (esempi qui sotto nella galleria) è Fattal (non fractal, ma proprio Fattal: è il cognome di uno). Lo si sceglie, e si preme Apply: la nostra hdr tonemapped è pronta!:) Si gioca un po' con gli slider e si vede che cosa cambia. Gli altri algoritmi danno risultati più seri, ma qui ovviamente va a gusti!:)

Se si vuole salvare, basta selezionare in alto una dimensione dell'immagine più ampia, generarla con Apply e aspettare il dovuto tempo, e poi salvarla nel formato che si preferisce.

Qtpfsgui

Qtpfsgui non fa solo tone mapping. Permette di generare un'HDR a partire da immagini con esposizioni differenti, e probabilmente è più semplice che nemmeno Cinepaint. Cinepaint però (nel caso si riesca a visualizzare correttamente l'immagine) permette di applicare subito filtri e correzioni, trattandosi di un programma di fotoritocco. Inoltre, il risultato dell'elaborazione è diverso.

La prima cosa da fare è creare una nuova HDR. Si caricano le immagini di partenza, e Qtpfsgui automaticamente darà loro un valore EV (non ho ancora capito come lo calcola, ma pazienza).

Il passo successivo consiste nell'allineare (a mano...) le varie foto, in modo che le forme coincidano e non ci siano spiacevoli effetti.

Si sceglie poi un profilo di generazione, ovvero quale algoritmo usare per pesare i pixel appartenenti alle varie foto, e trarre da essi l'informazione HDR. Il profilo numero uno è in effetti quello che rende meglio.

E poi, si passa al tone mapping.

Algoritmi di Tone Mapping

Ci sono algoritmi "seri" e meno "seri":) Tra quelli disponibili in Qtpfsgui, il Mantiuk dà risultati veramente seri. In generale occorre però dare un po' più di saturazione all'immagine, che tende in effetti un po' al bianco/nero.

Il Fattal ha il parametro beta che potrebbe essere chiamato "parametro serietà". Più è alto, più l'immagine è seria. Più è basso, più l'immagine è in stile cartoon. Rappresenta l'intensità di applicazione dell'algoritmo. Inoltre, al contrario del Mantiuk, il Fattal tende a saturare all'eccesso i colori: è probabilmente meglio abbassare la saturazione a circa 0,60.
Il parametro Alpha serve per stabilire la soglia sotto la quale Fattal non amplifica il contrasto tra due pixel. Va usato in congiunzione con la Noise Reduction, perché Fattal ha la caratteristica di pompare al massimo la differenza tra due pixel adiacenti, e così facendo tutto il rumore digitale lo trasforma in orrendo dettaglio.
Un'altra spiacevole caratteristica del Fattal è che, al crescere delle dimensioni di rendering, la resa dell'algoritmo, a parità di parametri, cambia!!! Questo deriva dal fatto che Fattal è un algoritmo "locale", ovvero decide l'aspetto di un pixel in base ai suoi vicini. A seconda delle dimensioni dell'immagine, ovviamente i vicini di ogni singolo pixel cambieranno, e così Fattal si comporterà in modo diverso. Per supplire a questa carenza occorre aumentare Beta e diminuire la Saturazione tanto più quanto più si ingrandisce l'immagine. Non c'è una regola precisa, o se c'è non la conosco: occorre provare ogni volta a mano per vedere il risultato.

È anche possibile prendere due tonemap diverse e comporle col Gimp in due layer diverse. Da qualche parte in rete ci sono i consigli di diverse persone, ma quello che emerge è che occorre sperimentare di persona, e che ogni immagine probabilmente andrà trattata in modo diverso dalle altre.

Infine, Qtpfsgui permette anche di caricare una singola immagine, e non solo: permette di caricare direttamente un file RAW (tramite dcraw, il che assicura compatibilità con praticamente tutte le fotocamere esistenti). Il problema del caricamento diretto da RAW è che spesso i parametri standard per esposizione etc. di dcraw sono sballati, rispetto a quanto ottenibile con altri sw di sviluppo. L'artefatto più comune è l'amplificazione a dismisura del rumore: dcraw stabilisce che non c'è abbastanza luce nell'immagine, e cerca di sovraesporre. Non che dcraw non permetta di ottenere ciò che vogliamo, ma trattandosi di un programma a linea di comando, non è possibile vedere gli effetti di ciò che combina su ogni singola foto, a meno di provarla... Si può comunque tentare di dare in pasto a Qtpfsgui un TIFF generato con altri programmi, con quanti più bit possibili. Di solito esce meglio. Tra l'altro, tra le opzioni di Qtpfsgui è anche possibile personalizzare i parametri da passare a dcraw per quest'operazione di conversione. Ovviamente occorre conoscerli...:)

Galleria

Dopo tutto questo parlare, ecco una galleria di esempio. Se qualcuno fa degli esperimenti, li può mettere benissimo in questa galleria, così che tutti vedono quello che esce!:)

Le prime quattro immagini servono ad illustrare il procedimento di Exposure Blending. Si tratta della Scura, della Media e della Chiara, e dell'esposizione blendata finale.

:: hdr ::

Files

Yarishdr (5 MB circa) è un'immagine hdr (toh!) creata a partire da 5 esposizioni diverse della Yaris in garage. Da questo hdr è stata ottenuta l'immagine nella galleria qui sopra. La si può scaricare per spaciugare a casa con i vari tools.

Links


Qultura