Compressione dati

Transcript

Compressione dati
Compressione
dei dati
Appunti di Sistemi
A cura del prof. Ing. Mario Catalano
Compressione di dati
 Cosa
significa
comprimere i dati?

Eliminare l'informazione
ridondante, in modo da poter
rappresentare lo stesso
documento con un minor
numero di bytes.
Vantaggi e svantaggi della
compressione dei dati





Risparmio della spazio quando si memorizzano i file;
Risparmio di tempo all’invio del file.
Tempo impiegato per comprimere e decomprimere un
file;
il file compresso non è usabile direttamente, per
usarlo si deve decomprimere;
il file compresso è più “fragile”. Alcuni errori di
trasmissione possono alterarne il contenuto.
Formati di file compressi
(i più conosciuti)
Zip
 Rar
 7Z
 Jar
 Ace
 Arj
 ISO (per immagini di CD o DVD)

Tecniche di compressione
Si dividono in due categorie:
 Compressione
dati lossy (con perdita di informazione);
 Compressione dati lossless (senza perdita di
informazione).
 Osservazione: La percentuale di compressione
ottenibile dipende:
1. dall’algoritmo utilizzato
2. dalla propensione dei dati a essere compressi
università ca'foscari di Venezia - corso di sistemi di elaborazione delle informazioni
Comprimere un testo (loseless)
Nei computer i caratteri vengono codificati usando il
codice ASCII "American Standard Code for Information
Interchange", cioè "Standard americano per lo scambio di
informazioni":
codice di 8 bit per ogni simbolo
ad esempio:
01100001 in binario rappresenta la lettera a.
Un file di 100 caratteri quindi occuperà sempre 800 bit
(8 bit * 100 caratteri = 800) sia esso composto da 100 caratteri
differenti piuttosto che da 100 identici.
Comprimere un testo (loseless)

Visto che in tutti i file testo alcuni caratteri appaiono con
una frequenza maggiore di altri non avrebbe senso
assegnare a questi un codice composto da un numero
inferiore di bit in modo da risparmiare spazio nella
codifica?
Codifica di Huffman
È un algoritmo di usato per la compressione dei dati, basato
sul principio di trovare il sistema ottimale per codificare
stringhe a seconda della frequenza relativa di ciascun
carattere.

Compressione di Huffmann

La lunghezza di ogni parola del codice non
è identica per tutti i simboli: i simboli più
frequenti (che appaiono più spesso) sono
codificati con delle piccole parole di
codice, mentre i simboli più rari ricevono
dei codici binari più lunghi. Si parla allora
di codifica a lunghezza variabile (in
ingleseVLC per variable code length)
Esempio di compressione Huffman
Vogliamo comprimere un file testo contenente la stringa:
CIAO_MAMMA
In un normale file testo, ogni lettera è rappresentata da 8
bit codificati rispettando il codice ASCII. Il nostro file
salvato sarà composto così da 80 bit.
Per prima cosa è necessario contare la frequenza di ogni
lettera nella nostra stringa:
C(1) I(1) A(3) M(3) O(1) _(1)
Codifichiamo A e M con sequenze di 2 bit e gli altri con
sequenze di 3 bit; ad esempio: A=10, M=11,
C=000, I=001, O=010, _=011
Ottengo un testo compresso di 24 bit, invece di 80!
Compressione a dizionario


è basata sull'idea di rimpiazzare, in un file, occorrenze
di stringhe ripetute con puntatori a precedenti copie.
La compressione è dovuta al fatto che la lunghezza di
un puntatore è in genere più piccola della lunghezza
della stringa che è rimpiazzata.
Compressione a dizionario



Maggiori sono le ripetizioni di occorrenze di stringhe nel
file da comprimere, maggiore è il grado di compressione
raggiunta. Quindi, una delle attività dell'algoritmo di
compressione è trovare la stringhe che si ripetono.
Quest'attività è svolta inserendo il file in un buffer di dati,
chiamato dizionario.
La velocità dell'algoritmo dipende dalla struttura dati
utilizzata per implementare il dizionario, dall'algoritmo
utilizzato per trovare i match tra le stringhe del file prese
in considerazione e le stringhe presenti nel dizionario.
Compressione a dizionario (LZW)


