coda di elaborazione dei colori di darktable

Molte applicazione per l’elaborazione delle immagini viene dagli anni ‘90 e/o eredita il flusso di lavoro degli anni ‘90. Queste applicazione elaboravano immagini codificate a 8 bit usando interi senza segno in quanto più efficienti computazionalmente e in termini di memoria. Tuttavia, dato l’uso di valori interi (che implica errori di approssimazione), questi software dovevano applicare una “correzione gamma” (fondamentalmente una funzione di trasferimento che applica la potenza di 1/2.2 o 1/2.4 per codificare i valori RGB) e aumentare la profondità di bit nelle luci basse, al fine di ridurre gli errori di approssimazione in quell’area (gli umani sono molto sensibili ai dettagli nelle zone d’ombra. Inoltre, i formati con interi a 8 bit sono limitati tecnicamente all’intervallo 0-255. Qualsiasi valore oltre questo intervallo viene tagliato al valore valido più vicino.

Questo flusso di lavoro, che usa rappresentazioni RGB limitate e possibilmente trasformazioni non-linear per codificare i segnali RGB, è chiamato “riferito allo schermo”. Si basano sull’assunto che l’immagine venga preparata per la visualizzazione a schermo all’inizio della coda di elaborazione, e integrano, codificandole rigidamente, supposizioni riguardo valori RGB di nero, grigio medio e bianco. Molti degli algoritmi di elaborazione immagini usati in questi flussi di lavoro girano attorno a queste supposizioni. Per esempio, la modalità di fusione sovrapponi si aspetta che il grigio medio sia codificato al 50% (o 128 usando la codifica in intero).

Sfortunatamente il ridimensionamento non lineare, che è obbligatorio per far funzionare la codifica con gli interi, spezza il rapporto naturale tra i valori dei pixel. Tonalità e saturazione cambiano in maniere imprevedibili, e i rapporti con i valori tra i pixel intorno vengono dilatati i compressi in maniera che anche i gradienti vengono alterati imprevedibilmente.

Quindi, le code di elaborazione riferite allo schermo complicano i filtri ottici (sfocatura e riduzione della sfocatura delle lenti), il compositing alfa (che si basa sulle definizioni ottiche e geometriche di occlusione), i colori e i gradienti (relazioni locali tra crominanza e luminanza dei pixel). Inoltre non si adattano bene alle immagini HDR, che ha portato allo sviluppo di molti discutibili metodi di mappatura tonale locale e globale, e allo scellerato “aspetto HDR” degli anni ‘10.

I computer moderni non sono legati alle stesse limitazioni computazionali degli anni ‘90, e possono lavorare su pixel i cui valori sono illimitati (da zero a +infinito) e codificati come numeri reali (utilizzando il formato a virgola mobile). Queste possibilità aprono ai quello che chiamiamo flusso di lavoro “riferito alla scena”, dove i pixel possono conservare la loro relazione radiometrica originale per quasi tutta l’intero processo di elaborazione. Nel flusso di lavoro riferito alla scena, i pixel vengono preparati per la visualizzazione solo nell’ultimo passaggio della coda, nella trasformazione per il monitor. Questo significa che i valori RGB dei pixel vengono mantenuti proporzionali all’intensità dell’emissione di luce registrata dalla fotocamera sulla scena, abilitando quindi un’accurato alfa compositing e l’emulazione di filtri ottici, mentre si può anche ridimensionare verso qualsiasi gamma dinamica attraverso lo stesso algoritmo (SDR come HDR).

Tuttavia, le code di elaborazione riferite alla scena perdono la convenienza dei valori prefissati del bianco, grigio medio e del nero, che caratterizzano le elaborazioni riferite al monitor, e impostare questi valori in base alla scena e alle condizioni di scatto, diventa ora responsabilità dell’utente. Questo richiede un’interfaccia utente più complessa.

Inoltre, siccome si assume che i valori riferiti alla scena siano significativi in termini di fisica della luce, i pixel non possono aver intensità zero. Questo vorrebbe dire che non hanno ricevuto alcuna luce, e l’esistenza di “assenza di luce” invalida molti algoritmi accurati dal punto di visita fisico. In fatti, bianco e nero non significano niente rispetto alla scena originale, che è solo una collezione di luminanze a varie intensità. Il flusso di lavoro riferito alla scena punta semplicemente a ricollocare alcune luminanze della scena su quello che appare “bianco” o “nero” sul mezzo di visualizzazione.

Le versioni di darktable precedenti alla 2.6 avevano una coda di elaborazione non lineare e riferita allo schermo, assumendo che una trasformazione non lineare fosse avvenuta all’inizio della coda e che quindi il grigio medio fosse codificato come il 50%. Tuttavia, non tutti i moduli e i filtri tagliavano i valori dei pixel oltre il 100%, lasciando la possibilità di recuperare questi valori più in là nella coda.

La modalità del modulo filmic, introdotta in darktable 2.6, fu il primo passo verso una coda di elaborazione riferita alla scena, e rinviò l’obbligatoria preparazione non lineare per lo schermo alla fine della coda, assieme alla possibilità di impostare valori personalizzabili di nero, grigio e bianco. Il modulo bilanciamento colore quindi introdusse un modo di gestire la definizione variabile di grigio medio.

A partire da darktable 3.2, gli utenti hanno potuto scegliere tra due diversi flussi di lavoro che stabilivano impostazioni predefinite e consistenti per moduli e ordine della coda di elaborazione, sia per quelle riferite allo schermo che riferite alla scena.

In darktable 3.4, sono state introdotte le opzioni per maschere e modalità di fusione completamente riferite alla scena, permettendo alle maschere di coprire valori dei pixel superiori all 100% e usando solo operatori di fusione “illimitati”.

Passare al riferito alla scena è un balzo cognitivo per gli utenti più esperti che sono abituati a pensare riferiti al monitor. Nei flussi di lavoro riferiti al monitor è usanza comune quella di ancorare il valore di bianco e lasciare che gli aggiustamenti di tono ruotino attorno a quel punto, tentando di massimizzare la luminosità mentre si cerca di evitare il taglio. Nei flussi di lavoro riferiti alla scena, i valori di bianco e nero sono fluidi e si adattano al dispositivo di uscita. Si consiglia che gli utenti ancorino il grigio medio (che verrà preservato immutato per qualsiasi dispositivo di uscita) e lasciare che la trasformazione (filmic) dilati o contragga la gamma dinamica attorno a quel punto. Siccome il bianco a 10 bit HDR è tanto luminoso quanto il bianco a 8 bit SDR (gamma dinamica standard), qualsiasi rigida definizione di “bianco” diventa irrilevante. Ma ancorare il grigio medio è ancora più conveniente, in quanto mantiene invariata la luminosità media dell’immagine lungo la trasformazione.

Alcuni moduli (livelli, livelli rgb, curva tono, curva rgb) sono intrinsecamente incompatibili con il flusso di lavoro riferito alla scena in quanto la loro interfaccia grafica suggerisce implicitamente che i valori RGB siano imitati nell’intervallo 0-100%. Mentre le operazioni sui pixel che possono eseguire, in quanto internamente senza limiti, possono lavorare in entrambi i flussi di lavoro riferiti alla scena o al monitor, la loro interfaccia di controllo non permette di selezionare pixel al di fuori dell’intervallo 0-100%.

In maniera simile, le modalità di fusione come sovrapposizione, luce lineare, luce morbida, luce dura, scurisci, schiarisci etc, hanno tutte valori di soglia codificati che presumono internamente un meccanismo non lineare riferito allo schermo.

In darktable 3.4 e superiori, tenendo il mouse sopra l’intestazione di un modulo, mostrerà un tooltip con i dettagli dello spazio colore, intervalli e codifiche che il modulo si aspetta, usa e produce. Qui la definizione dei termini usati:

lineare
I valori dei pixel sono proporzionali all’emissione radiometrica sulla scena, in modo che abiliti un’emulazione accurata di filtri ottici.
non lineare
I valori dei pixel vengono ridimensionati in modo tale che alle basse luci venga assegnato un intervallo di codifica più ampio, solitamente al fine di riposizionare il riferimento grigio medio del 18.45% a valori tra il 46 e il 50%.
riferito allo schermo
Si presuppone che i valori dei pixel siano compresi tra 0 e 100% dell’intervallo di visualizzazione, dove il 100% è definito come la luminanza di una superficie bianca riflessiva al 20% (la casella bianca di un Color Checker), e 0% è definito come la densità massima del dispositivo di uscita (inchiostro nero saturato, o retroilluminazione minima di un pannello LED).
riferito alla scena
Si presuppone che i valori dei pixel siano maggiori di zero verso il +infinito. Il significato di specifici valori dei pixel viene stabilito durante il processo dall’utente. Valori riferiti alla scena non implicano automaticamente una codifica lineare e ridimensionata radiometricamente.

translations