Grafica e gestione dei colori in gnu/linux

Fotografia Informatica
Spazio cromatico CIE 1931

Era un bel po' che volevo scrivere su questo argomento... La gestione dei colori (CM o CMS, Color Management System) è una famiglia di tecnologie intese a rappresentare in modo oggettivo e preciso i colori tra dispositivi diversi, come macchine fotografiche digitali, scanner, monitor e stampanti, presupposto per la realizzazione di lavori di alta qualità.
Queste tecnologie sono arrivate da un bel po' di tempo anche nel mondo gnu/linux, ed anche i pinguini fotografi possono goderne, ed avere finalmente il santo graal della camera oscura digitale: una stampa della propria foto i cui colori siano uguali ai colori sullo schermo!
In questo post parliamo allora di programmi che supportano la gestione del colore: principalmente ArgyllCMS, LProf, digiKam, Gimp ed altri.

Introduzione
Per fare grafica e foto ritocco in modo preciso è importante che il nostro monitor ci rappresenti i colori in modo oggettivo, in modo che un'area verde della nostra fotografia appaia verde allo stesso modo anche sullo schermo, e che appaia ancora verde nello stesso modo nelle nostre stampe. Se avete mai provato a stampare una delle vostre foto preferite sapete cosa intendo: è molto difficile riprodurre sulla carta gli stessi colori!

Perché questo sia possibile ci serve una descrizione precisa di come i dispositivi di input (macchine fotografiche, scanner) e di output (monitor, stampanti) rendono i vari colori, insieme ad una descrizione dello spettro dei colori che possono rappresentare, il cosidetto gamut.
Questa descrizione è chiamata "profilo ICC del dispositivo", e permette ai programmi che supportano la gestione del colore (Color Management System) di rendere adeguatamente i colori sui vari dispositivi.
Il risultato è, semplicemente, in modo trasparente e senza alcun ulteriore sforzo dell'utente, che i colori catturati dalla nostra macchina fotografica saranno restituiti fedelmente sul nostro schermo e dalla nostra stampante. Fantastico!

In un mondo perfetto questo è sempre possibile, ma spesso le stampanti hanno un gamut meno esteso di quello dei monitor, e dunque non sono in grado di riprodurre alcuni colori. Anche in questo caso, la gestione dei colori ci viene in aiuto, segnalandoci in anticipo i colori che non possono essere stampati, in modo che possiamo correre ai ripari per tempo.

È molto diffusa la convinzione che per fare fotoritocco serio sia necessario avere un computer Apple, ma spesso la gente non sa spiegarne il perché. In realtà le ragioni sono le più semplici: perché l'hardware è di buona qualità e perché il sistema operativo supporta nativamente la gestione dei colori.
Assumendo che i nostri monitor e stampanti siano abbastanza buoni, possiamo avere un sistema di gestione dei colori coerente anche in MS Windows ed in GNU/Linux, semplicemente usando software adeguati.
Se mi leggete da un po' lo saprete già: non uso MS Windows, e dunque non lo conosco e non ne so parlare! Quanto scrivo nel seguito sarà riferito esclusivamente a GNU/Linux!
La distro di riferimento di questo articolo è Mandriva 2008.1.

Calibrare il monitor
La prima cosa da fare è calibrare il monitor, che è l'elemento chiave della catena: se il monitor ci restituisce dei colori "sbagliati" ritoccheremo le nostre immagini in modo "sbagliato", e il risultato in stampa sarà inevitabilmente anch'esso "sbagliato". Garbage in, garbage out!

Un monitor calibrato di solito restituisce un'immagine con una temperatura colore di 6500 K (per la fotografia) o 5000 K (per la stampa) e un gamma di 2.2 o 2.4 (mi pare che i sistemi Apple usino un gamma di 1.8). Di solito la temperatura colore va regolata usando i comandi sul nostro schermo.
La calibrazione e la resa dei colori di solito è migliore con i monitor CRT che con gli LCD, per i quali a volte non è neanche possibile cambiare la temperatura colore. Ricordatevene dopo i primi insuccessi con il vostro LCD... se non riuscite ad ottenere risultati soddisfacenti, utilizzate la temperatura colore nativa del vostro monitor!

