Click here to load reader

Dispense del corso di Elaborazione di Immagini e Audio

  • View
    0

  • Download
    0

Embed Size (px)

Text of Dispense del corso di Elaborazione di Immagini e Audio

Microsoft PowerPoint - eia_Compressione.ppt [modalità compatibilità]Dispense del corso di Elaborazione di Immagini e Audio Digitali
La Compressione La Compressione Dispense del corso di Elaborazione di Immagini e Audio Digitali
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Prof. Roberto Vezzani – Prof. Costantino Grana
COMPRESSIONE DATICOMPRESSIONE DATI
IntroduzioneIntroduzione
• La compressione dati è una tecnica utilizzata in ambito informatico per la riduzione della quantità di bit necessari alla rappresentazioneper la riduzione della quantità di bit necessari alla rappresentazione in forma digitale di un'informazione.
• La compressione dati viene utilizzata sia per ridurre le dimensioni di un file, e quindi lo spazio necessario per la sua memorizzazione e l'occupazione di banda necessaria per la sua trasmissione, sia per ridurre l'occupazione di banda necessaria in una generica trasmissione p g dati come ad esempio una trasmissione televisiva in diretta.
• Le tecniche di compressione dati si dividono in due grandi categorie: compressione dati lossy: comprime i dati attraverso un processo con perdita– compressione dati lossy: comprime i dati attraverso un processo con perdita d'informazione che sfrutta le ridondanze nell'utilizzo dei dati;
– compressione dati lossless: comprime i dati attraverso un processo senza perdita d'informazione che sfrutta le ridondanze nella codifica del dato.d informazione che sfrutta le ridondanze nella codifica del dato.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Importanza della compressioneImportanza della compressione
• La quantità di dati con cui ci troviamo ad interagire sta aumentando vertiginosamentevertiginosamente.
• Le capacità di comunicazione non hanno lo stesso sviluppo.
• I dati multimediali hanno dato ulteriore spinta a questa necessità:p q – La Bibbia in formato testo occupa 4,41 MB (4.627.239 byte)
– Una foto a colori di dimensione 1280x1024 a 24 bit/pixel occupa 3,75 MB (3 932 160 byte)(3.932.160 byte)
– Una canzone di 4 minuti in formato CD (44,1 KHz, 16 bit/sample, Stereo) occupa 40,38 MB (42.336.000 byte)
U id di 1 i t i f t PAL (704 576 24 bit/ i l 25 f )– Un video di 1 minuto in formato PAL (704x576 a 24 bit/pixel, 25 fps) occupa 1,7 GB (1.824.768.000 byte)
• La tecnologia ha quindi seguito questa evoluzione anche nel campo della codifica generica, ma soprattutto con specifiche tecniche per l’audio e per il video.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
TerminologiaTerminologia
• Messaggio: i dati di interesse nel nostro specifico blproblema.
• Codifica e decodifica: operazioni necessarie a trasformare il i i f “ difi t ” ibil t diil messaggio in forma “codificata” e possibilmente di dimensione inferiore e viceversa.
• Con il termine “compressione” si intendono tutte le• Con il termine compressione si intendono tutte le operazioni necessarie a ridurre (possibilmente) le dimensione di un messaggio.gg
• La ricostruzione di un messaggio compresso può avvenire in forma esatta (compressione lossless o senza perdita) o approssimata (compressione lossy o con perdita).
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Non esiste la compressione perfetta!Non esiste la compressione perfetta!
• Non esiste e non può esistere un algoritmo in grado di comprimere tuttotutto.
• Per la precisione, dati tutti i possibili messaggi rappresentabili con n bit, non è possibile rappresentarli con n-1 bit.
• Dunque le compressioni che funzionano sempre non sono possibili.
• La cosa non è così banale, dato che ad esempio il brevetto USA 5 533 051 dal titolo “Methods for Data Compression” (realmente5,533,051 dal titolo Methods for Data Compression (realmente esistente) dice proprio di essere in grado di ridurre di almeno un bit qualsiasi messaggio.
• Ma allora come si fa a comprimere?
• Bisogna creare un modello del nostro sistema in grado di descrivere la probabilità con cui il messaggio viene incontrato, codificando poi conprobabilità con cui il messaggio viene incontrato, codificando poi con meno bit i messaggi più probabili e con più bit quelli meno probabili.
• Il codificatore è l’algoritmo che sceglie come rappresentare i messaggi.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Teoria dell’informazioneTeoria dell’informazione
• C. E. Shannon è stato uno dei pionieri in questo campo e ha formalizzato una grandezza in grado di rappresentare la quantità diformalizzato una grandezza in grado di rappresentare la quantità di informazione o incertezza di un insieme di possibili messaggi:
1logH S p s con p(s) la probabilità del messaggio s.
Q d h h i di i à i h h
2log s S

• Questa grandezza che ha una serie di proprietà matematiche che non vedremo indica sostanzialmente che messaggi più probabili in un insieme contengono meno informazione. – La cosa può sembrare strana, ma se vi dico che domani ci saranno 30
gradi e siamo in inverno, vi sto dando più informazione rispetto ad una comunicazione che vi informa che domani ci saranno 10 gradi.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Teoria dell’informazioneTeoria dell’informazione
• Al di là di aspetti filosofici, questa misura consente poi a Shannon di sviluppare tutto un modello matematico che ha condizionato la storiasviluppare tutto un modello matematico che ha condizionato la storia della comunicazione successivamente.
• L’interesse principale, per noi, è che questa grandezza limita la massima capacità di trasmissione di un sistema di comunicazione.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Entropia e compressioneEntropia e compressione
• La grandezza H(s) è stata chiamata entropia da Shannon, per la somiglianza con l’entropia vista in fisica e per un malaugurato suggerimento di Voncon l entropia vista in fisica e per un malaugurato suggerimento di Von Neumann.
• In generale è possibile dire che la lunghezza media della codifica di un insieme di messaggi sarà data da:di messaggi sarà data da:
,s w C

• Questa relazione limita sostanzialmente la massima compressione ottenibile con rappresentazioni a lunghezza variabile dei messaggi da trasmettere.
• L’unico modo di superare questo limite è definire un nuovo sistema di• L unico modo di superare questo limite è definire un nuovo sistema di messaggi ad entropia minore, in grado di trasmettere lo stesso concetto.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Algoritmo per la codifica ottimaAlgoritmo per la codifica ottima
• Nel 1952, David A. Huffman ha pubblicato un algoritmo in grado di generare una codifica (non compressione!!!) a lunghezza variabile ottimauna codifica (non compressione!!!) a lunghezza variabile ottima.
• Ovvero, non è possibile ottenere codifiche con lunghezza media inferiore.
• In realtà questo è vero solo se si considerano codici che rappresentano ogni i b l i t di bit M t difi èsimbolo con un numero intero di bit. Ma questa codifica è comunque una
pietra miliare della compressione dati, usata a tutt’oggi nella compressione JPEG per esempio.
Q l i d ll id i h i li di i • Questo algoritmo parte dalla considerazione che si vogliono generare codici a lunghezza variabile tali per cui non sia necessario aggiungere nulla tra l’uno e l’altro per indicare dove finisce uno e dove comincia l’altro.
d i l d difi i i di i i ili• Ad esempio, volendo codificare un insieme di 4 messaggi si possono utilizzare i codici 01, 102, 111, 202 (utilizzando 3 simboli).
• La sequenza 1111022020101111102 può essere interpretata solo come 111- 102-202-01-01-111-102.
• Se utilizzassimo i codici 11, 111, 102, 02, questo non sarebbe possibile.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Codifica di HuffmanCodifica di Huffman
• L’algoritmo consiste in una stima a priori della probabilità di ogni messaggio seguita dalla costruzione di un sistema di codice che dipenda da questaseguita dalla costruzione di un sistema di codice che dipenda da questa probabilità, in modo da rappresentare con meno bit i messaggi più probabili.
• Si devono quindi ordinare i possibili messaggi in ordine crescente di probabilitàprobabilità.
• Si prendono i due messaggi con probabilità più bassa e li si combina in un nuovo messaggio con probabilità data dalla somma delle probabilità originali (ovvero la probabilità che si verifichi uno o l’altro evento)(ovvero la probabilità che si verifichi uno o l altro evento).
• Si riordinano i messaggi (eliminando i due combinati) e si ricomincia.
• Questa procedura produce un albero che può essere percorso dalla radice (l l i bi i ) ll f li d i li il(l’ultima combinazione) alle foglie assegnando uno 0 se si sceglie il ramo meno probabile e un 1 se si sceglie l’altro, o viceversa
• Il codice non è ovviamente mai univoco dato che la scelta di emettere 0 o 1 è arbitraria (ma una volta decisa bisogna mantenerla per tutto l’albero!).
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
EsempioEsempio
EsempioEsempio
Stima delle probabilitàStima delle probabilità
• Come detto è necessario stimare le probabilità dei diversi messaggi.
E i i i l 3 i• Esistono principalmente 3 approcci per questo scopo: – Stima statica a priori: nello sviluppare un algoritmo per uno specifico
compito, si possono stimare le probabilità dei diversi messaggi su una enorme mole di dati in modo da avere un modello statistico molto affidabile noto a priori sia al codificatore sia al decodificatore.
– Stima statica della sequenza: si eseguono due passate sui dati da comprimere. La prima passata esegue la stima delle probabilità, mentre la seconda esegue la codifica. E’ quindi necessario trasmettere anche le probabilità prima del messaggio.
– Stima dinamica: si parte con una stima statica a priori (ad esempio una distribuzione uniforme), si codifica/decodifica il primo messaggio, si aggiorna il modello di probabilità e quindi la codifica, e così via. Non è necessario trasmettere la distribuzione, ma il carico computazionale può diventare notevole. I metodi che utilizzano questa tecnica si chiamano adattativi (Adaptive Huffman Coding).
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Esempio completoEsempio completo
piccolo esempio di compressione dati con l'algoritmo di huffmanhuffman
• Il messaggio è composto di 63 caratteri contando anche gli spazi e l’apostrofo.
• I simboli sono 19 e la loro distribuzione è la seguente:
o spazio=8o,spazio=8
',g,h,u=1
Esempio completo (segue)Esempio completo (segue) o=8 spazio=8 i=7
o=8 spazio=8 i=7
o=8 spazio=8 i=7i 7
c=4 e=4 m=4
i 7 c=4 e=4 m=4
i 7 c=4 e=4 m=4
p=3 l=3 s=3
p=3 l=3 s=3
p=3 l=3 s=3
d=3 n=3 a=3
d=3 n=3 a=3
d=3 n=3 a=3
r=2 t=2 f=2 ' 1
(h+u)=2 r=2 t=2 f 2
('+g)=2 (h+u)=2 r=2 t 2'=1
g=1 h=1
t=2 f=2
u=1
Esempio completo (segue)Esempio completo (segue) o=8 spazio=8 i=7
o=8 spazio=8 i=7
o=8 spazio=8 i=7i 7
(t+f)=4 c=4 e=4
i 7 ((h+u)+r)=4 (t+f)=4 c=4
i 7 (a+('+g))=5 ((h+u)+r)=4 (t+f)=4
m=4 p=3 l=3
e=4 m=4 p=3
( ) c=4 e=4 m=4
s=3 d=3 n=3
l=3 s=3 d=3
p=3 l=3 s=3
a=3 ('+g)=2 (h+u)=2
2
d=3 n=3
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Esempio completo (segue)Esempio completo (segue) o=8 spazio=8 i=7
o=8 spazio=8 i=7
o=8 spazio=8 (m+p)=7i 7
(d+n)=6 (a+('+g))=5 ((h+u)+r)=4
i 7 (l+s)=6 (d+n)=6 (a+('+g))=5
(m p) 7 i=7 (l+s)=6 (d+n)=6(( ) )
(t+f)=4 c=4 e=4
( ( g)) ((h+u)+r)=4 (t+f)=4 c=4
( ) (a+('+g))=5 ((h+u)+r)=4 (t+f)=4
m=4 p=3 l=3
e=4 m=4 p=3
c=4 e=4
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Esempio completo (segue)Esempio completo (segue) (c+e)=8 o=8 spazio=8
(((h+u)+r)+(t+f))=8 (c+e)=8 o=8
((d+n)+(a+('+g)))=11 (((h+u)+r)+(t+f))=8 (c+e)=8spazio 8
(m+p)=7 i=7 (l+s)=6
o 8 spazio=8 (m+p)=7 i=7
(c e) 8 o=8 spazio=8 (m+p)=7( )
(d+n)=6 (a+('+g))=5 ((h+u)+r)=4
(l+s)=6 (d+n)=6 (a+('+g))=5
( p) i=7 (l+s)=6
(t+f)=4
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Esempio completo (segue)Esempio completo (segue) (i+(l+s))=13 ((d+n)+(a+('+g)))=11 (((h+u)+r)+(t+f))=8
(spazio+(m+p))=15 (i+(l+s))=13 ((d+n)+(a+('+g)))=11
((c+e)+o)=16 (spazio+(m+p))=15 (i+(l+s))=13(((h u) r) (t f)) 8
(c+e)=8 o=8 spazio=8
((d n) (a ( g))) 11 (((h+u)+r)+(t+f))=8 (c+e)=8 o=8
(i (l s)) 13 ((d+n)+(a+('+g)))=11 (((h+u)+r)+(t+f))=8
p (m+p)=7
Esempio completo (segue)Esempio completo (segue)
(((d+n)+(a+('+g)))+(((h+u)+r)+(t+f)))=19
((c+e)+o)=16((c+e)+o)=16
(spazio+(m+p))=15
(i+(l+s))=13
((spazio+(m+p))+ (i+(l+s)))=28
(((d+n)+(a+('+g)))+(((h+u)+r)+(t+f)))=19(((d+n)+(a+( +g)))+(((h+u)+r)+(t+f))) 19
((c+e)+o)=16
((((d ) ( ( ))) (((h ) ) ( f))) (( ) ))((((d+n)+(a+('+g)))+(((h+u)+r)+(t+f)))+((c+e)+o))=35
((spazio+(m+p))+(i+(l+s)))=28
(((((d+n)+(a+('+g)))+(((h+u)+r)+(t+f)))+((c+e)+o))+((spazio+(m+p))+(i+(l+s)))) =63
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Albero risultanteAlbero risultante
o 011 3 8 24
spazio 100 3 8 24
i 110 3 7 21i 110 3 7 21
c 0100 4 4 16
e 0101 4 4 16
m 1010 4 4 16
p 1011 4 3 12p 1011 4 3 12
l 1110 4 3 12
s 1111 4 3 12
d 00000 5 3 15
n 00001 5 3 15
a 00010 5 3 15
r 00101 5 2 10
t 00110 5 2 10
f 00111 5 2 10
' 000110 6 1 6
tot 252
o 00000 5 8 40
spazio 00001 5 8 40
i 00010 5 7 35
c 00011 5 4 20
e 00100 5 4 20
m 00101 5 4 20
p 00110 5 3 15
l 00111 5 3 15
s 01000 5 3 15
d 01001 5 3 15
n 01010 5 3 15
a 01011 5 3 15
r 01100 5 2 10
t 01101 5 2 10
f 01110 5 2 10
' 01111 5 1 5
tot 315
Il contestoIl contesto
• Nell’algoritmo di Huffman, si considerano messaggi che provengono da una sorgente senza memoria ovvero che genera messaggi indipendenti unosorgente senza memoria, ovvero che genera messaggi indipendenti uno dall’altro, con una certa probabilità.
• Mentre questa assunzione è molto comoda, quasi mai questo si verifica.
Q t t t d i i d t di t ti i f tti• Questo testo, ad esempio, non proviene da una sorgente di questo tipo; infatti esistono dei legami tra una lettera e la successiva: la probabilità di osservare una p dopo una n è nulla (a meno di errori grammaticali!).
S difi i l i di l difi iù• Se codificassimo le coppie di lettere potremmo ottenere una codifica più efficiente in termini di lunghezza media dei codici.
• Il contesto può essere utilizzato in diversi modi, sfruttandolo a priori per difi il i i d d d if l di ib imodificare il messaggio in modo da rendere meno uniforme la distribuzione
dei messaggi, oppure utilizzandolo per calcolare probabilità condizionate.
• In alcuni casi è possibile che il contesto sia sufficiente a ridurre le dimensioni dei messaggi da non richiedere ulteriori sistemi per la compressione.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Run Length EncodingRun Length Encoding
• E’ il più semplice sistema di compressione basato sul contesto.
• Si codificano non i singoli elementi ma sequenze (run) di elementi uguali• Si codificano non i singoli elementi, ma sequenze (run) di elementi uguali. Non funziona molto bene per il testo, ma ha effetti notevoli su immagini in bianco e nero.
A d l bbb i ò t d i (4 )(3 b)(5 )(4 )• Avendo la sequenza aaaabbbcccccaaaa si può tradurre in (4,a)(3,b)(5,c)(4,a).
• Con un algoritmo di questo tipo entrano in gioco parecchi aspetti implementativi in grado di fare la differenza:
– Come distinguo il numero di occorrenze dalle occorrenze stesse?
– Trasmetto sempre messaggi codificati o no?
– Inserisco quindi un codice in grado di passare da codifica a non-codifica?
• Diverse implementazioni sono possibili e queste devono essere adattate alla particolare applicazione.
• E’ inoltre necessario decidere come codificare i messaggi ottenuti. Sarebbe gg possibile applicare l’algoritmo di Huffman ai diversi codici o coppie di codici ottenute.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
EsempioEsempiopp • L’immagine qui accanto è una
scansione a 518x723 pixel a 1 bit per pixel, ovvero bianco o nero.pixel, ovvero bianco o nero.
• L’occupazione di memoria non compressa è quindi di 46.815 byte.
• Utilizzando un algoritmo RLE molto• Utilizzando un algoritmo RLE molto semplice si invia un byte per indicare il numero di pixel neri, poi uno per indicare il numero di pixel bianchi eindicare il numero di pixel bianchi e così via. Se ci sono 255 o più pixel con lo stesso colore il byte successivo indica ancora pixel disuccessivo indica ancora pixel di quel colore.
• Con questo algoritmo ho ottenuto un file di 10 519 bytefile di 10.519 byte.
• Questo file contiene molte run bianche e quindi funziona molto bene
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
bene.
EsempioEsempiopp • Questa è una immagine sempre a
1 bpp di 360x494 pixel che occupa 22.230 byteoccupa 22.230 byte
• La “compressione” con l’algoritmo precedente produce un file di 78 920 byte!78.920 byte!
• Questo perché l’algoritmo usa come minimo un byte per ogni runrun.
• Ovviamente è possibile ottenere risultati migliori, ma in questo caso il problema è che il modellocaso il problema è che il modello che stiamo usando non corrisponde ai dati che vengono modellatimodellati.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Altra variante del RLE: PackbitsAltra variante del RLE: Packbits
• Nello standard PostScript è stata utilizzata una variante del RLE che si ispira ad un algoritmo noto come Packbitsispira ad un algoritmo noto come Packbits.
• Il filtro RunLengthEncode codifica i dati in un semplice formato a byte.
• Ogni run consiste di un byte che indica la lunghezza L seguito da 1- 128 byte di dati.
• Se L è tra 0 e 127 i seguenti 1 128 byte vengono copiati così come sono• Se L è tra 0 e 127 i seguenti 1-128 byte vengono copiati così come sono (nessuna codifica).
• Se L è tra 129 e 255 il byte successivo viene inviato in output 257-L volte (2-128 volte).
• Quando la codifica è finita, scrive un byte finale con il valore 128 detto EOD marker, ovvero End Of Data: marcatore di fine fileEOD marker, ovvero End Of Data: marcatore di fine file.
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
Algoritmi di tipo LempelAlgoritmi di tipo Lempel--ZivZiv
• LZ77 (a finestra scorrevole o Sliding Window) V i i LZSS (L l Zi S S ki)– Varianti: LZSS (Lempel-Ziv-Storer-Szymanski)
– Applicazioni: gzip, Squeeze, LHA, PKZIP, ZOO
• LZ78 (tecnica a dizionario) – Varianti: LZW (Lempel-Ziv-Welch), LZC (Lempel-Ziv-Compress) – Applications: compress, GIF, CCITT (nei modem), ARC, PAK
T di i l l’LZ77 il i li d i• Tradizionalmente l’LZ77 era il migliore, ma decisamente lento. Nella versione utilizzata da gzip è però praticamente analogo all’LZ78.g
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
LZ77: LempelLZ77: Lempel--Ziv a finestra scorrevoleZiv a finestra scorrevole
a a c a a c a b c a b a b a c Cursore
a a c a a c a b c a b a b a c Dizionario
(codificato precedentemente) Lookahead
B ff(codificato precedentemente) Buffer
• La finestra che contiene il dizionario e il buffer sono di lunghezza fissata e scorrono con il cursore.
Ad ogni passo:• Ad ogni passo: – Manda in uscita la terna (P,L,C)
P = posizione della corrispondenza più lunga nel dizionario, relativa alla posizione attuale (quanti caratteri devo andare indietro)attuale (quanti caratteri devo andare indietro) L = lunghezza della corrispondenza più lunga C = carattere successivo da mettere nel buffer dopo la corrispondenza.
– Sposta avanti la finestra di L + 1
Roberto Vezzani - Imagelab – Università di Modena e Reggio Emilia
p
LZ77: DecodificaLZ77: Decodifica
• Il decodificatore ha la stessa finestra dizionario del codificatore, e la costruisce dinamicamentecostruisce dinamicamente.
• Per ogni messaggio il decodificatore deve cercare nel dizionario, inserire una copia alla posizione corrente e poi il carattere aggiuntivo.
• Che cosa vuol dire se L>P, cioè se solo una parte del messaggio è presente nel dizionario?presente nel dizionario?
• Es.: dizionario = abcd, simbolo da decodificare = (2,9,e) • Si copia semplicemente dal dizionario (che è anche l’output corrente) p p ( p )
partendo dal cursore con qualcosa tipo questo:
for…

Search related