You are on page 1of 40

Compressione di Immagini

Michelangelo Diligenti Dipartimento di Ingegneria dellInformazione Universit di Siena Email: diligmic@dii.unisi.it http://www.dii.unisi.it/~diligmic/BDM2009

Immagini

Maggior parte dell'informazione sul Web memorizzata in immagini Un immagine una matrice di pixel

Immagini a Colori: ogni pixel una terna che rappresenta i valori dei 3 colori fondamentali. Un colore rappresentato da un valore tra 0 ed N N pu essere 28, 216 o 232 Bianco e nero: ogni pixel ha due possibili valori Scale di grigio: ogni pixel contiene un valore che tra 0 ed N N spesso pari a 28 o 216

Immagini

La risoluzione di un'immagine determina il numero di pixel per unit di superfice

Immagini con alta qualit hanno risoluzione alta

Ma dipende dal contesto, da un certo punto in poi non c' alcuna differenza all'occhio umano all'aumentare della risoluzione

Alta risoluzione implica maggior spazio per memorizzare l'immagine

Immagini in bianco e nero

Standard CCITT (Comitato consultativo Internazionale per la Telefonia e Telegrafia) Parte di ITU (International Telecommunication Union) Nasce negli anni 1970 come standard per l'invio di fax Nel 1980 si arriva alla versione 3 che permette trasmissioni pi veloci delle precedenti Ancor oggi uno degli standard pi diffusi, ogni fax lo supporta Usa algoritmi di compressione per migliorare la velocit di trasmissione

CCITT e compressione
Usa foglio A4
Risoluzione (200x100) dpi (dots per inch)

Modalit high resolution (200x200) dpi

Immagni sono 1728x1188 pixels


Assumendo 1bit/pixel 2Mbit

Velocit di trasmissione 4.8Kbit/s


Oggi si raggiungono velocit di 14.433.6Kbit/s Pertanto senza compressione circa 428 secondi per invio di una pagina Con CCITT si arriva a 60 secondi

1728 bits/line

1188 lines/page

Codifica Run-length
Ogni linea una sequenza di blocchi di pixels dello stesso colore (run) Si contano i pixel in ogni run
Esempio
3w 4b 9w 2b 2w 6b 5w 2b 5w

Codifica in CCITT - G3 1D

Le lunghezze dei run sono codificate usando una codifica di Huffman statica (predefinita)

L'albero di Huffman stato definito sulla base delle lunghezze tipiche dei run misurate in un insieme di documenti di test

Per mantenere la sincronizzazione ogni linea inizia sempre con una sequenza di pixel bianchi
La sequenza pu avere lunghezza zero Sarebbe inutile dato che la larghezza del documento data, ma evita che gli errori si propaghino alle linee successive

Una parola EOL termina ogni linea: 00000000001

Codifica con G3 1D

1000 011 10100 11 0111 0010 ...

Coerenza 2D - G3 2D

G3 1D non sfrutta che le immagini sono regolari verticalmente oltre che orizzontalmente Detta coerenza verticale, pixel vicini in verticale hanno alta probabilit di essere uguali

La linea precedente viene presa come riferimento: reference line

La codifica della linea corrente fatta riportando i cambiamenti rispetto a quelli sulla reference line

G3 2D
Funzionamento G32D ha diversi stati

Se un run sia sulla linea corrente che sulla reference (entro 3 posizioni) vertical mode

Si codifica la differenza tra la posizione del run attuale ed il precedente (usando Huffman)

Se ci sono cambiamenti di run nella linea corrente ma non sulla reference horizontal mode Si codifica come in G3 1D

Se la reference line ha run che non vi sulla linea attuale si emette un codice speciale detto pass code

10

Esempio di G3 2D
reference line

Linea corrente

vertical mode horizontal pass vertical mode ... code +2 -2 -1 0 mode Da tabella di Huffman, Codice con codici generato rappresentanti i delta -3, -2, -1, 0, +1, +2, +3

<codice del modo, lunghezza del run bianco, lunghezza del run nero>

0001

11

Problemi del G3 2D
Migliore compressione del G3 1D Ma gli errori creano disturbi maggiori

In G3 1D un errore disturba solo la linea corrente, ma appena si trova l'EOL la propagazione dell'errore si ferma Qui un errore sulla linea di riferimento si propaga alla successiva e cosi via Per questa ragione si forza una linea ogni K ad essere codificate con G3 1D. Tali linee saranno le reference Risoluzione standard K=2 Alta risoluzione K=4

12