Per calibrare il monitor abbiamo due vie:

  1. Via economica, solo software: visivamente cerchiamo di individuare le impostazioni corrette. I risultati saranno così così, ma alla fine è gratis.
  2. Via scientifica, oggettiva, software + hardware: utilizziamo uno strumento (un colorimetro) che si occupa di fare le misure per noi. Ci servirà comprare, noleggiare o farci prestare un colorimetro (a volte chiamato spider, "ragnetto") ma i risultati saranno ottimi, precisi e riproducibili.

La via economica ma imprecisa
Per percorrere la prima via usiamo un programma di calibrazione del monitor. Personalmente, vi consiglio di usare monica, che dovrebbe essere disponibile in ogni distribuzione.
Monica ci propone una finestra con alcune zone colorate; cliccando su "Info" leggeremo le istruzioni da seguire per calibrare lo schermo, in modo che tutti i toni di grigio siano distinguibili e che siano resi in modo neutro. Cliccando su "Exit and Save" monica salva le modifiche nello script ~/.monicarc che viene chiamato al login alla lettura del file ~/.bash_profile, per ripristinare la regolazione del gamma. Monica usa il piccolo programma xgamma, che modifica il gamma dello schermo.

In KDE possiamo lanciare kcontrol, il Centro di Controllo KDE, e nella sezione Periferiche -> Display andremo a regolare il gamma nella scheda Gamma dello Schermo, in modo che tutte le gradazioni di grigi e di colori siano distinguibili. I risultati saranno confrontabili con quelli di monica, anche se mi è sempre riuscito più semplice usare monica.

Questa calibrazione visuale è per forza di cose grossolana, visto che i nostri occhi non sono affatto degli strumenti di misura oggettivi, ma sono influenzati da tanti fattori ambientali. In ogni caso meglio uno schermo calibrato grossolanamente che non uno schermo non calibrato affatto! Anche se meno piacevole a prima vista, ci permetterà di distinguere più sfumature e più colori nelle vostre foto.

La via precisa: il colorimetro Huey e ArgyllCMS o LProf
Per fare le cose per bene ci serve un colorimetro e un software per generare un profilo del monitor, che successivamente andremo a caricare sulla scheda video usando l'utilità xcalib. Come software il meglio attualmente disponibile è rappresentato da ArgyllCMS e da LProf.

LProf è semplice e basato su un'interfaccia grafica intuitiva anche per chi è meno esperto, e fornisce anche una procedura guidata per creare un profilo grossolano "visuale", come abbiamo fatto prima con monica.

ArgyllCMS è piuttosto sofisticato, fornisce diverse utilità che funzionano interamente da riga di comando e consentono di ottenere risultati professionali. Personalmente ho apprezzato la documentazione disponibile, ed alla fine l'ho preferito a LProf.

OK, abbiamo il software, che dispositivo possiamo usare? Qui vengono le note dolenti... purtroppo sembra che nessun produttore di colorimetri supporti gnu/linux, e addirittura qualcuno, come Colorvision, si è dichiarato esplicitamente ostile nei confronti degli sviluppatori open source che hanno richiesto le specifiche per sviluppare driver indipendenti.
Morale della favola, prima di ogni acquisto informatevi se lo strumento su cui avete messo gli occhi è supportato. Sul sito di ArgyllCMS c'è una lista aggiornata dei colorimetri supportati.

Se avete installato MS Windows in un'altra partizione c'è una terza via, creare il profilo in Windows andare a recuperare il file *.icc o *icm creato e usarlo in gnu/linux... non è una soluzione elegante, ma ho letto che per qualcuno ha funzionato.
Qualcuno ha addirittura fatto delle misure per verificare l'accuratezza di questo metodo:
http://linux.vilars.com/dotclear/index.php?post/2006/10/21/4-are-loaded-...

Personalmente ho comprato un colorimetro economico, un Huey, prodotto dalla Pantone (che prima era Gretag-Machbet ed ora è X-rite), è costato relativamente poco (per essere un colorimetro) e funziona perfettamente sia con ArgllCMS che con LProf. Non è necessario installare nulla: basta collegarlo, e funziona. Ve lo raccomando.

