colore digitale blog

Il blog di Mauro Boscarol sulla gestione digitale del colore dal 1997

Nella serie Camera Raw e Lightroom

ACR: algoritmo di formazione dell’immagine

Qual è il flusso delle operazioni seguite da ACR (versione 5.2 o superiore) quando deve ricostruire una immagine dai dati RAW? Qui per semplicità mi limito a considerare la formazione dell’immagine

  • di un file RAW non DNG (quindi NEF, CR2 o altro);
  • per il quale non c’è necessità di matrici di calibrazione calcolate da Adobe;
  • proveniente da un sensore RGB con 3 piani di dati (cioè SamplePerPixel = 3) che è il caso tipico;
  • proveniente da un sensore RGB che, come la stragrande maggioranza, non fa bilanciamento analogico;
  • con le impostazioni Adobe originali.

Dunque non considero (almeno in questo post):

  • lo sviluppo dei file DNG;
  • le matrici CameraCalibration, che modificano le ColorMatrix. They are populated (if they are) based on metadata from the source raw file, usually by comparing the “daylight” white balance factors between the current camera and a reference camera Adobe used for calibration. -Thomas Knoll;
  • le matrici ReductionMatrix che sono utilizzate quando i piani di dati sono più di 3;
  • l’eventuale bilanciamento analogico (unici casi conosciuti: hardware per qualche dorso Better Light; software per Nikon D1);
  • le impostazioni di utente diverse da quelle standard di default; dunque non considero il setting personale di fotocamera e l’xml personale di immagine e le impostazioni di calibrazione;
  • i profili DNG di tipo “Camera” e creati o modificati dall’utente.


A – Recupero dei dati necessari

1
La prima cosa che fa ACR è recuperare nei metadati dell’immagine la marca e il modello della fotocamera (corrisponde al tag UniqueCameraModel in DNG).

2
Quindi ACR recupera il profilo Adobe Standard  per quell’UniqueCameraModel. (Se il profilo non è disponibile per quel modello viene usato un profilo ACR, per esempio ACR 4.4.) Nel profilo Adobe Standard, ACR recupera (oltre alle info generali come il copyright, il nome, la politica di incorporazione) i seguenti dati:

  • i due illuminanti per i quali è stato creato il profilo; (sono i tag CalibrationIlluminant1 e CalibrationIlluminant2 del profilo); nel profilo Adobe Standard ci sono sempre due illuminanti e questi sono sempre A e D65; in altri profili possono essercene due diversi da questi, oppure uno solo;
  • le due matrici di caratterizzazione (sono i tag ColorMatrix1 e ColorMatrix2, due matrici 3 x 3 relative ai due illuminanti, che portano i valori XYZ in valori Camera RGB non bilanciati); queste matrici servono per calcolare la cromaticità del bianco bilanciato; inoltre possono poi essere usate per caratterizzare la fotocamera, ma Adobe preferisce per questo secondo scopo le matrici indicate qui sotto;
  • altre due matrici di caratterizzazione (sono i tag ForwardMatrix1 e ForwardMatrix2, altre due matrici 3 x 3 per i due illuminanti, che portano i valori Camera RGB bilanciati in valori XYZ D50); Adobe usa queste matrici, e non le precedenti, per caratterizzare la fotocamera;
  • LookTable (cioè i tag ProfileLookTableData e ProfileLookTableDims), una tabella che va da HSL a HSL; è una singola tabella e non ha bisogno di interpolazione.

Nei profili Adobe Standard non c’è altro (nei profili “Camera” e in quelli creati dall’utente ci possono essere curve tonali e tavole HueSat).

3
Dai metadati dell’immagine Raw, ACR può recuperare altri dati che gli servono:

  • dati per la linearizzazione (corrispondenti al tag LinearizationTable in DNG);
  • dati per il livello del nero (corrispondono ai tag DNG BlackLevel, BlackLevelDeltaH, BlackLevelDeltaV)
  • dati per il livello del bianco (WhiteLevel);
  • dati della cromaticità dell’illuminante della scena in fattori Raw o in xy (tag AsShot).