Confronto tra G3 1D e 2D
Risoluzione standard (~200x100 dpi)

G3 1D 0.13 bits/pixel 57 secondi per A4 a 4.8 Kbps G3 2D (K=2) 0.11 bits/pixel 47 secondi per A4 a 4.8 Kbps

Alta risoluzione (~200x200 dpi)

G3 2D (K=4) 0.09 bits/pixel 74 secondi per A4 a 4.8 Kbps

Compressione buona per documenti da ufficio


Lunghezza media dei run alta

Compressione sarebbe pessima per immagini naturali da macchine fotografiche

13

Immagini naturali
Compressione di immagini generiche

Spesso si tratta di immagini naturali da macchine fotografiche

Le immagini hanno un numero elevato di livelli di grigio o colori (tipicamente tra 28 e 232)

La compressione di immagini generiche si divide in due categorie principali


Con perdita o lossy: i dati compressi non possono esattamente ricostruire l'immagine iniziale

Senza perdita o lossless: i dati una volta decompressi ricostruiscono esattamente l'immagine priginale

14

Compressione senza perdita

Analogo delle varie tecniche studiate per il testo, dove perdite non sono ammessibili Gli standard pi comuni sul Web sono

GIF PNG JPEG-LS


Nuovo standard

15

Introduzione al formato GIF


Creato da ComputerServe Il formato pi usato fino al 1995, ma ancora comune 8-bit per pixel Immagini a 256 colori ma possibile aggiunge mappe di colori per aumentare la gamma

16

Il formato GIF
La mappa di colori opzionale

Se specificata viene inserita nella testata (header) del file dell'immagine in forma non compressa La mappa dei colori contiene 256 24-bit entries, che specifican 256 colori RGB

L'immagine poi codificata usando LZW

I simboli iniziali dell'alfabeto sono i 256 colori nella mappa, oltre che un codice speciale che indica il pixel vuoto e un simbolo che indica la fine dell'informazione (EOF)

17

Il formato GIF

Nel 1995 Unisys annunci che avrebbe chiesto il pagamento di royalies sulle implementazioni del GIF Per via di un brevetto sull'algoritmo LZW Questo fece nascere lo sviluppo di un nuovo formato lossless

Il formato sarebbe dovuto essere aperto e gratuito per tutti gli utilizzatori Avrebbe utilizzato gli ultimi sviluppi in termini di algoritmi di compressione Nasce il formato PNG

18

Il formato PNG

PNG: Portable Network Graphics (pronunciato ping) Usa la compressione gzip Migliorie rispetto al GIF

Compressione tipicamente tra il 10-30% migliore

Non pi solo 256 colori ma usa fino a 16 bit per pixel per immagini in scale di grigio e fino a 48 bit per pixel per immagini a colori

GIF ha un solo simbolo per i pixel trasparenti, PNG ha 256 valori di trasparenza, per immagini che gradualmente sfumano nel background

PNG sta diventando lo standard dominante sul Web per la compressione senza perdita 19

Compressione lossy
La compressione con perdita o lossy

L'immagine compressa non pu esattamente ricostruire l'immagine iniziale Tuttavia l'approssimazione buona e l'occhio umano pu non percepire alcuna differenza Alto grado di compressione, superiore agli analoghi standard senza perdita

20

Compressione lossy

Particolarmente adatta per immagini che devono essere trasmesse oltre che memorizzate

Importante minimizzare il tempo di trasmissione

Immagini sul Web sono scaricate dagli utenti, importante minimizzare i tempi di download Immagini mediche Immagini legali Documenti storici

Non adatta per alcune categorie di immagini come


21

Standard per compressione lossy


JPEG, il pi comune
File con estensione .jpg

JPEG2000

Nuovo standard che usa tecniche wavelet File con estensione .jp2 Con alti gradi di compressione la qualit percepita dell'immagine con JPEG2 molto migliore di JPEG

22

Il formato JPEG

Definito dal Joint Photographic Experts Group nel 1992 Ha una modalit senza perdite ma non usata spesso
Oggi si usa invece lo standard JPEG-LS

Si comprime ad 1 bit/pixel con ottima qualit Implementazione dello standard relativamente semplice Permette la trasmissione progressiva (preferibile per il WWW) oltre che raster Ammette immgini a colori ed in scale di grigio

Per immagini a colori, ogni canale RGB trattato separatamente

23

Codifica JPEG
La codifica JPEG effettua i seguenti passi

