Sistemi Multimediali
Marco Gribaudo
[email protected], [email protected]
Formati e compressioni
Formati di immagini
Anche se in memoria le immagini vengono quasi sempre memorizzate come una sequenza di colori RGB, quando queste vengono salvate su file, esse vengono compresse per ridurne lo spazio occupato.
Con il termine formato, si intende la particolare tecnica utilizzata per memorizzare un'immagine in un File.
Formati di immagini
Le immagini possono essere destinate a scopi differenti: per la stampa,
l'archiviaizione, la trasmissione in rete.
Ogni formato e' destinato ad un utilizzo specifico.
Ry
Rx
Formati di immagini
La risoluzione di un'immagine definisce la densita' dei pixel che la compongono.
w
h
Formati di immagini
Una volta acquisita, l'immagine viene codificata con un certo numero di pixel in orizzantale w, ed in verticale h.
Ry
Rx
Formati di immagini
I pixel non sono necessariamente di forma quadrata.
In questo caso si parla di risoluzione orizzontale e di risoluzione verticale.
Calendario 2010
Dy
Dx
Formati di immagini
Le dimensioni di un'immagine determinano invece l'occupazione spaziale dell'immagine prima di essere acquisita o dopo essere stata riprodotta.
Dx. Rx = w Dy. Ry = h
Formati di immagini
Vi e' una semplice relazione tra dimensioni, risoluzione e numero di pixel che compongono un'immagine.
Immagini con Palette
Una dei primi accorgimenti operato per ridurre le dimensioni di un'immagine e' la riduzione del numero di colori.
In questo caso si parla di immagini con Palette.
L'utilizzo di una Palette puo' essere visto come una quantizzazione vettoriale del segnale che rappresenta il colore RGB.
Immagini con Palette
La Palette e' una tavolozza contenente un numero ristretto di colori (solitamente in numero di una potenza di due).
0 1 2 3 4 5 6
Immagini con Palette
In memoria la Palette e' codificata come un array di colori RGB.
0 1 2 3 4 5 6
Immagini con Palette
Il colore di un pixel viene quindi definito da un valore intero: l'indice della riga dell'array in cui e' contenuta la sua definizione RGB.
Immagini con Palette
La Palette puo' essere fissa, oppure variare da immagine ad immagine.
In questo secondo caso il file che codifica l'immagine deve anche prevedere lo spazio per la tabella che specifica i valori RGB di ogni colore.
T 0 1 2 3 4 5
Immagini con Palette
Inoltre, come alternativa al canale alpha, alcune palette dispongono di un colore extra detto trasparenza.
T
Immagini con Palette
Il colore trasparente viene utilizzato per codificare i pixel per cui il canale alpha varrebbe 0. Tutti gli altri colori hanno il canale alpha pari ad 1.
Immagini con Palette
Una palette con un numero non sufficiente di colori ha l'effetto di creare aree ravviciante caratterizzate dalla stessa tonalita. Questo effetto prende il nome di Posterizzazione.
0 1 2 3 4 5 6
Immagini con Palette
Data una Palette P, ed un'immagine RGB, il problema e' quello di approssimare al meglio l'immagine con la Palette.
Immagini con Palette
La tecnica piu' semplice, sfrutta una funzione di distanza tra i colori.
Immagini con Palette
Ad ogni colore p di un pixel, associa l'elemento i della palette che minimizza la distanza tra i due colori.
Immagini con Palette
Questo metodo e' pero' estremamente prono alla posterizzazione.
Si puo' ridurre l'effetto applicando una tecnica di dithering.
con dithering
Immagini con Palette
Il Dithering, mischia i pixel confinanti, allo scopo di limitare la possibilita' di avere aree dello stesso colore confinanti.
Immagini con Palette
Se si ha la possibilita' di usare una Palette diversa per immagine, allora si deve per prima cosa determinare la Palette ottimale in funzione del numero di colori disponibili.
Solitamente si utilizzano tecniche di Clustering, per trovare i colori piu' simili all'interno dell'immagine.
Immagini con Palette
Il k-mean clustering, crea k clusters a partire da una serie di dati.
Palette Colori dei Pixel
Immagini con Palette
Nell'operazione di creazione di un Palatte, k
corrisponde al numero di colori nella Palette, ed i dati sono i colori dei pixel dell'immagine originale.
Profondita' di colore
Viene chiamata profondita' di colore il numero di bit d necessario per codificare un'immagine.
Solitamente per immagini dotate di palette, d <= 8.
In questo caso la palette e' dotata di 2d colori diversi.
Profondita' di colore
Un'immagine con d=16 e detta immagine High Color.
In questo caso il colore viene codificato in RGB, con 5 bit per il rosso, 6 bit per il verde e 5 bit per il blu.
Ormai il sistema e' caduto in disuso, ed e' interessante solamente piu' per ragioni storiche.
Profondita' di colore
Un'immagine con d=24 e detta immagine True Color.
In questo caso il colore viene codificato in RGB, utilizzando un byte per canale.
Attualmente esso e' il formato piu' diffuso.
Profondita' di colore
Se d=32 l'immagine di dice RGBA, perche' aggiunge ai canali RGB anche il canale alpha (con altri 8 bit).
Alcuni standard permettono d=48 o d=64, consentendo 16 bit per canale.
Infine stanno nascendo nuovi standard chiamati HDR (High Dynamic Range), che permettono di utilizzare valori in virgola mobile per i singoli canali.
Mem = w . h . d bits
Profondita' di colore
Per trovare la quantita' di memoria (in bit) necessaria a codificare un'immagine senza palette (o con palette fissa) e sufficiente eseguire un prodotto.
Mem = w . h . d + dp . 2d bits
Profondita' di colore
Nel caso di immagini con Palette variabile, bisogna anche sommare la memoria necessaria per codificare la palette (normalmente espressa con valori in True Color, di profondita' dp = 24).
Formati non compressi
I formati di file che codificano immagini senza compressione sono i piu' semplici da leggere.
Essi sono solitamente costituiti da due o tre parti parti:
L'intestazione (La palette) i Dati
Formati non compressi
L'intestazione contiene informazioni relative all'immagine, ed in particolare le dimensioni (in pixel), e la profondita' di colore.
Essa puo' anche contenere infromazioni addizionali come meta-dati per la
catalogazione, risoluzione di acquisizione, ed eventuali specifiche di codifica
Formati non compressi
Se la codifica prevede una Palette, generalmente questa e' posta tra l'intestazione ed i dati dell'immagine.
Seguno quindi i colori dei pixel (o gli indici nella palette), elencati per righe, dal punto in alto a sinistra, fino a quello in basso a destra.
La compressione
Come si vede, la quantita' di memoria necessaria per memorizzare un'immagine e' notevole.
Inoltre, le numerose simmetrie presenti all'interno di un'immagine la rendono solitamente idonea all'applicazione di varie tecniche di compressione.
La compressione
Le compressioni si dividono in due categorie:
Senza Perdita Con Perdita
La compressione
Le compressioni senza perdita sono quelle che ricostruiscono esattamente la sequenza di valori RGB (o di indici nella palette) che vi era prima della compressione.
Le compressioni con perdita, ricostruiscono un'immagine differente da quella originale, ma visivamente non distinguibile.
In ogni caso, entrambe le compressioni sono affette dalle perdite relative al campionamento ed alla quantizzazione.
Run-lenght encoding
La tecnica di compressione piu' semplice e' il run-lenght encoding (RLE).
Essa e' particolarmente adatta per immagini con Palette, e sfrutta la presenza di ripetizioni di colori all'interno della figura.
1111112221123211222111111 = 25 valori
Run-lenght encoding
L'algoritmo divide la sequenza di dati in blocchi.
1111112221123211222111111 = 25 valori -41
Run-lenght encoding
Il primo dato n di un blocco ha un significato speciale.
Se n<=0, il pixel successivo deve venire ripetuto 2-n volte.
1111112221123211222111111 = 25 valori -41 -12 01 3232
Run-lenght encoding
Con n>0, allora indica che i successivi n pixel vanno copiati sull'immagine decmpressa.
1111112221123211222111111 = 25 valori -41 -12 01 3232 01 -12 -41 = 16 valori
Run-lenght encoding
Come si vede, si e' ottenuto un risparmio di 9 byte (il 36 % in meno).
Run-lenght encoding
I blocchi hanno quindi lunghezza n+1, se n > 0, 2 altrimenti.
Solitamente n e' un byte segnato, per cui si possono avere fino a 127 colori in un blocco, e codificare sequenze (run-length) di fino a 130 ripetizioni consecutive di un colore.
Run-lenght encoding
L'algoritmo e' molto semplice da implementare, sia in fase di compressione, che in fase di decmpressione.
Esso pero' permette solamente risparmi piuttosto modesti (ed in casi
particolarmente sfortunati puo' addirittura aumentare le dimensioni dell'immagine compressa).