Una panoramica sulla demosaicizzazione

Uno dei parametri che spesso non si va a modificare - o addirittura non è possibile proprio farlo - è l'algoritmo di demosaicizzazione. Eppure, a seconda dell'algoritmo utilizzato, si possono spremere più o meno a fondo i dati raccolti dal sensore, si può raggiungere una maggior nitidezza o si può evitare l'effetto Moire in demosaicizzazione.

Gli algoritmi di demosaicizzazione sono tanti, in futuro aumenteranno e su questo messaggio non tratterò nemmeno tutti quelli ad oggi esistenti.
Gli algoritmi di demosaicizzazione presi in gioco sono quelli disponibili su Photivo (o RawTherapee) e su parecchi altri software che includono le librerie DCRaw (o suoi surrogati).

Su Photivo sono attualmente disponibili i seguenti algoritmi: demosaicizzazione bilineare, VNG, VNG a 4 colori, PPG, AHD, AMaZE, DCB, VCD e LMMSE. Ognuno di questi è nato con il medesimo scopo: ricostruire il piu' fedelemente possibile quel 66.6% di informazione colore che manca ad ogni pixel del nostro RAW.

A fianco degli algoritmi di demosaicizzazione, ultimamente, sono nati anche degli algoritmi secondari che preparano "al meglio" la matrice prima della demosaicizzazione: è il caso, ad esempio, dell'algoritmo di rifinitura EECI o degli algoritmi di riduzione del rumore FDBB.
Questi algoritmi lavorano a livello di matrice e quindi non sono assimilabili ai normali filtri.

Per vedere la qualità di un algoritmo di demosaicizzazione occorre dargli in pasto un'immagine con dettagli estremamente fini, a livello della frequenza di Nyquist: dettagli più fini rispetto alla frequenza di Nyquist non sono risolvibili dal sensore. Ciò significa che la frequenza di Nyquist è pari ad un pixel.

Le seguenti immagini - crop al 200% - mostrano il comportamento dei vari algoritmi quando trattano dettagli finissimi:

Bilineare

VNG

VNG a 4 colori

PPG

AHD

AMaZE

DCB

VCD

LMMSE

La prima selezione che è possibile fare è quella degli algoritmi che risentono dell'effetto Moire. L'effetto si presenta sul muro della casa producendo bande arancio e blu.
Esse sono molto evidenti sul Bilineare, su entrambi i VNG e sull'AHD. Con il PPG viene attenuato poichè viene spostato soprattutto sulle componenti rosse e blu. Infine viene tenuto sotto controllo decisamente bene dal DCB, dall'AMaZE e dal LMMSE.

La seconda selezione è quella sul livello di dettaglio. Questa è difficile da inquadrare poichè va valutato quanto gli artefatti della demosaicizzazione seguono quello che poteva essere il dettaglio reale (e che oramai abbiamo perso - giusto per chiarire).
Gli artefatti sono tutte quelle strutture a forma di labirinto che permeano l'immagine. Queste strutture cercano di propagare i colori cercando di azzeccarne la direzione giusta di propagazione: azzeccare la direzione giusta significa rendere l'immagine più nitida.
In questo frangente la fanno da padroni gli algoritmi AMaZE e DCB. Il DCB, in particolare, riesce a raggiungere una precisione molto elevata. Fate caso a come riesce a confinare la propagazione dei colori sul muro del casotto in basso a sinistra: riesce a descrivere i mattoni quasi uno per uno.

Per alcuni non è una novita' che AMaZE e DCB siano i migliori algoritmi attualmente disponibili. Resistono all'effetto Moire e hanno una precisione elevata. In particolare il DCB è oggi l'unico algoritmo che riesce a raggiungere la frequenza di Nyquist... con l'unica debolezza di non saperlo fare altrettanto bene quando sono presenti aberrazioni cromatiche.

Il DCB ha un'altra peculiarità: può essere regolato per operare una maggiore rifinitura dei dettagli. Peculiarità che nasce per limitare un po' la struttura a labirinto che produce la propagazione del colore.
Un esempio (crop 200%):

