Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Prima, però, è bene capire come funziona il sensore di una fotocamera digitale.
Tralascerò i sensori Foveon e i dettagli sui Super CCD di Fujifilm, perché non li
conosco e perchè sono meno usati dei più diffusi CCD e CMOS. Per degli esempi, mi
servirò del programma dcraw, un software a linea di comando scritto in C e quindi
con una portabilità massima, anche nel tempo: probabilmente quando Adobe Camera
Raw non potrà più essere eseguito sui PC del futuro, sarà sempre possibile compilare
il codice di dcraw.
Cos'è un sensore
CCD o CMOS si basano sulla capacità che alcuni materiali hanno di reagire
all'esposizione alla luce, in particolare alla caratteristiche che hanno alcuni
semiconduttori di far muovere cariche elettriche se colpite da fotoni. Senza
addentrarmi in dettagli di fisica e di microelettronica (gli esami dell'università sono
lontani), possiamo semplificare la cosa dicendo che un sensore fotografico non è
altro che una matrice di punti in grado di leggere la luce e restituire, per ciascun
punto, un segnale elettrico direttamente proporzionale all'intensità della luce letta:
tale relazione di proporzionalità è lineare, cosa questa molto importante per quanto
si vedrà più avanti.
Visione "felina"
Una cosa che forse non tutti sanno è che i sensori, presi a sé stanti, non sono
sensibili ai colori. La cosa può soprendere, perché giurereste che la vostra
fotocamera digitale tira fuori immagini a colori, e nella maggior parte dei casi i colori
sono anche fedeli alla realtà. Eppure è così: i fotodiodi che costituiscono la matrice
del sensore sentono solo l'arrivo dei fotoni, non la loro lunghezza d'onda, per cui il
segnale che restituiscono è pura luminosità. Un po' come gli occhi dei gatti, le cui
retine sono povere di coni, che presiediono alla percezione dei colori e dei contrasti, e
ricche di bastoncelli, che invece sono molto sensibili alle variazioni di luminosità,
anche piccole. Anche negli occhi umani i coni sono molti meno dei bastoncelli (in un
rapporto di 1 a 50), ma nell'occhio del gatto questo rapporto è molto più basso.
Nei sensori, in pratica, i coni non ci sono affatto (o meglio nei sensori CCD o CMOS; il
Foveon prende il nome proprio dalla fovea, una zona della retina priva di bastoncelli).
In pratica ogni diodo legge la luminosità che passa attraverso un filtro colorato, del
colore assegnato dalla posizione del pattern di Bayer; poiché i tre colori primari
hanno lunghezze d'onda ben distinte, sono facilmente filtrabili (il rosso filtra molto
bene blu e verde, ecc...), in pratica ogni fotodiodo legge il valore di luminosità di un
solo colore.
In pratica, il primo elemento ha solo informazioni sul rosso, il secondo solo sul verde,
il terzo solo sul blu, il quarto solo sul verde, ecc... Come si può ben vedere il numero
di elementi associati al verde è molto più alto (il doppio, praticamente) di quelli
associati al blu o al rosso. Questo perché l'occhio umano è particolararmente
sensibile alla lunghezza d'onda del verde. Di conseguenza il canale migliore di
un'immagine proveniente da un sensore è il verde, avendo meno punti in cui tale
colore deve essere interpolato.
C'è un altro problema: i nostri occhi, come le pellicole, hanno una sensibilità che
varia con l'intensità della luce: in pratica sono tanto più sensibili a differenze di
luminosità quanto più le scene osservate sono poco illuminate, mentre tendono ad
non rilevare diffeenze anche notevoli quando la scena osservata è molto luminosa:
questo è un comportamento tipicamente logaritmico. Questa risposta non lineare dei
fotorecettori della retina permette la percezione di un vastissimo spettro di livelli di
segnale. I sensori, invece, percepiscono i livelli di luminosità in maniera
proporzionale all'energia che ricevono: tanto più è forte la luce che ricevono, tanto
più forte sarà il segnale: in pratica, il sensore ha un comportamente lineare: ancora
più in dettaglio, i sensori praticamente contano i fotoni che arrivano suoi fotoricettori
e danno un segnale elettrico in uscita proporzionale a questo numero; il segnale
d'uscita quindi è proporzionale all'esposizione.
Ciò significa che se questo segnale elettrico, a valle dei convertitori A/D, venisse
codificato con 12 bit per rappresentare 4096 livelli, il livello 2048 rappresenterebbe la
metà dei fotoni raccolti dal livello 4096. Il problema, però, è che gli occhi non
percepiscono la differenza tra il livello 2048 e il livello 4096 come il doppio.
Guardando l'istogramma dei segnali catturati dal sensore dopo la codifica in 12 bit,
troveremmo che il grafico è fortemente concentrato sulla sinistra, cioè sui livelli più
bassi, mentre sui livelli più alti, essendo i livelli molto distribuiti, l'istogramma
risulterà molto basso. Questo problema viene solitamente risolto applicando una
curva correttiva, solitamente di tipo esponenziale, di questa forma:
gamma ha un valore pari a 2.2 per lo spazio colore sRGB ed in pratica è la variabile
che lega la luminanza dei pixel.
Ancora una volta, dcraw ci viene incontro per degli esempi: con lo switch -4, dcraw
permette di salvare i file raw come "linear PPM" o "linear PSD", cioè senza la
correzione della curva che approssima la funzione esponenziale, che solitamente
viene messa nell'intestazione del file raw, in maniera tale che il software di
conversione possa aggiustare i toni: questo è l'esempio dell'output di dcraw, con e
senza switch -4.
Come è evidente, l'istogramma è tutto spostato verso le ombre, nel secondo caso.
Ovviamente tutto si può correggere, e la curva necessaria per correggere la
"linearità" del sensore è illustrata nella figura che segue. Forse è anche meglio che
non l'output di dcraw, che invece applica la curva della macchina, in quanto le luci e
le ombre sono regolate da chi ha scattato la foto, e non da uno stupido software. La
curva è una approssimazione di una curva del tipo Y=K*x^(1/gamma) con
gamma>1.
E poi?
La differenza tra un file raw e un file jpg generato da una fotocamera digitale sta
proprio qui: un file raw è esattamente quanto il sensore ha letto, con l'aggiunta di
una ricca intestazione che memorizza la curva di correzione e altri parametri utili alla
ricostruzione del file, demandando queste complesse operazioni ad un pc con
l'adeguato software di conversione; per il jpg, tutte queste impostazioni devono
essere utilizzate, al momento dello scatto, per generare immagini demosaicizzate,
corrette in termini di gamma, correttamente rese nitide da algoritmi di maschere di
contrasto, applicato il giusto profilo colore e applicata la giusta saturazione,
convertita a 8 bit/colore (downsampling), compressa con l'algoritmo DTC e...
Insomma, il firmware della fotocamere dovrebbe fare un bel po' di cose, tutte
insieme e possibilmente velocemente. Per quanto buoni siano i moderni processori di
immagini (ad esempio il DIGIC II di Canon), non saranno mai flessibili come il
software che gira un processore di un PC.
Oltre al fatto che ciò che produce le immagini JPG (al di là della compressione) sarà
sicuramente meno flessibile, sulle immagini jpg, meno ricche di informazioni, non si
potranno più apportare modifiche senza danneggiare ulteriormente le immagini; col
file raw, invece, tali modifiche potranno essere applicate semplicemente come si
farebbe sulla fotocamere prima dello scatto, solo che comodamente seduti davanti ad
un pc e dopo aver scattato.