B – Calcolo dei dati lineari di fotocamera (linear reference values
)

1
I dati digitali Raw originali vengono decompressi (se sono compressi) e/o decodificati (se sono codificati). Ognuno dei tre piani RGB viene processato indipendentemente.

2
I dati digitali vengono linearizzati se già non lo sono. In un altro post del blog c’è un esempio di linearizzazione per formati NEF. Il sensore cattura dati di luminanza, ma nella fotocamera possono essere compressi in qualche modo e in tal caso non sono più lineari con la luminanza e quindi vanno ri-linearizzati.

3
Viene calcolato e sottratto il valore di black level per ogni pixel. Il black level per ogni pixel è la somma di queste tre informazioni che possono essere contenute nei metadati:

  • BlackLevel: informazione sul dark current noise (eccitazione causata dall’energia termica)
  • BlackLevelDeltaH: distribuzione del black level sulle righe
  • BlackLevelDeltaV: distribuzione del black level sulle colonne.

4
I dati vengono scalati nell’intervallo 0-1. Il fattore di scala è 1 / (WhiteLevel – maximum computed black level for the sample plane) e i dati vengono clippati a 0 e 1.

A questo punto i dati sono nello spazio lineare di fotocamera. Il nero assoluto (zero luce) è codificato come 0.0 e il massimo valore utile (limitato o dalla saturazione del sensore oppure dal clipping dell’ADC) è codificato come 1.0.


C – Demosaicizzazione

La demosaicizzazione viene calcolata con un algoritmo privato e non noto, modificato più volte nelle varie versioni di ACR.


D – Calcolo della cromaticità xy del bianco di fotocamera
(cioè dell’illuminante della scena)

Per default ACR prende il bianco AsShot (cioè impostato in macchina dall’utente); se non c’è un AsShot calcola un bianco automaticamente (Auto).

Tipicamente il bianco AsShot è dato in numeri di sensore, e in tal caso la cromaticità del bianco si trova con questo processo iterativo usando le matrici ColorMatrix:

  1. scegliere a caso un valore xy;
  2. ricavare una ColorMatrix per interpolazione (vedi qui sotto *);
  3. applicare questo xy a questa matrice e vedere se corrispondono i numeri;
  4. se non corrispondono tornare indietro con l’inversa ColorMatrix e riprovare fino a che la serie converge.

Dai valori di cromaticità xy si calcola la temperatura di colore (Bruce Lindbloom ha un calcolatore per farlo) e si interpola la ColorMatrix per quella temperatura.

* L’interpolazione viene fatta linearmente usando le temperature inverse. Per esempio per interpolare 5000 K tra 2000 K e 6000 K, si interpola linearmente tra 1/2000 e 1/6000 il valore 1/5000, che equivale a interpolare linearmente tra 1/2 e 1/6 il valore 1/5.

Se servono i numeri di sensore si applica la ColorMatrix inversa.


E – Calcolo della matrice di conversione da RGB di fotocamera in XYZ

In questa fase viene calcolata una matrice  3 x 3 che porta dalle coordinate di fotocamera (numeri Raw) alle coordinate dello spazio XYZ, portando il bianco di fotocamera in D50 con una CAT.

Per questa operazione sono disponibili due algoritmi indicati qui sotto con A e B. Se sono presenti le matrici ForwardMatrix ACR usa l’algoritmo A. Se non sono presenti (come nei profili ACR 4.3 o precedenti) ACR usa l’algoritmo B che fa uso delle ColorMatrix.

Algoritmo A (da usare se sono presenti le matrici ForwardMatrix)

Le matrici ForwardMatrix (FM), per definizione, si aspettano coordinate di camera già bilanciate e le portano in XYZ con un adattamento cromatico incorporato che mappa il vettore unitario (1, 1, 1), cioè il bianco di camera in XYZ D50. Per l’adattamento cromatico Adobe usa la CAT di Bradford, ma lo sviluppatore può usare quella che preferisce.

  • Si crea una matrice diagonale con i valori Camera Neutral (cioè valori Raw che definiscono il bilanciamento di bianco).
  • Si moltiplica FM per la matrice  sopra indicata e si ottiene la matrice CameraToXYZ_D50.

