Home > Gestione digitale del colore > Argomenti avanzati > Tecnologia ICC
Matematica del profilo ICC a matrice
In questa pagina viene indicato in dettaglio come il motore di colore ICC utilizza un profilo a matrice per calcolare una conversione di colore. In altre parole vengono indicati in dettaglio gli algoritmi implementati dai profili ICC a matrice. Per comprendere questi algoritmi occorre avere qualche nozione di algebra lineare: matrici, moltiplicazione di matrici, matrice inversa.

Gli algoritmi sono due: il primo (diretto) viene applicato quando il profilo è usato come origine, il secondo (inverso) quando il profilo è usato come destinazione.

Le specifiche ICC obbligano a costruire il profilo ICC a matrice in modo che la conversione di colore sia colorimetrica relativa in cui il bianco dello spazio di origine, viene mandato nel bianco del PCS (nell'algoritmo diretto) e il bianco del PCS nel bianco di destinazione (nell'algoritmo inverso).

In altre parole la matrice è sempre costruita in modo tale che faccia corrispondere R=G=B=255 in L=100, a=b=0. Se la matrice (di un monitor) contenesse semplicemente le coordinate cromatiche dei fosfòri RGB questo non accadrebbe (perché l'algoritmo calcola una corrispondenza precisa, assoluta, tra RGB e Lab).

Dunque la matrice contenuta nel profilo ICC non è quella delle coordinate cromatiche dei fosfòri ma quella adattata cromaticamente (cioè modificata) in modo che l'algoritmo calcoli una corrispondenza relativa. Per avere una conversione colorimetrica assoluta è necessario conoscere come tale adattamento è stato effettuato, cioè quali modifiche sono state fatte alla matrice originale, per poterla ricostruire.

Algoritmo da RGB a XYZ

I dati contenuti in un profilo a matrice servono per implementare questo algoritmo di conversione di un colore RGB (supponendo che i valori RGB siano a 8 bit, cioè possano variare da 0 a 255) a XYZ.

  1. Linearizzare i valori RGB:
    1. Portarli nell'intervallo 0-1 (cioè dividerli per 255);
    2. Applicare ad ognuno la rispettiva funzione gamma;
  2. Calcolare i valori XYZ relativi:
    1. Moltiplicare la matrice per il vettore dei valori RGB linearizzati.

Esempio numerico
Il profilo Adobe RGB, ha gamma 2.2 per ogni canale, e questa matrice

0.6097 0.2053 0.1492
0.3111 0.6257 0.0632
0.0195 0.0609 0.7446

Il colore RGB definito nello spazio AdobeRGB e di cui vogliamo trovare le coordinate XYZ è 220, 254, 20 (un verde).

  1. Linearizzazione:
    1. I valori RGB normalizzati a 0-1, cioè divisi per 255, diventano 0.8628, 0.9961, 0.0784.
    2. Applicando il gamma 2.2, cioè elevando questo valori alla potenza 2.2, otteniamo 0.7227, 0.9914, 0.0037.
  2. Calcolo dei valori XYZ:
    1. Moltiplicando la matrice di Adobe RGB per questo vettore si ottiene X = 0.6447, Y = 0.8454, Z = 0.0772.

La corrispondenza tra RGB e XYZ è relativa (per come è costruita la matrice), il che significa che R=255, G=255, B=255 dovrà corrispondere al bianco di XYZ richiesto dalle specifiche ICC (D50) cioè X = 0.9642, Y = 1, Z = 0.8249.

Infatti il valore del bianco normalizzato è 1 1 1, applicando il gamma rimane 1 1 1. Moltiplicando la matrice per questo vettore si ottiene la somma delle righe, cioè 0.9642, 1, 0.8250 (il valore corretto è 0.82491, errore di approssimazione).

Algoritmo da XYZ a RGB

Se il profilo è di destinazione, la conversione da XYZ a RGB si effettua con questo algoritmo

  1. Calcolare i valori RGB linearizzati:
    1. Moltiplicare l'inversa della matrice per il vettore dei valori XYZ;
  2. Se si ottengono valori RGB minori di 0 o maggiori di 255, cioè fuori gamut, riportarli in gamut con qualche algoritmo;
  3. Delinearizzare i valori RGB linearizzati:
    1. Applicare ad ognuno la rispettiva funzione gamma inversa;
    2. Portare i valori nell'intervallo originale (se è 0-255, moltiplicare per 255).

Esempio numerico
Consideriamo il profilo ColorMatch ha gamma 1.8 e la matrice che si può vedere nella immagine qui sotto.

La matrice inversa è

2.6564 -1.2296 -0.3950
-1.1365 2.0703 0.0195
0.0852 -0.2821 1.4561

Prendiamo il valore X = 0.6447, Y = 0.8454, Z = 0.0772 a cui siamo arrivati nell'esempio precedente e ci chiediamo a quali valori RGB corrisponde nello spazio ColorMatch.

  1. Calcolare i valori RGB linearizzati
    1. moltiplichiamo la matrice inversa per il vettore XYZ, ottenendo R=0.6425, G=1.0191, B=-0.0711.
  2. Riportare i valori in gamut: il secondo valore è superiore a 1 e il terzo è inferiore a 0. Questo significa che questo colore non sta nel gamut RGB di ColorMatch. Dobbiamo prendere qualche misura di gamut mapping. La cosa più semplice che possiamo fare è il clipping (taglio), cioè porre uguali a 1 i valori superiori a 1 e uguali a 0 i valori inferiori a 0. Quindi i valori RGB diventano 0.6425, 1, 0.
  3. Delinearizzare:
    1. Elevando all'inverso del gamma 1.8 si ottiene 0.7821, 1, 0.
    2. Moltiplicando per 255 si ottiene il valore RGB finale, cioè 199, 255, 0.
Intento colorimetrico assoluto
I dati del profilo ICC sono tali che la corrispondenza trovata con gli algoritmi sopra indicati è relativa. Per avere una corrispondenza assoluta è necessario modificare i dati prima di applicare l'algoritmo.

Poichè la matrice è stata adattata cromaticamente, la modifica dei dati consiste nel neutralizzare tale adattamento cromatico, e per questo è necessario conoscere come tale adattamento è stato effettuato, cioè quali modifiche sono state fatte alla matrice originale (per poter tornare indietro).

Questa è una informazione che è stata inserita solo nella versione 4 delle specifiche ICC. I profili conformi alla versione 2 delle specifiche non contengono questa informazione e i motori di colore devono in qualche modo "arrangiarsi" per realizzare una conversione colorimetrica assoluta.

Risorse online

Per questi calcoli conviene utilizzare il foglio Excel RGBtoRGB pubblicato da Charles Cowens nel suo sito web.

Home | Commenti a Mauro Boscarol | Ultimo aggiornamento 19 giugno 2004