L'immagine viene divisa in quadrati 8x8 Preprocessing per passare dalla rappresentazione RGB a quella YUV Si applica la Trasformata Coseno Discreta (Discrete Cosine Transform o DCT) su ogni quadrato I coefficienti sono normalizzati, quantizzati e codificati La sequenza dei coefficienti forma l'immagine compressa

24

Codifica JPEG

25

Preprocessing
Da RGB a YUV

Y rappresenta l'intensit (brightness) del pixel U e V reppresentano il colore (la sua armonica primaria) e la sua saturazione

Equivalente alla rappresentazione RGB Si trasforma perch occhio umano pi sensibile alla Y che alla U o V Si vuole comprimere le U e V modo pi aggressivo In RGB i 3 colori sono ugualmente importanti

26

Discrete Cosine Transform

La discrete cosine transform (DCT) una trasformata di Fourier


Simile alle Discrete Fourier Transform (DFT), ma con il doppio dei coefficienti Usa solo numeri reali Mi scompone l'immagine nel dominio della frequenza Usata in JPEG perch veloce e facile da calcolare

27

Discrete Cosine Transform

dove
Blocco ha dimensioni (N1,N2), in JPEG N1=N2=8

Si considera una componente alla volta


A(i,j) il valore del pixel (i,j) nel blocco. B(k1,k2) coefficiente DCT in posizione (k1,k2)

Valori bassi per k1 rappresentano le basse frequenze verticali, i valori bassi di k2 corrispondono alle basse frequenze orizzontali

Le alte frequenze assumono tendenzialmente valori pi bassi

28

Discrete Cosine Transform

Ogni quadrato 8x8 corrisponde a 64 coefficienti

29

Discrete Cosine Transform

I 64 coefficienti DCT permettono di ricostruire esattamente i pixels del quadrato Tuttavia se li memorizzassi tutti ed con precisione infinita non avrei compresso nulla, anzi! Approssimazioni

Precisione finita I coefficienti sono quantizzati I coefficienti di alta frequenza non sono spesso memorizzati o trasmessi poich L'occhio umano poco sensibile ad essi e spesso essi assumono valori molto bassi Per quadrati senza variazioni brusche essi sono nulli 30

Quantizzazione

Si ottiene una matrice dei DCT per ogni componente

Ogni valore sulla matrice rinormalizzato in base ad un fattore che misura quanto l'occhio umano sensibile a quel coefficiente Diversi gradi di compressione per le diverse frequenze

Valori sono quindi approssimati all'interno pi vicino

In genere le alte frequenze hanno valori finali nulli

possibile decidere quali coefficienti tagliare a seconda della qualit dell'immagine risultante La precisione nella ricostruzione controllata dal un Quality Factor

31

Quantizzazione

La matrice di normalizzazione per i coefficienti di un blocco in genere usa i seguenti fattori

Si noti come i fattori di normalizzazione sono pi alti andando verso in basso a destra

32

Quality factor
Alto quality factor Vengono tenute pi componenti Basso quality factor
Vengono tagliate pi componenti Maggiore compressione

In genere diminuendo il quality factor inizialmente non ho una diminuzione della qualit percepita

Se si continua a diminuirlo l'immagine inizia a degradare sensibilmente

33

JPEG e quality factor

34

JPEG e quality factor


Original

Quality factor 75

Quality factor 20

Quality factor 3

35

Ordine dei coefficienti

Ordine di memorizzazione dei coefficienti del blocco segue Zig-zag scan Coefficienti in bassa frequenza sono memorizzati/trasmessi prima Permette la visualizzazione progressiva del blocco

36

Raster vs. progressiva


Trasmissione Raster

I coeficienti DCT sono inviati in ordine dal blocco in alto a sinistra ad in basso a destra

Trasmissione Progressiva (meglio per il WWW)

Prima si inviano tutti i coefficienti (0,0), poi gli (0,1) e cosi via seguendo lo zig-zag scan di ogni blocco

37

JPEG e trasmissione progressiva

38

Codifica binaria

DCT(0,0) ha di solito una variazione lenta tra i blocchi contigui Il bit stream codifcato con Huffman I codici di Huffman sono predefiniti

Si codifica la differenza tra i valori dei blocchi vicini

Lo standard prevede anche l'utilizzo della codifica aritmetica a scapito di una minor velocit di decompressione

Lo standard prevede la possibilit di calcolare dei codici ottimali per l'immagine ed aggiungerli allo stream

39

Decodifica del JPEG


Decodifica Decodifica

Alcuni valori sono persi


Dequantizzazione Dequantizzazione

Inversa DCT Inversa DCT

Immagine Ricostruita

40