Immagini digitali - Setificio Informatica

Transcript

Immagini digitali - Setificio Informatica
Immagini digitali
Luca Mainetti, Matteo Agosti, Roberto Gonella
1
INDICE
1. La teoria del colore ...............................................................................................................................................3
2. La formazione del colore e dell’immagine digitale ................................................................................................7
3. I formati GIFe PNG .............................................................................................................................................12
4. Il formato JPEG ..................................................................................................................................................16
5. I formati usati dalle fotocamere………………………………………………………………………………………...21
Riferimenti bibliografici ............................................................................................................................................23
2
3. I formati GIF e PNG
Segui questa lezione e sarai in grado di comprendere ed utilizzare il formato GIF per le immagini digitali. Inoltre
familiarizzerai con gli algoritmi di compressione delle immagini digitali, iniziando con una tecnica semplice. E’
importante se vuoi realizzare delle iconcine, anche animate, per le tue pagine web. Nell’ultima parte della
lezione verrà fornita una breve introduzione al formato PNG, una possibile evoluzione del formato GIF.
Il formato GIF (Graphic Interchange Format) venne introdotto nel 1987 dalla CompuServe Corporation allo
scopo di realizzare uno standard interno per l’interscambio di immagini tra i prodotti software che l’azienda di
Columbus (Ohio, USA) allora realizzava. Certamente i tecnici di CompuServe non potevano immaginare che le
loro idee avrebbero avuto un grande successo ancora vent’anni dopo, con il web. Per la precisione,
CompuServe definì due differenti formati: il primo, noto come GIF87a, supporta immagini con una profondità di
colore di 8 bit, cioè ad un massimo di 256 colori; il secondo, divulgato due anni dopo e noto come GIF89a,
aggiunge al precedente alcune caratteristiche come le animazioni, le trasparenze e l’interlacciamento. Non vi
sono differenze apprezzabili dall’occhio umano tra un’immagine GIF87a e la corrispondente GIF89a.
GIF87a
GIF89a
L’utilizzo di una “palette” di soli 256 colori pone certamente un limite qualitativo se si intende utilizzare il formato
GIF per rappresentare foto realistiche. Infatti, se si cerca di tradurre una foto digitale a milioni di colori (24 bit per
pixel) nella corrispondente immagine GIF (8 bit per pixel), il processo di riduzione ottimizzata dei colori
(dithering) può introdurre artefatti nell’immagine risultante, ottenendo un’impressione di “grana-grossa”.
Foto originale a 24 bit per pixel
Foto a 8 bit per pixel ottenuta con dithering
I formati GIF87a e GIF89a fanno uso di una particolare tecnica di compressione che prende il nome LZW,
algoritmo inventato nel 1984 dai ricercatori Abraham Lempel, Jacob Ziv e Terry Welch. LZW è una tecnica di
compressione dell’immagine senza perdita d’informazione, cioè il peso dell’immagine viene ridotto prestando
12
attenzione a che non venga perso alcun elemento informativo sul colore dei pixel costituenti. Se immaginiamo
che i pixel che formano un’immagine digitale siano codificati con numeri interi (che ne rappresentano uno
specifico codice colore) e siano letti dall’algoritmo di compressione LZW a partire dall’angolo superiore di
sinistra, percorrendo per righe orizzontali l’immagine, fino all’angolo inferiore di destra, per comprimere il
contenuto di un’immagine l’algoritmo LZW sostituisce sequenze di codici di pixel già note con codici singoli;
aggiunge ogni nuova sequenza ad una tabella di codifica (dizionario). Segue una descrizione dell’algoritmo
LZW.
Inizializzazione: tabella con tutti i codici di lunghezza 1
S = codice successivo in input
Ripeti fino all’ultimo codice in input
C = codice successivo in input
S+C è presente nella tabella?
Se sì, allora S = S+C
Se no, allora
Manda in output il codice associato a S nella tabella
Aggiungi S+C alla tabella (crea un nuovo codice)
S=C
Manda in output il codice associato a S nella tabella
Con l’animazione che segue si mostra un caso d’uso dell’algoritmo LZW sulla sequenza di codici di 17 pixel
“01012101010000003”. In 18 iterazioni l’algoritmo LZW riesce a dimezzare l’informazione necessaria per
memorizzare la sequenza di pixel.
Iterazione 1
Iterazione 2
Iterazione 3
Iterazione 4
Iterazione 5
Iterazione 6
13
Iterazione 7
Iterazione 8
Iterazione 9
……
Iterazione 10
Iterazione 18
Dalle caratteristiche dell’algoritmo LZW si può dedurre che quanto più è casuale l’informazione di colore
contenuta nell’immagine, tanto più sarà minore la compressione ottenuta, poiché inferiore sarà la probabilità di
incontrare sequenze di pixel già note. Ciò è illustrato dalle sei immagini che seguono, tutte della medesima
dimensione in termini di pixel di larghezza e di altezza, ma, come si può leggere, di pesi differenti una volta
compresse con l’algoritmo LZW e codificate in formato GIF.
Un singolo file GIF89a può codificare più di un’immagine; se le immagini contenute vengono disegnate
rapidamente nel tempo si ottiene un effetto di animazione (GIF animate).
14
File “time_ani.gif”
La struttura logica del formato GIF chiarisce in quale modo più immagini digitali possano essere memorizzate
nel medesimo file, senza che le informazioni si confondano.
Header
logical screen descriptor
width, heigh, # color
background color
global color table
Image 1
local image descriptor
local color table
image data
Image 2
Image 3
.............
.............
Il formato GIF89a può fare uso della tecnica di “chroma key” per realizzare zone di trasparenza nelle immagini.
Un particolare colore (detto colore chiave, chroma key), ad esempio il colore dello sfondo (background)
dell’immagine, viene sostituito con altri colori, rendendo trasparente l’immagine stessa.
GIF con sfondo
GIF con sfondo trasparente
Il formato GIF89a supporta anche le immagini interlacciate, nelle quali le linee di pixel non sono memorizzate in
una sola “passata” ma in più scansioni, ad esempio, prima tutte le linee dispari (la prima, la terza, la quinta, ecc.)
e poi tulle le linee pari (la seconda, la quarta, la sesta, ecc.). Quando si visualizza una GIF interlacciata, si
ottiene un effetto di caricamento progressivo, che può essere utile se l’immagine viene scaricata dal web
utilizzando una linea di comunicazione particolarmente lenta.
Il formato PNG (Portable Network Graphics) è stato creato nel 1995 da un gruppo di autori indipendenti allo
scopo di fornire una soluzione alternativa al popolare formato GIF che in quegli anni aveva visto l’introduzione di
costi di licenza per il suo impiego (i detentori del brevetto GIF decisero improvvisamente di chiedere un
pagamento per ogni programma che utilizzasse il loro formato). PNG è superficialmente simile a GIF, in quanto
è capace di immagazzinare immagini in modo lossless, ossia senza perdere alcuna informazione, ma è
decisamente più efficiente con immagini foto realistiche (che contengono troppi dettagli per essere compresse in
poco spazio). Essendo stato sviluppato molto tempo dopo, non ha molte delle limitazioni tecniche del formato
GIF: può memorizzare immagini in colori reali (mentre GIF è limitato a soli 256colori) ed ha un canale dedicato
per la trasparenza (canale alfa). Esiste inoltre un formato derivato, MNG (Multiple-image Network Graphics), che
è simile al formato GIF animato. Negli ultimi anni la grafica per il web sta esplorando il formato PNG come
soluzione completamente sostitutiva al formato GIF.
15
Riferimenti bibliografici
S. Ihrig, E. Ihrig, “Immagini Digitali - Trattamento e Stampa”, McGraw-Hill 2° edizione, 1999
J. D. Murray, W. vanRyper, “Encyclopedia of Graphics File Formats”,O'Reilly; 2° edition, 1996
23