Qui vediamo il DCB a singola passata (a sx, "DCB x1"), a doppia passata (al centro, "DCB x2") e a quadrupla passata (a dx, "DCB x4"). Si possono fare anche più di 4 passate (8, 20, 109, ecc.) ma non ho mai notato miglioramenti tali da giustificare lo spingersi oltre il 4x.
Ad ogni modo nell'immagine si può notare come le strutture a labirinto sul muro della casa vengano "limate" man mano che si aumentano le passate di rifinitura, malgrado il dettaglio dei mattoni sul casotto non viene perso.

Fra gli algoritmi secondari che migliorano la demosaicizzazione, c'è l'EECI. Si tratta di un analizzatore di gradienti che lavora a livello di matrice. Esso permette il recupero di una maggior nitidezza con gli algoritmi con precisione meno elevata.
Non bisogna aspettarsi da questo algoritmo un effetto tipo l'applicazione della maschera di contrasto: il suo effetto spesso è un riposizionamento di pixel più o meno intensi in modo da enfatizzare o smorzare la direzione di un gradiente. È normale, usando questo filtro, ritrovarsi con una immagine finale con un numero più elevato di colori unici.

Altro algoritmo secondario importante è l'FDBB, che esiste in due versioni una più blanda dell'altra, e che serve per operare una lieve riduzione del rumore a livello di matrice.
Il suo effetto rende, come tutte le riduzioni di rumore, piu' morbida l'immagine. In particolare - e questo è il suo principale difetto - rende morbida la componente rossa della matrice... e i rossi, in generale, risentono della cosa. La contropartita è una riduzione del rumore cromatico assieme ad un mantenimento dei dettagli.
Logicamente l'FDBB è da usare in coppia con gli algoritmi di demosaicizzazione più precisi.
Per vedere come l'FDBB agisce sui rossi vediamo queste due immagini (crop al 100%).

DCB

DCB + FDBB2

Nella seconda si può notare come il riflesso rosato del binario in basso a sx venga quasi desaturato del tutto, oppure nel camino della casa in sfondo il rosa viene smorzato. Basta osservare, infine, i cavi della linea ferroviaria per accorgersi come sono meno definiti.

Perchè parlare di tutti gli algoritmi e non solo del DCB visto che è tanto preciso? Non basta mettere le iterazioni di rifinitura a 4 e poi non curarsene più?

Effettivamente quando si sviluppa un RAW sono pochi i motivi per non preferire il DCB, ma ci sono almeno due casistiche (fra quelle con cui ho avuto a che fare io) in cui si può preferire un'altro algoritmo di demosaicizzazione.

Il primo caso riguarda la ritrattistica.
Partendo dal presupposto che cromaticamente rendono allo stesso modo (è il software che manipola il prodotto della demosaicizzazione a fare la differenza cromatica, non l'algoritmo in se), per la resa della pelle è meglio preferire LMMSE poichè non acuisce il dettaglio come fa il DCB (è più morbido) e il suo algoritmo contiene un analizzatore di gradienti (qualcosa di simile al citato EECI) che quindi restituisce più sfumature. LMMSE è simile all'AHD ma non produce i falsi colori di quest'ultimo.

Il secondo caso riguarda il bianco e nero.
Il modo in cui lavora il DCB rende molto, forse troppo, nitidi i singoli canali. In particolare, volendo sviluppare un B/N simulando il filtro rosso, ci si rende subito conto che questo canale puo' presentare artefatti poco piacevoli e talvolta simili ad un abbassamento di risoluzione.
Anche qui la soluzione è rivolgersi ad un algoritmo meno sgarbato e morbido: la scelta (la mia) cade di nuovo su LMMSE che riesce a produrre un risultato molto più lavorabile e piacevole.
Un'immagine spiega bene la differenza (crop 100%):

Malgrado i coppi del tetto siano piacevolmente più nitidi nel risultato prodotto dal DCB (a sx), c'è da rilevare la pessima resa - con scalini vistosi - sui cavi della linea ferroviaria.
Utilizzando l'LMMSE, invece, tutto è ammorbidito, si intravede appena un accenno di scalinatura sui cavi e i coppi risultano avere una resa un po' più morbida. Il vantaggio di LMMSE, in questo caso, a parte le sfumature più graduali, è anche una maggior lavorabilità dell'immagine: ad esempio è più adatta ad essere trattata con i vari filtri di enfatizzazione del microcontrasto (maschera di contrasto, high-pass filter, sharpening, ecc.)... l'altra, quella fatta con il DCB, con un nulla vi farebbe il bordino bianco.