Veniamo alla calibrazione. Nel seguito parlerò della procedura di calibrazione con ArgyllCMS con il mio Huey, fondamentalmente perché ArgyllCMS è meglio documentato di LProf, e perché ho trovato su Linux Photography (ottimo sito veramente!) un tutorial che mi ha introdotto rapidamente alla procedura da utilizzare per ottenere un profilo del monitor. Molto di quel che trovate in questa pagina è tratto da lì e dalla documentazione di ArgyllCMS, ma a differenza di me Joel Cornuz (l'autore) ha usato un Spyder 2 Express prodotto dalla ColorVision. Anche altri hanno riportato successo con questo dispositivi, come l'autore di questa pagina:
http://www.vitorrodrigues.com/blog/2008/10/27/monitor-calibration-in-lin...

Se usare i profili colore è facile e dopo una prima configurazione non richiede nessun'altra attenzione particolare, non si può dire lo stesso della creazione dei profili. È una procedura complessa, e per questo prima di cominciare, diamo uno sguardo alla procedura, passo passo:

  1. si stabilisce la temperatura colore e il gamma con cui si vuole lavorare
  2. si regola lo schermo in modo da portarlo in uno stato "standard"
  3. il colorimetro fa alcune misure su alcune aree colorate generate da programma
  4. vengono generati alcuni campioni di colore "su misura" del nostro schermo
  5. i campioni vengono mandati allo schermo e misurati dal colorimetro
  6. al termine viene prodotto un file ICC che contiene il profilo dello schermo
  7. viene caricato il profilo nella scheda video

Il modo più semplice (leggi: impreciso) per ottenere un profilo ICC del proprio monitor con ArgyllCMS è usando il comando dispcal in questo modo:
dispcal -v -q l -y l -o profilo
"-q l" dice che vogliamo un profilo di bassa qualità (richiede meno tempo, circa un quarto d'ora), "-y l" dice che il monitor da misurare è LCD, "-o profilo" dice che vogliamo che venga generato direttamente il profilo ICC.

A questo punto dispcal chiede di fissare lo strumento al display, e ci mostra un menù di scelta. Le prime 4 voci servono per aiutarci a impostare il monitor in modo "standard". Se scegliamo una di esse, dispcal comincia a fare misure periodicamente, e mentre noi regoliamo i parametri del monitor, ci mostra i risultati delle nostre modifiche, in modo che possiamo ottenere i risultati voluti.
Fatta la regolazione del monitor, scegliamo la sesta voce del menù, e avviamo la calibrazione vera e propria. Dispcal produce alcuni campioni di colore e fa delle misure attraverso il colorimetro.

Dopo circa un quarto d'ora dovremmo ritrovarci nella directory corrente il nostro primo profilo del monitor, profilo.icc. Per caricarlo sulla scheda video useremo xcalib:
xcalib profilo.icc

Se come me avete provato il software per Windows incluso con l'Huey ci avrete sicuramente pensato... ma se per fare questo profilo grossolano ArgyllCMS ha dovuto misurare oltre 60 campioni di colore, il profilo prodotto dal software a corredo con l'Huey sarà veramente mediocre, visto che non misura più di una trentina di campioni, e non ci impiega neanche 10 minuti!!! Che dire? Un punto a favore di ArgyllCMS e Linux!

Se non abbiamo esigenze troppo sofisticate, questo profilo ICC potrebbe essere sufficiente. Se invece vogliamo più controllo o avere misure più precise ci vorrà più tempo.
Io ad esempio ho constatato che il mio monitor LCD non supporta correttamente temperature colore diverse da quella nativa (circa 5400 K) e valori di gamma lontani dal predefinito 2.4. Addirittura a volte comparivano "strane" dominanti magenta! OK, penso che appena possibile lo cambierò con uno monitor LCD più serio, ma nel frattempo ho creato un profilo colore che mi restituisse le immagini migliori possibile.

Un metodo più preciso ed avanzato
Ecco la procedura che ho seguito per ottenere questo profilo più preciso e personalizzato.

Prima di tutto ho regolato il monitor e generato il file di calibrazione con il comando dispcal:
dispcal -v -q h -y l -G 2.4 mioprofilo
"-q h" dice che voglio un profilo di alta qualità, "-G 2.4" imposta il valore di gamma desiderato.
Questo dovrebbe generare un file mioprofilo.cal nella directory corrente.

Poi bisogna generare dei campioni da misurare nel passo successivo, con il comando targen:
targen -v -d 3 -e 16 -f 500 mioprofilo
"-f 500" genera 500 campioni (ma uno ne può usare di meno, o anche di più, dipende dalla precisione desiderata).
Occhio che per generare i campioni è necessario che il file *.cal generato al punto precedente sia nella directory corrente.
Dopo qualche secondo dovremmo ritrovarci con un file mioprofilo.ti1.

Ora andiamo a fare le misure vere e proprie con dispread:
dispread -v -y l -k mioprofilo.cal mioprofilo
Adesso dispread manda a video i campioni calcolati e raccoglie le misure con il colorimetro. La procedura dovrebbe impiegare una mezz'ora, al termine della quale ci ritroveremo un file mioprofilo.ti3.

Finalmente generiamo il profilo colore con il comando colprof:
colprof -v -q h -as -A "Produttore" -M "Modello" -D "Commento" mioprofilo
Le opzioni "-A", "-M" e "-D" sono per aggiungere al profilo ICC nome del produttore, modello e un commento. Un paio di minuti dopo dovremmo finalmente avere il nostro file ICC mioprofilo.icc.

Vi consiglio di mettere i profili ICC in ~/.color/icc, visto che molti programmi vanno a cercarli proprio là.

Caricheremo il profilo sulla scheda video con il comando xcalib:
xcalib mioprofilo.icc
(per rimuovere profili caricati in precedenza usate "xcalib -c").

Se vogliamo che il profilo venga caricato al login, basterà aggiungere il comando al nostro file ~/.bash_profile.
In alternativa si può usare anche il metodo descritto in questa pagina (il cui autore ha seguito la terza via, creando il profilo in Windows e usandolo in linux), che però funziona solo in KDE:
http://www.photonaturae.it/articoli/profilazione/profilazone.html
Infine è possibile caricare automaticamente il profilo ICC del monitor anche all'avvio del display manager, come spiegato in questa pagina, che mostra come fare con Gdm:
http://www.freedreamer.it/2006/11/profili-colore-per-il-pinguino/

Molti consigliano di aggiornare mensilmente il profilo del monitor, visto che nel tempo potrebbe modificarsi.

In modo simile, con strumenti hardware adeguati (e costosi!) è possibile realizzare anche profili di stampanti. Visti i prezzi degli strumenti di calibrazione in commercio, è senz'altro più vantaggioso far riferimento a uno dei tanti servizi di profiling delle stampanti che si possono trovare in rete. Loro ti danno un file da stampare, tu lo stampi e glielo mandi, loro fanno le misure e ti mandano indietro il profilo della tua stampante. Ricorda che il profilo è specifico dell'accoppiata inchiostro-carta! Se cambia la carta cambia anche il profilo!

Usare i profili colore
Ok, ora che il nostro monitor è calibrato, dobbiamo semplicemente dire ai programmi di grafica che usiamo qual è il profilo ICC del nostro monitor, che profilo associare alle immagini con cui lavoriamo, e qual è il profilo della nostra stampante se vogliamo stampare le nostre foto a casa, o qual è il profilo utilizzato dal laboratorio di stampa dove porteremo le nostre foto.
Un'ultima decisione che ci tocca è stabilire che politica vogliamo seguire quando bisogna rendere in output un colore che è fuori gamut ("obiettivi di resa"). È sempre un compromesso, ma la maggior parte delle volte vorremo scegliere la modalità percettuale.

Un paio di parole sul profilo da associare alle immagini. La quasi totalità delle immagini che vengono fuori dalle digicam hanno associato il profilo sRGB, che definisce uno spazio colore che va molto bene per la presentazione delle immagini sullo schermo e nel Web, ma è piuttosto limitato se confrontato al gamut dello spazio colore del profilo AdobeRGB, e per questo potrebbe essere desiderabile lavorare nello spazio AdobeRGB.

Potete vederlo nei due grafici qui sotto: lo spazio Adobe RGB (a sinistra) copre un'area molto più ampia (in particolare nel verde) rispetto allo spazio sRGB (a destra).
Grafico Spazio colore Adobe RGB Grafico Spazio colore sRGB

Ma le immagini in AdobeRGB non vengono visualizzate correttamente sui monitor non calibrati, e forse si dovrebbero convertire in sRGB prima di metterle sul Web.
Probabilmente ho torto, ma al momento lavoro in sRGB perché non trovo giustificato lavorare con uno spazio colore esteso come AdobeRGB, visto che non uso una digicam reflex ma una "compatta" e che scatto in jpeg; devo ancora fare qualche prova seria per verificare se questa scelta sia giustificata.
Vi suggerisco di leggere queste interessanti pagine in proposito, e poi di decidere secondo le vostre esigenze e secondo il vostro equipaggiamento:
http://www.cambridgeincolour.com/tutorials/sRGB-AdobeRGB1998.htm
http://lucieonde.blogspot.com/2007/10/adobe-rgb-vs-srgb.html
http://www.nital.it/experience/colore-capturenx.php

Vi starete chiedendo: Ma dove li prendo i profili AdobeRGB e sRGB? Da qui:
http://www.adobe.com/digitalimag/adobergb.html
http://www.color.org/srgbprofiles.xalter

Cominciamo da digiKam, il programma libero che uso per gestire la mia collezione di fotografie, ottimamente integrato in KDE e che ad ogni nuova versione diventa sempre più competitivo con alternative commerciali come Apple Aperture e Adobe Lightroom (la nuova versione di digiKam sta per approdare anche su Windows!).
Per definire i nostri profili colore andiamo al menù Impostazioni -> Configura digiKam, cerchiamo "Gestione del Colore" nella colonna a sx e abilitiamo la gestione del colore. Successivamente indichiamo la cartelle dei profili dei colori e almeno lo spazio di lavoro. Se abbiamo caricato il profilo del nostro monitor tramite xcalib, non è necessario spuntare la voce "Usa la vista di gestione dei colori" (non ha alcun effetto).
Possiamo anche stabilire cosa fare quando si apre un'immagine nell'editor di digiKam, in modo che tutte le foto su cui lavoriamo vengano convertite automaticamente nel nostro spazio di lavoro.
Le impostazioni di gestione del colore in ShowFoto sono identiche.
Un altro articolo che descrive la gestione dei colori in digiKam è questo:
http://linux.vilars.com/dotclear/index.php?post/2007/01/03/6-color-manag...

Passiamo a Gimp, l'ottimo programma GNU di manipolazione di immagini, che dalla versione più recente ha cominciato a supportare l'elaborazione di immagini a 32 bit.
Anche qui, apriamo la finestra Preferenze dal menù File, andiamo alla sezione Gestione del colore, e impostiamo "Modalità di Operazione" su "Display con gestione del colore" e andiamo a indicare i profili che vogliamo usare per lo spazio di lavoro (indicato con "Profilo RGB"), per la stampa e per il monitor. Anche qui possiamo stabilire quale debba essere il comportamento del programma all'apertura di un file privo di profilo colore o con un profilo colore diverso dal predefinito. Le opzioni rimanenti sono piuttosto chiare.

Anche ImageMagick, il coltellino svizzero dell'elaborazione immagini dal terminale, è in grado di lavorare con i profili colore.
Possiamo estrarre un profilo colore incorporato in una immagine così:
convert -size 64x64 immagine.jpg icc:profilo.icm
Possiamo rimuovere un profilo icc incorporato così:
convert input.jpg +profile icm output.jpg
Possiamo assegnare un profilo icc ad una immagine che ne è sprovvista ma che sappiamo essere in quello spazio colore con un comando del tipo:
convert input.jpg -profile profilo.icm output.jpg
Mentre possiamo convertire un'immagine che ha un profilo icc incorporato in un altro spazio colore con il comando:
convert input.jpg -profile profilo.icm output.jpg
Per approfondire:
http://www.imagemagick.org/Usage/formats/#profiles

Anche il programma di grafica vettoriale Inkscape supporta i profili colore, e li cerca in ~/.color/icc/. Per impostare il profilo del display e della stampante bisogna aprire la finestra Preferenze di Inkscape dal menù File e andare alla sezione gestione del colore.

Nel programma di desktop publishing Scribus configureremo la gestione del colore aprendo la finestra Preferenze dal menù File, in cui troveremo una sezione Gestione Color del tutto analoga a quelle già citate. Anche Scribus cerca i profili ICC in ~/.color/icc/.

In modo simile supportano la gestione dei colori anche Rawstudio, Krita, Cinepaint, F-spot, Lightzone e Photoprint, un utile programma per la stampa di fotografie digitali.

In questa carrellata di progammi che supportano la gestione dei colori, merita di essere menzionato Firefox 3, che, per quel che ne so, dopo Safari è il secondo browser che ha introdotto il supporto alla gestione dei colori. Per abilitarla, digitate about:config nella barra degli indirizzi, e poi inserite color_management come filtro. Troverete due chiavi: gfx.color_management.display_profile in cui dovrete inserire il percorso del profilo del monitor, e gfx.color_management.enabled che andrà impostato su true con un doppio click. Al riavvio di Firefox 3 la gestione colore sarà attiva. Per verificare, visitate questa pagina:
http://www.color.org/version4html.xalter

Che dire in conclusione? Ormai la gestione dei colori in gnu/linux c'è! Finalmente anche i pinguini possono lavorare con i colori in modo serio e professionale, e, come ormai ci ha abituato il software libero, con un investimento in denaro nullo (l'unico prezzo è un investimento in apprendimento, che non può che essere positivo).
Le ragioni per fare grafica con Mac Os X e con MS Windows diminuiscono sempre di più, almeno per me...

Trackback URL for this post:

http://gerlos.altervista.org/trackback/391
from gerlos.altervista.org on Mar, 18/11/2008 - 15:24

Questo grafico di cromaticità mostra all'interno del triangolo l'estensione dello spazio colore sRGB. Il punto di bianco corrisponde alla massima emissione di un corpo nero a 6500 K. I colori all'esterno del triangolo possono essere visti dall'occhio uma

from gerlos.altervista.org on Mar, 18/11/2008 - 15:02

Questo grafico di cromaticità mostra all'interno del triangolo l'estensione dello spazio colore Adobe RGB. Il punto di bianco corrisponde alla massima emissione di un corpo nero a 6500 K. I colori all'esterno del triangolo possono essere visti dall'occhi

from gerlos.altervista.org on Mar, 18/11/2008 - 14:59

Lo spazio cromatico CIE 1931, utile per rappresentare su un grafico x, y i colori percepibili dall'occhio umano.
I numeri in blu lungo il bordo dell'area colorata sono lunghezze d'onda della luce, in nanometri. La curva che attraversa la metà del grafico

commenti

ritratto di Danielsan

Complimenti

Questo è il più bel articolo che abbia mai trovato in rete sulla profilazione su GNU/Linux voglio esprimerti i miei complimenti!
Visto che sei molto ferrato sull'argomento volevo chiederti alcune cose, quando si usa il comando "dispcal" si possono effettuare delle "tarature" per portare il monitor a delle condizioni ideali per poi essre profilato e sono le seguenti:

1) Black level (CRT: Offset/Brightness)
2) White Point (Color Temperature, R,G,B, Gain/Contrast)
3) White Level (CRT: Gain/Contrast, LCD: Brightness/Backlight)
4) Black Point (R,G,B, Offset/Brightness)

Io ho provato a fare diverse prove ma mai mi sembra di aver trovato una buona profilazione soprattutto andando a fare un controllo successivo.
Sicuramente sbaglio qualcosa nella "taratura", con um monitor LCD su quali di quei 4 punti bisogna operare prima di far partire i chart di misurazione?

E per concludere, che software hai utilizzato per confronate i profili ICC?
Grazie per l'attenzione,
Daniele

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.