La famiglia degli algoritmi a dizionario, ha molte
varianti, la principale è detta LZW ed è la base
del formato ZIP. Essa ha il vantaggio di
comprimere in modo semplice ed efficiente tipi di
dati eterogenei, come testo, immagini, database,
ecc.
È possibile applicare questo tipo di
compressione non solo a testo, ma a qualunque
sequenza che si ripete.
Compressione RLE
(RLE = run length encoding)
Si sostituiscono le sequenze di bit con un
codice che indica il valore ripetuto e
quante volte si ripete nella sequenza.
 Funziona bene quando i dati da
comprimere sono scomponibili in lunghe
sequenze di valori identici ripetuti.

Un esempio (?)



Esempio:
"A A A A A A A A A A A A A A A A A A A A A A A A A A
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
A A A A" (600 bytes)
"300 volte `A ' " (13 bytes)
Compressione RLE

Sia M (messaggio da comprimere) una configurazione di bit
costituita da:



253 bit posti a 1,
seguiti da 118 bit posti a 0,
seguiti da 87 bit posti a 1
E’ più compatto rappresentare in binario
253 x 1, 118 x 0, 87 x 1
11111101111101100010101111
ad esempio dedicando 8 bit alla cardinalità e 1 bit al simbolo
per ciascun blocco rispetto ad elencare i 458 bit.
Compressione Lossy




Per comprimere dati come il suono o le immagini, dove
una perdita di qualità potrebbe non essere notata viene
usata la compressione lossy .
Gli algoritmi di compressione lossy quindi, sacrificano
parte dei dettagli contenuti, ad esempio in un'immagine,
in favore di un maggiore rapporto di compressione. Solitamente tali differenze non risultano percettibili, in
quanto la parte di informazione persa è comunque quella
che l'utente non avrebbe notato. Eliminando, perciò,
alcuni dettagli di un'immagine non la deterioreremo.
è bene sottolineare che una compressione lossy
comporta una perdita permanente di dati.
JPEG (Joint Photographic Experts Group)




JPEG è il primo formato compresso Lossy.
I meccanismi di compressione risultano particolarmente
adatti ad immagini contenenti un elevato numero di colori
per la memorizzazione di immagini fotografiche o di
disegni molto sfumati.
Negli altri casi, come cartoon, forniscono risultati
generalmente peggiori di altri formati, sia in termini di
qualità sia di dimensione dei file.
JPEG, non usa un metodo fisso di compressione. E'
possibile scegliere il grado di compressione che si
desidera applicare a un'immagine, determinando in
questo modo anche la qualità dell'immagine. Più si
comprime un'immagine, più se ne riduce la qualità.
JPEG: come funziona




Si può applicare solo alle immagini raster (cioè alle
fotografie).
Per diminuire la dimensione dell'immagine, JPEG elimina
alcuni pixel, che verranno poi ricostruiti (non esattamente
uguali) in fase di decompressione.
JPEG tuttavia è stato progettato in modo tale che i pixel
eliminati siano quelli meno percepibili per l'occhio umano
il quale è più sensibile alle piccole variazioni di
luminosità che alle piccole variazioni di colore.
Così se JPEG trova due pixel vicini di minima variazione
di luminosità li conserva, ma se trova due pixel vicini di
minima variazione di colore ne tiene uno solo.
Altri formati Lossy e Codec
MP3, WMA, MPC, OGG per l’audio
 MPEG, DivX per il video
Operano nel loro settore con una tecnica simile a
JPEG (tralasciano informazioni che
apparentemente non servono)
 I codec sono parti software che dicono al
sistema quali algoritmi applicare alle immagini
per codificarle o decodificarle.




Codec
Praticamente tutti i codec moderni sono lossy, perdono parte
dell'informazione cercando di ottenere il massimo di compressione
possibile. Nel caso degli ultimi codec sviluppati si è visto un
progressivo interesse nei confronti delle tecniche cosiddette
“psicovisuali” quelle cioè che studiano il modo in cui il cervello
percepisce le informazioni da un video in movimento.
Sfruttando queste caratteristiche del cervello alcuni sviluppatori
hanno inserito nei loro codec degli algoritmi che si occupano di
gestire i bit di informazione in modo più preciso, dedicando maggiore
precisione di codifica per le aree dell'immagine che il cervello
percepisce maggiormente e sottraendo dati a tutte quelle zone
dell'immagine che non sono riconosciute dal cervello, ad esempio
comprimendo di più le scene veloci con immagini sfumate oppure
quelle completamente buie in cui il cervello umano non è in grado di
estrapolare dettagli.
Con questo metodo pesantemente “lossy” per i dati, ma impercettibile
per gli umani, gli sviluppatori sono riusciti a fare un ulteriore salto in
avanti nella qualità e nel grado di compressione delle immagini in
movimento.