Questo metodo esegue il bilanciamento scalando i valori di camera invece di usare un adattamento cromatico e, secondo quanto scritto nelle specifiche DNG, funziona meglio in casi estremi (un motivo per consigliare questo algoritmo).

Algoritmo B (da usare se non sono presenti le matrici ForwardMatrix)

Si calcola la matrice XYZtoCamera moltiplicando  (se esiste) la matrice CameraCalibration interpolata (CC) per la matrice ColorMatrix interpolata (CM). Questa matrice porta da XYZ D50 alle coordinate di fotocamera originali, prima del bilanciamento.

Ora si inverte questa matrice ottenendo la matrice CameraToXYZ che porta dalle coordinate di fotocamera originali non bilanciate a XYZ D50.

Ora bisogna applicare una matrice di adattamento cromatico CA che porta dal valore xy di bilanciamento a D50 (con la CAT di Bradford). Si ottiene la matrice CameraToXYZ_D50 = CA * CameraToXYZ che comprende la conversione in XYZ e l’adattamento cromatico.

Questo metodo richiede il calcolo dell’adattamento cromatico perché opera il bilanciamento su dati XYZ (contrariamente al metodo precedente).

A questo punto si hanno i dati XYZ D50 per ogni pixel.


F – Applicazione delle modifiche di utente e di profilo

1
Se ci fosse una tavola HueSat 2.5 D verrebbe applicata ora (ma nel profilo Adobe Standard non c’è, c’è solo nei profili creati o modificati dall’utente con DNG PE).

  • I dati XYZ D50 vengono convertiti in RGB RIMM e questi in HSL.
  • Se le tavole sono due si interpolano e si ottiene una singola tavola 2.5D.
  • Vengono applicate le correzioni (spostamenti 2.5D) in HSL.
  • I dati HSL sono riconvertiti in RGB RIMM e in XYZ D50.

2
Se non esiste un set mxl di controlli utente (per esempio perché è la prima volta che l’immagine viene aperta) i cursori vengono presentati tutti a 0, meno Brightness (50) e Contrast (25). La curva tonale viene presentata con “Medium Contrast”.

Se è presente un set di controlli utente xml da applicare, vengono applicati  in qualche ordine che Adobe non specifica.

3
I dati sono convertiti in RGB RIMM e in HSL. Qui si applica la tavola HSL 3D Look (che nel profilo Adobe Standard c’è) e contiene hue twist. I dati sono poi riconvertiti in RGB RIMM.


G – Applicazione  della curva tonale

Come indicato dal profilo, si applica la curva tonale standard non modificata.


H – Workflow e compensazione monitor

I dati RGB RIMM sono convertiti in uno dei quattro profili ICC di workflow (per esempio Adobe RGB) con intento di rendering colorimetrico relativo. Se il workflow prevede ProPhoto viene semplicemente applicato il gamma 1.8 ai valori RGB RIMM.

I dati RGB convertiti nel profilo ICC di workflow sono i dati RGB visualizzati sia come numeri sia nell’istogramma.

Infine viene fatta la compensazione monitor e l’immagine viene presentata all’utente in attesa di modifiche, o di apertura in Photoshop.


I – Interventi dell’utente

Se l’utente modifica qualche controllo, si riparte dal punto F2.

I seguenti quattro controlli, se impostati al loro default,  mantengono la curva tonale presente nel profilo, altrimenti la modificano

  • Brightness (default 50)
  • Contrast (default 25)
  • Point Tone Curve (default Medium Contrast)
  • Parametric Tone Curve (default lineare)

 

Torna all'indice di Camera Raw e Lightroom

Mauro Boscarol

20/7/2010 alle 12:10

Parole chiave , , , , , , ,

Visitato 1,637 volte, negli ultimi 7 giorni 1 visite

Vuoi fare un commento a questo post?

Devi essere collegato per scrivere un commento.