Trattamento e Compressione
di Dati Multimediali
Parte 1
A.A. 2002-2003
Alcuni richiami
9 Un sistema per la compressione-decompressione di immagini consiste di
due distinte unit strutturali: il codificatore (encoder) ed il decodificatore
(decoder):
f ( x, y )
Codificatore
di sorgente
Codificatore
di canale
Canale
Codificatore
Decodificatore
di canale
Decodificatore
di sorgente
f ( x, y )
Decodificatore
Alcuni richiami
9 Se la replica esatta, il sistema si dice error free o information preserving,
in caso contrario esso manifesta un certo grado di distorsione nellimmagine
ricostruita
9 Sia il codificatore che il decodificatore sono costituiti da due sotto-blocchi
relativamente indipendenti
9 In particolare, lencoder costituito dal codificatore di sorgente, che
rimuove le ridondanze presenti nei dati di input generando una
rappresentazione codificata, e dal codificatore di canale, che incrementa
limmunit al rumore del segnale di uscita del codificatore di sorgente
9 Il decodificatore comprende il decodificatore di canale ed il decodificatore
di sorgente, che svolgono le funzioni inverse rispetto a quelle svolte dai
blocchi del codificatore
9 Se il canale di trasmissione senza errore, codificatore e decodificatore di
canale vengono omessi
E. Ardizzone
Alcuni richiami
f ( x, y )
Mapper
Quantizzatore
Codificatore
di simbolo
Canale
Codificatore di sorgente
Alcuni richiami
Alcuni richiami
Canale
Decodificatore
di simbolo
Mapper inverso
f ( x, y )
Decodificatore di sorgente
E. Ardizzone
Alcuni richiami
9 Quando il canale di trasmissione rumoroso, limmunit al rumore del
segnale pu essere incrementata dallazione del codificatore di canale, che
introduce un grado controllato di ridondanza nel segnale compresso dal
codificatore di sorgente, utilizzando tecniche di codifica (per esempio alla
Hamming) gi note da altre discipline
9 Questa operazione, che viene poi invertita in ricezione dal decodificatore
di canale, ovviamente costosa dal punto di vista del rapporto di
compressione complessivo
E. Ardizzone
Alcuni richiami
9 Se E un evento casuale la cui probabilit P(E), linformazione ad esso
associata espressa da
1
I ( E ) = log
= log P ( E )
P( E )
9 I(E), detta anche la auto-informazione di E, si misura in unit di
informazione determinate dalla base del logaritmo. Se essa 2,
linformazione si misura in unit binarie o binit (da binary unit) o bit
9 Se levento la generazione di un simbolo da parte di una sorgente di
informazione discreta e a memoria zero, lentropia o incertezza della
sorgente, ovvero la quantit media di informazione associata alla singola
generazione di un simbolo da parte della sorgente, data da
J
H = P (a j ) log P (a j )
j =1
E. Ardizzone
Alcuni richiami
9 Lentropia si misura in bit ed tanto maggiore quanto pi grande
lincertezza della sorgente, ovvero quanto maggiore linformazione ad
essa associata
9 Se i simboli della sorgente sono equiprobabili, lentropia massima: ad ogni
emissione la sorgente fornisce la massima informazione possibile
9 Supponiamo adesso che ad ogni simbolo della sorgente sia associata una
parola di un codice a lunghezza variabile
9 La lunghezza media delle parole del codice, espressa in bit per simbolo, il
bit rate del sistema di codifica:
J
Lavg = l (a j ) P (a j )
j =1
E. Ardizzone
Alcuni richiami
9 In assenza di rumore nel canale di trasmissione e nel sistema di codifica, un
risultato fondamentale della teoria dellinformazione espresso dal teorema di
Shannon della codifica priva di rumore (noto anche come I teorema di
Shannon): per una sorgente di informazione discreta e a memoria zero, il bit
rate minimo pari allentropia della sorgente
9 Lesistenza di tale limite teorico inferiore consente di stabilire in modo
semplice una misura dellefficienza di una tecnica di codifica a lunghezza
variabile:
=
H
Lavg
E. Ardizzone
10
Alcuni richiami
9 La definizione pu essere generalizzata per valutare lefficienza relativa
del codice C2 rispetto al codice C1:
Lavg1
Lavg1 e Lavg2 sono le lunghezze medie dei codeword
=
dei due codici, e si suppone Lavg2 > Lavg1
Lavg 2
9 Un parametro complementare allefficienza la ridondanza del codice, che
pu essere definita semplicemente come:
= 1
E. Ardizzone
11
12
E. Ardizzone
13
E. Ardizzone
14
15
E. Ardizzone
16
Codifica aritmetica
9 E un altro metodo di compressione che sfrutta la ridondanza della codifica
9 A differenza dei codici Huffman e degli altri codici a lunghezza di parola
variabile finora esaminati, la codifica aritmetica non genera codici a
blocchi, in quanto non esiste pi una corrispondenza uno a uno tra un
simbolo della sorgente e una parola del codice
9 E invece un messaggio, cio una sequenza di simboli della sorgente, a
corrispondere ad una singola parola del codice
9 In tal modo non pi necessario associare ad ogni simbolo della sorgente
un numero intero di bit, come nel caso dei codici Huffman, e pertanto la
codifica aritmetica teoricamente in grado di raggiungere il limite previsto
dal teorema della codifica priva di rumore, costituito dallentropia
9 Sotto questaspetto, stato dimostrato che la lunghezza media delle parole
di un codice Huffman soddisfa la disuguaglianza:
H Lavg < H + p max + 0.086
E. Ardizzone
17
Codifica aritmetica
9 Pertanto il limite superiore della lunghezza media di parola ottenibile con
un codice Huffman dipende dallentropia H e da pmax, la probabilit
massima di occorrenza dei simboli della sorgente
9 Se in particolare le probabilit di occorrenza variano in un range molto
ampio, il limite superiore pu diventare elevato, impedendo una efficace
riduzione della ridondanza della codifica
9 Consideriamo un caso estremo: lalfabeto della sorgente fatto di due soli
simboli, uno con probabilit molto elevata, vicina a 1, laltro con
probabilit molto bassa, vicina a 0
9 Lentropia della sorgente in queste condizioni molto bassa, dato che
lincertezza pochissima. Tuttavia il codice Huffman, necessariamente,
sar costituito da due parole di un bit, una per ciascun simbolo, quindi con
Lavg = 1
9 Pertanto lefficienza del codice praticamente nulla, e la sua ridondanza
quasi del 100%
E. Ardizzone
18
Codifica aritmetica
0.30
[0, 0.30)
S2
S3
0.20
[0.40, 0.60)
S4
0.05
[0.60, 0.65)
S5
0.10
[0.65, 0.75)
S6
0.25
[0.75, 1)
19
Codifica aritmetica
0.3
0.12
0.108
0.1059
0.1058250
S6
0.75
0.225
0.65
0.6
0.195
0.18
S5
0.1058175
S4
S3
0.4
0.12
0.3
0.09
S2
S1
0
0.09
0.102
E. Ardizzone
0.1056
0.105795
20
Codifica aritmetica
21
Codifica aritmetica
22
Codifica aritmetica
23
Codifica aritmetica
24
Codifica aritmetica
Estr. sup.
S1
0.30
Usc. accum.
--
S2
0.09
0.12
--
S3
0.102
0.108
0.10
S4
0.1056
0.1059
0.105
S5
0.105795
0.105825
0.105
S6
0.1058175 0.1058250
0.1058
25
Codifica aritmetica
26
Codifica aritmetica
27
Codifica a dizionario
9 Le tecniche di compressione dictionary-based, molto adoperate nella codifica
di testi, operano rappresentando un simbolo o una stringa di simboli generati
da una sorgente mediante un indice alla parola di un dizionario, costruito a
partire dallalfabeto della sorgente
9 E qualcosa di analogo alla rappresentazione del nome di un mese, per
esempio settembre, con un numero, per esempio 9, ovvero alla
rappresentazione dei dati identificativi di una persona mediante il codice
fiscale
9 Sia la codifica aritmetica che le tecniche alla Huffman, basandosi sulla
probabilit di occorrenza dei simboli da codificare, ipotizzano una sorgente a
memoria zero
9 Questa ipotesi non per verificata in molte applicazioni, come per esempio
nella codifica di testi, in cui la struttura delle frasi o il contesto possono
giocare un ruolo importante
E. Ardizzone
28
Codifica a dizionario
9 Infatti, in qualunque testo molto probabile che la lettera q sia seguita
dalla lettera u, e in certi contesti probabile che una certa parola, per
esempio immagine, sia seguita da altre parole, per esempio a livelli di
grigio
9 La strategia adottata nelle tecniche di codifica a dizionario quella di
costruire un dizionario contenente simboli o sequenze di simboli, cio
frasi, dellalfabeto della sorgente, di uso frequente
9 In fase di compressione, quando si incontra un simbolo o una frase
presente nel dizionario, la si codifica utilizzando lindice corrispondente (o
una sua versione codificata), altrimenti si ricorre ad una rappresentazione
meno efficiente
9 In maniera pi formale, dato una alfabeto A, un dizionario definito come
D = (P,C), dove P un insieme finito di frasi generate a partire da A e C
la funzione di codifica che effettua il mapping di P su un insieme di
codeword
E. Ardizzone
29
Codifica a dizionario
9 E chiaro che la formulazione del dizionario il punto cruciale: se esso
non ben costruito, la procedura di codifica pu dare luogo ad una
espansione dei dati, invece che ad una compressione
9 In base al modo in cui il dizionario costruito, le tecniche di codifica a
dizionario si distinguono in statiche e adattive
9 La codifica a dizionario statica si basa sulluso di un dizionario fisso,
completamente costruito prima del processo di codecodifica, durante il
quale esso si suppone disponibile sia allencoder che al decoder
9 Si tratta quindi di tecniche molto semplici, ma scarsamente flessibili (cio
poco adatte alla applicazione in contesti anche non troppo differenti) e
poco efficienti, se confrontate con le tecniche adattive
9 La codifica a dizionario adattiva ipotizza invece la presenza, prima del
processo di codifica, solo di una versione iniziale del dizionario, che non
fisso e viene aggiornato durante la codifica, adattandosi allinput
E. Ardizzone
30
Codifica a dizionario
9 Le tecniche di codifica a dizionario necessitano in ogni caso di una analisi
dellinput, in grado di rilevare la presenza di stringhe di simboli uguali a
voci del dizionario
9 Vengono normalmente privilegiate tecniche semplici, anche se non ottime,
di parsing, come il cosiddetto greedy parsing, in cui ad ogni passo di
codifica lencoder cerca la stringa di simboli di ingresso pi lunga uguale
ad una voce del dizionario
9 Consideriamo un dizionario caratterizzato da P = {a, b, ab, ba, bb, aab,
bbb}, con una funzione di codifica C espressa in forma tabellare da:
P
C
ab
ba
bb
aab
bbb
10 11
010
0101
01
11
0110
E. Ardizzone
31
Codifica a dizionario
9 Supponiamo inoltre che linput da codificare sia abbaab
9 Utilizzando una tecnica di greedy parsing, la codifica procede accodando
progressivamente i codeword:
C (ab)
C (ba)
C (ab)
010
0101
010
C (bb)
10
01
C (aab)
11
32
Algoritmo LZ77
9 Praticamente tutte le tecniche esistenti di codifica a dizionario adattiva si
basano sui lavori di Ziv e Lempel, che hanno dato luogo a due classi di
algoritmi, rispettivamente noti come LZ77 e LZ78
9 Negli algoritmi LZ77, detti anche a finestra scorrevole, il dizionario
costituito dalla parte pi recentemente codificata del testo di input,
contenuta nel search buffer, mentre la porzione di testo da codificare al
passo corrente presente nel look-ahead buffer
9 Il testo da codificare confrontato con gli item del dizionario: la stringa di
matching pi lunga presente nel dizionario associata ad un indice o
puntatore o token, costituito da una tripla di valori
9 I due buffer insieme costituiscono una finestra, di dimensione fissa, che
scorre sullintero testo di input, dallinizio alla fine, durante il processo di
codifica
9 La dimensione dei due buffer normalmente molto diversa: il search
buffer tipicamente dellordine di qualche migliaio di simboli, il lookahead buffer di qualche decina o centinaio di simboli
E. Ardizzone
33
Algoritmo LZ77
9 Illustriamo lapproccio LZ77 con un esempio. Supponiamo che il testo di
input sia quello indicato, e che ad un certo istante la posizione della
finestra scorrevole sia quella mostrata:
ikaccbadaccbaccbaccgikmoabcc
Search buffer
Look-ahead buffer
34
Algoritmo LZ77
9 Non vi sono in questo caso altri match possibili, pertanto loffset (6) e la
lunghezza della stringa di match (2) vengono assegnati ai primi due item
della tripla che rappresenta il puntatore
9 Il terzo item il codeword assegnato al simbolo (in questo caso c)
immediatamente successivo alla stringa di match nel look-ahead buffer,
qui rappresentato da C(c), essendo C la funzione di codifica
9 Il puntatore, dopo questo passo, assume quindi il valore < 6, 2, C(c) >
9 Il terzo item viene incluso nel puntatore per consentire al decoder di poter
svolgere il suo lavoro anche se non si fosse trovato alcun match nel search
buffer
9 In tal caso, infatti, i due primi item del puntatore sarebbero entrambi 0, e il
terzo item rimarrebbe pari al codeword del primo simbolo del look-ahead
buffer (a questi valori infatti inizializzato il puntatore prima di iniziare la
ricerca)
E. Ardizzone
35
Algoritmo LZ77
9 La finestra scorrevole quindi spostata verso destra di un numero di
posizioni pari a alla lunghezza della stringa di match pi 1 (3
nellesempio):
ikaccbadaccbaccbaccgikmoabcc
9 Il primo simbolo da codificare adesso c
9 Si ha immediatamente un primo match, di lunghezza 1, a distanza 1
9 Il secondo match, a distanza 4, per preferibile, in quanto consente una
stringa di match di lunghezza 5 (la ricerca del match pu infatti continuare
oltre il confine tra i due buffer)
9 C un terzo match possibile, a distanza 5, ma viene scartato come il
primo, in quanto anchesso di lunghezza 1
9 Il puntatore relativo a questo secondo passo assume pertanto il valore < 4,
5, C(g) >
E. Ardizzone
36
Algoritmo LZ77
9 La finestra quindi spostata di 6 posizioni:
ikaccbadaccbaccbaccgikmoabcc
9 Non c alcun matching possibile in questo caso, per cui il valore assunto
dal puntatore <0, 0, C(i) >
9 Il processo di codifica continua allo stesso modo fino al termine dello
stream di input
9 La fase di decodifica molto pi semplice di quella di codifica, in quanto
non comporta la ricerca di situazioni di matching
9 Serviamoci dello stesso esempio per illustrare il processo di decodifica.
Supponiamo pertanto che ad un certo istante il search buffer contenga la
stringa, gi decodificata, a c c b a d a c c, e che si debba decodificare la
tripla < 6, 2, C(c) >
E. Ardizzone
37
Algoritmo LZ77
9 La situazione dunque la seguente:
ikaccbadacc^
9 Ricevuta la tripla < 6, 2, C(c) >, il decoder sposta il puntatore di decodifica,
posizionato allinizio del look-ahead buffer (^), indietro di 6 posizioni
9 Viene cos individuato il simbolo b, e la stringa (lunga 2) che ha inizio a
partire da questa posizione viene copiata nel look-ahead buffer, mentre il
simbolo c, decodificato dal terzo item del puntatore di codifica, viene
scritto nella posizione immediatamente successiva
9 La finestra viene quindi fatta scorrere di 2 + 1 posizioni verso destra:
ikaccbadaccbac^
E. Ardizzone
38
Algoritmo LZ77
9 Il valore del puntatore di codifica, da decodificare a questo punto, < 4, 5,
C(g) >
9 Pertanto il puntatore di decodifica spostato indietro di 4 posizioni,
localizzando il simbolo c, e la stringa lunga 5 che inizia in questa
posizione viene copiata nel look-ahead buffer
9 In realt solo 4 simboli sembrano al momento disponibili (cbac), per, una
volta copiato il primo di essi, la stringa pu essere considerata nella sua
totalit (cbacc)
9 Infine, il simbolo g viene accodato alla stringa appena copiata, e la finestra
viene spostata in avanti di 6 posizioni:
ikaccbadaccbaccbaccg^
9 Il valore del puntatore di codifica, da decodificare a questo punto, < 0, 0,
C(i) >
E. Ardizzone
39
Algoritmo LZ77
9 Il decoder riconosce che non c possibilit di match nel dizionario, e
quindi si limita a copiare nel look-ahead buffer il simbolo i
9 La finestra quindi spostata di 1 posizione:
ikaccbadaccbaccbaccgi^
9 Il decoder a questo punto predisposto per il prossimo passo, e cos via
fino al termine del processo di decodifica, che come mostrato in grado di
ricostruire esattamente lo stream iniziale
9 Allinizio del processo di codifica, il contenuto del search buffer pu
essere del tutto arbitrario, per esempio una sequenza di blank
9 Indichiamo con SB la dimensione del search buffer, con L la dimensione
del look-ahead buffer e con S la dimensione dellalfabeto della sorgente
E. Ardizzone
40
Algoritmo LZ77
9 Se la codifica realizzata in binario naturale, lapproccio LZ77 codifica
stringhe di simboli di lunghezza variabile con codeword di lunghezza fissa
9 Infatti loffset codificato utilizzando log2 SB bit, la lunghezza della
stringa di matching con log2 (SB+L) bit, ogni simbolo con log2 S bit,
dove z indica il pi piccolo intero maggiore di z
9 Dato che sono le sequenze di simboli pi recentemente codificati a
costituire il dizionario, lapproccio LZ77 in grado di adattarsi bene allo
stream di input
9 Daltro canto, se la distanza tra pattern ripetuti nello stream di ingresso
maggiore della dimensione del search buffer, lapproccio diviene
inefficiente, in quanto la struttura dellinput non di fatto utilizzata
9 Per tale motivo, per la compressione di testi la dimensione del search
buffer deve essere consistente: valori tipici sono SB + L 8192
E. Ardizzone
41
Algoritmo LZ78
9 La dimensione (fissa) della finestra scorrevole non pu essere
incrementata a dismisura, in quanto ci comporta un aumento del numero
di bit richiesti per la codifica delloffset e della lunghezza della stringa di
matching, oltre che della complessit del parsing
9 Gli algoritmi LZ78 provvedono a risolvere gli inconvenienti legati alla
dimensione fissa della finestra, eliminando la finestra stessa: tutte le
stringhe di simboli codificate entrano nel dizionario (che quindi non ha
una dimensione fissa), man mano che il processo di codifica procede, fino
a che il dizionario non raggiunge una dimensione massima prefissata
9 A questo punto, se il codice sufficientemente efficiente, il dizionario
viene considerato fisso per il resto della codifica, altrimenti viene azzerato,
e la sua costruzione ricomincia
9 Lapproccio LZ78 utilizza coppie, e non triple, di valori per i puntatori di
codifica: vengono utilizzati solo la posizione del simbolo di inizio della
stringa di matching e il simbolo successivo ad essa, e non la lunghezza che
implicitamente nota al decoder
E. Ardizzone
42
Algoritmo LZ78
Puntatore
1
2
3
4
5
6
7
8
9
10
11
<0,C (b)>
<0,C (a)>
<0,C (c)>
<3,1>
<2,3>
<3,2>
<4,3>
<2,1>
<3,3>
<1,1>
<5,3>
Simboli codificati
b
a
c
cb
ac
ca
cbc
ab
cc
bb
acc
E. Ardizzone
43
Algoritmo LZ78
9 Il primo simbolo da codificare b, per il quale allinizio del processo di
codifica non c alcun match possibile nel dizionario, che vuoto
9 Pertanto il puntatore di codifica relativo al primo simbolo assume il valore
<0, C(b)>, dove 0 indica lassenza di match nel dizionario e C(b) la
parola di codice attribuita a b. b a questo punto nel dizionario
9 Lo stesso processo si ripete per i due simboli seguenti, a e c
9 Il quarto simbolo, c, ha a questo punto un match nel dizionario, litem n. 3,
per cui pu iniziare la ricerca della stringa di match pi lunga possibile,
prendendo in considerazione dapprima il simbolo seguente, b, che viene
concatenato al precedente
9 La stringa di cui cercare il match dunque cb, a partire dalla entry n.3 del
dizionario
9 Nel dizionario non esiste match per la stringa cb, per cui essa viene
inserita nel dizionario come una nuova entry ed codificata con la coppia
<3,1>, dove 3 lindice del primo simbolo di match, c, e 1 lindice del
simbolo seguente nella stringa, b E. Ardizzone
44
Algoritmo LZ78
9 Lo stesso avviene nel passo successivo: per il simbolo a esiste un match,
alla entry 2, ma non per la stringa ac, per cui essa inserita come nuova
entry nel dizionario ed codificata con la coppia <2, 3>
9 Analogamente si procede per la successiva stringa ca
9 Al passo successivo, la stringa di match pi lunga la cb, che a questo
punto gi esiste nel dizionario alla entry n. 4. Non c invece match per la
stringa cbc, che quindi viene aggiunta e codificata con la coppia <4,3>
9 Il processo di codifica prosegue nel modo indicato fino al termine dello
stream di input
9 E da notare che man mano che la codifica procede, aumenta la lunghezza
delle entry nel dizionario, e quindi lefficienza del processo di codifica
9 Durante il processo di decodifica, il dizionario viene costruito in maniera
analoga, a partire dalle coppie progressivamente ricevute, e nello stesso
tempo il testo viene decodificato
E. Ardizzone
45
Algoritmo LZ78
9 Nellesempio, la prima coppia ricevuta la <0,C(b)>. La presenza dello 0
informa il decoder che non c match, per cui esso utilizza C(b) per
decodificare b, che diviene anche la prima entry del dizionario
9 Analogamente per i successivi simboli, a e c
9 Quando riceve la coppia <3,1>, il decoder apprende che i successivi
simboli del testo sono la entry n.3 e la entry n.1 del dizionario, cio c e b
9 La stringa cb quindi decodificata, ed inserita come nuova entry nel
dizionario
9 Analogamente per le successive stringhe, ac e ca
9 Quando riceve la coppia <4, 3>, il decoder apprende che i successivi
simboli del testo sono la entry n. 4 (stringa cb) e la entry n. 3 (simbolo c),
per cui cbc decodificata e appesa al dizionario
9 Il processo continua in modo analogo fino alla completa ricostruzione del
testo
E. Ardizzone
46
Algoritmo LZW
9 Agli approcci LZ77 e LZ78, essenzialmente teorici, fu data consistenza
applicativa da parte di Welch negli anni 80
9 Lalgoritmo risultante, noto come LZW, oggi comunemente adoperato in
molte applicazioni (per esempio, in alcuni strumenti di compressione di
Unix, nei formati di immagini GIF e TIFF, in alcuni standard di
compressione dati per modem)
9 La principale variante introdotta nellalgoritmo LZW leliminazione del
secondo elemento della coppia utilizzata come puntatore di codifica,
ottenendo cos un significativo incremento dellefficienza di codifica
9 In altre parole, vengono inviati al decoder solo gli indici relativi alle entry
del dizionario
9 A tal fine, viene predisposto un dizionario iniziale, che consiste
normalmente dei soli simboli dellalfabeto utilizzato dalla sorgente
9 La codifica comincia prendendo in considerazione il primo simbolo del
testo di input
E. Ardizzone
47
Algoritmo LZW
9 Questo simbolo ha ovviamente una entry nel dizionario (iniziale), per cui
lo si pu ritenere linizio di una stringa di matching, che comprende anche
il simbolo del testo immediatamente successivo
9 I due simboli vengono rispettivamente detti simbolo matched e simbolo
cascaded
9 La stringa cos ottenuta non ha match nel dizionario, al quale viene
aggiunta, e viene codificata utilizzando lindice del simbolo matched
9 Per illustrare lalgoritmo LZW, supponiamo di dover codificare il testo
accbadaccbaccbacc
9 Lalfabeto di sorgente dunque S = {a, b, c,d}
9 Lesempio illustrato nella tabella seguente, che mostra anche il
dizionario iniziale
E. Ardizzone
48
Algoritmo LZW
Indice
Entry
1
2
3
4
a
b
c
d
5
6
7
8
9
10
11
12
13
14
15
ac
cc
cb
ba
ad
da
acc
cba
accb
bac
Simboli di input
accbadaccbaccbacc
Codifica
Dizionario
iniziale
a
c
c
b
a
d
a,c
c,b
a,c,c
b,a
E. Ardizzone
1
3
3
2
1
4
5
7
11
8
49
Algoritmo LZW
9 Quando il primo simbolo, a, si presenta in input, lencoder trova un match
alla entry n. 1 del dizionario, e cerca quindi di costruire una stringa di
match pi lunga, utilizzando il simbolo di input immediatamente
successivo, c
9 La stringa ac non ha match, per cui viene aggiunta al dizionario (entry n.
5), mentre lindice del simbolo matched, a, viene codificato
9 Il secondo simbolo, c, presente nel dizionario, quindi viene costruita una
possibile stringa di match, utilizzando il simbolo successivo, c
9 La stinga cc non ha match, per cui viene aggiunta al dizionario (entry n. 6),
mentre lindice del simbolo matched, c, viene codificato
9 Il processo di codifica continua nello stesso modo. Per esempio, la entry n.
11 del dizionario costruita partendo da un simbolo di input che a. Esso
ha un entry nel dizionario, per cui si considera ac come una possibile
stringa di match
E. Ardizzone
50
Algoritmo LZW
9 Dato che anche la stringa ac ha un entry nel dizionario, si amplia la stringa
di matching, che diviene acc
9 La stringa acc non ha match, per cui viene aggiunta al dizionario (entry n.
11) e codificata mediante lindice della stringa matched, 5
9 Come per lalgoritmo LZ78, al progredire della codifica gli item del
dizionario diventano pi lunghi, migliorando lefficienza della codifica
9 In fase di decodifica, disponibile il dizionario iniziale
9 Allarrivo del primo indice, 1, il decoder decodifica il simbolo
corrispondente, a
9 Allarrivo del secondo indice, 3, il decoder decodifica il simbolo
corrispondente, c.
9 Inoltre, conoscendo la regola usata dallencoder, il decoder sa anche che i
due simboli devono essere concatenati in una stringa, ac, che va aggiunta
al dizionario, come entry n. 5
E. Ardizzone
51
Algoritmo LZW
9 In generale, ad ogni passo di decodifica il decoder deve partire dallultima
delle due stringhe di simboli utilizzate al passo precedente, ai fini della
costruzione della stringa, detta stringa presente, da aggiungere al
dizionario, mentre lindice appena ricevuto, detto indice presente,
utilizzato per individuare nel dizionario la stringa di simboli da aggiungere
al testo decodificato. E il primo di questa stringa di simboli che viene
utilizzato per completare la stringa presente
9 Pertanto, allarrivo del terzo indice, 3, il decoder decodifica il simbolo
corrispondente. Inoltre aggiunge la stringa cc al dizionario, come entry
n.6, e cos via
9 In questo modo il decoder pu costruire un dizionario esattamente uguale a
quello utilizzato in fase di codifica, e contemporaneamente decodificare il
testo
E. Ardizzone
52
Codifica Bit-Plane
9 Una tecnica di codifica (senza perdita) in grado di ridurre la ridondanza
interpixel presente in una immagine a livelli (di grigio o di colore) consiste
nella rappresentazione dellimmagine mediante un set di immagini binarie
e nella codifica individuale di queste ultime, con metodi di compressione
appropriati per le immagini a due livelli (compressione binaria)
9 La rappresentazione di una immagine a livelli mediante pi immagini
binarie pu essere considerata una derivazione diretta della
rappresentazione per piani di bit che abbiamo gi analizzato, e che viene
adesso brevemente richiamata
9 Una immagine a 8 bit/pixel si pu considerare costituita da 8 piani di 1 bit,
dal piano 0 (che contiene il bit meno significativo di ogni pixel) al piano 7
(che contiene il bit pi significativo di ogni pixel)
9 Per esempio, in unimmagine i cui primi pixel abbiano rispettivamente i
valori 192, 65, 63, 64, .... si ha:
E. Ardizzone
53
Codifica Bit-Plane
Decimale
192 65 63 64 .
Binario
Piano
1 0 0 0.....
7
1 1 0 1.
6
0 0 1 0.
5
0 0 1 0.
4
0 0 1 0.
3
0 0 1 0.
2
0 0 1 0.
1
0 1 1 0.
0
9 Pi formalmente, la scomposizione una conseguenza del fatto che, per una
immagine a livelli di grigio a m bit/pixel, la rappresentazione polinomiale dei
livelli di grigio :
a m 1 2 m 1 + a m 2 2 m 2 + K + a1 21 + a0 2 0
E. Ardizzone
54
Codifica Bit-Plane
Un esempio:
1
E. Ardizzone
55
Codifica Bit-Plane
9 I coefficienti ai da ogni pixel dellimmagine originaria sono pertanto anche i
valori dei pixel ad esso corrispondenti nelle m immagini binarie nelle quali
scomposta limmagine di partenza
9 Se la compressione dellimmagine a livelli viene effettuata applicando
metodi di compressione binaria alle immagini binarie componenti, chiaro
che il rapporto di compressione ottenibile legato alla efficienza di questi
ultimi
9 Daltra parte, in una immagine binaria lo sfruttamento della ridondanza
interpixel implicitamente associato alla ripetizione di pixel dello stesso
valore: ampie regioni tutte bianche o tutte nere possono essere codificate con
pochi bit (al limite uno solo: se tutta limmagine bianca oppure nera, basta
un solo bit, 1 oppure 0, per rappresentarla)
9 Viceversa, se nellimmagine binaria sono presenti frequenti cambiamenti del
valore dei pixel, per esempio lungo una linea, non possibile ottenere
codifiche efficienti
E. Ardizzone
56
Codifica Bit-Plane
57
Codifica Bit-Plane
OR esclusivo
g i = ai ai +1 , per 0 i m 2
g m 1 = am 1
E. Ardizzone
58
Codifica run-length
9 Uno dei metodi pi noti di compressione di immagini binarie si basa sulla
rappresentazione di ogni riga dellimmagine mediante la sequenza delle
lunghezze delle successioni (o run) di pixel consecutivi bianchi o neri
9 Il metodo, detto della codifica run - length (RLC o RLE), si basa sulla
osservazione che una immagine binaria contiene regioni di intensit
costante, per cui una rappresentazione pi efficiente pu essere costruita
effettuando un mapping dei pixel presenti lungo ogni riga in una sequenza
di coppie del tipo (g1, r1), (g2, r2), .
9 Qui gi li-mo livello di grigio incontrato lungo la riga dellimmagine, e ri
la lunghezza delli-mo run
9 La rappresentazione mediante lunghezze di run ovviamente non visuale
9 Si tratta di una rappresentazione molto efficiente, soprattutto nella codifica
di documenti finalizzata alla trasmissione via fax, che in genere avviene
mediante immagini a risoluzione abbastanza elevata
E. Ardizzone
59
Codifica run-length
9 La RLC che sfrutta solo la correlazione tra pixel lungo la stessa riga
detta RLC 1-D, mentre la RLC 2-D sfrutta anche la correlazione verticale
RLC 1-D
9 In linea di principio, ogni gruppo di 0 o di 1 incontrati in una scansione da
sinistra a destra viene codificato mediante una coppia di interi, del tipo (gi,
ri)
9 Per esempio, una riga con il profilo di grigio indicato
diventa una sequenza di coppie valore
220
- lunghezza di run:
(1, 85), (0, 63), (1, 27), (0, 213), (1, 92), (0, 32)
50
0
84
147 174
387
479 511
9 In pratica, dato che i valori dei pixel possono essere 1 oppure 0, basta
codificare le lunghezze di run e stabilire una convenzione per determinarne il
E. Ardizzone
60
valore
Codifica run-length
9 Gli approcci pi comuni per la determinazione del valore di un run sono:
9 la specifica del valore del primo run di ogni riga
9 lassunzione di un run bianco iniziale, di lunghezza eventualmente
nulla
9 Alla conclusione di ogni riga, un codeword speciale, noto al decoder,
segnala la situazione di fine linea (EOL, End -Of -Line)
9 Oltre alla compressione diretta, si pu ottenere una ulteriore riduzione dei
dati effettuando una codifica a lunghezza variabile delle lunghezze di run
9 A tale scopo, le possibili lunghezze di run possono essere utilizzate per
costruire un alfabeto di sorgente, di questi simboli si possono calcolare le
probabilit, etc.
9 In effetti, misure effettuate su tipici documenti binari mostrano che il
massimo dellefficienza di compressione si raggiunge quando run bianchi
e run neri sono codificati separatamente
E. Ardizzone
61
Codifica run-length
9 Se aj un simbolo che indica un run nero di lunghezza j, con j = 1, , J ,
essendo J la massima lunghezza dei run neri, si pu stimare la probabilit
di emissione di aj da parte di una immaginaria sorgente di run neri, PB(aj),
dividendo il numero di run neri di lunghezza j presenti nellimmagine per
il numero totale di run neri
9 Si pu quindi stimare lentropia di questa sorgente di run neri:
J
H B = PB (a j ) log PB (a j )
j =1
LB = jPB ( a j )
j =1
62
Codifica run-length
63
Codifica run-length
9 Si ricorre quindi ad un codice Huffman modificato, detto MH, nel quale,
se la lunghezza di run minore di 63, il codeword desunto direttamente
dalla tabella dei codici di terminazione, di cui viene di seguito mostrato un
frammento:
Indicando con r la lunghezza
Lung. run
Run bianchi
Run neri
di run, si ha in altri termini:
0
00110101
0000110111
1
2
3
4
5
6
7
8
61
62
63
000111
0111
1000
1011
1100
1110
1111
10011
.
00110010
00110011
00110100
010
11
10
011
0011
0010
00011
000101
.
000001011010
000001100110
000001100111
E. Ardizzone
r=
M 64 + T
per r 63
per r > 63
dove T = 0, , 63 ed detta
run-length di terminazione,
mentre M = 1, , 27 e M x 64
detta run-length di makeup
64
Codifica run-length
9 Nel primo caso, r direttamente rappresentata da un codice di
terminazione, mentre nel secondo caso r rappresentata da un codeword
di makeup (corrispondente nella tabella dei codici di makeup, parte della
quale riportata qui sotto, alla lunghezza di makeup pi grande non
superiore ad r), seguito da un codeword di terminazione che rappresenta la
differenza tra la lunghezza r e la lunghezza di makeup
Lung. run
64
128
192
256
.
1600
1664
1728
EOL
Run bianchi
11011
10010
010111
0110111
.
010011010
011000
010011011
Run neri
0000001111
000011001000
000011001001
000001011011
.
0000001011011
0000001100100
0000001100101
00000000001
00000000001
E. Ardizzone
Codifica run-length
9 Lo standard richiede che ogni linea cominci con un run bianco, eventualmente
di lunghezza nulla, mentre il codice di EOL ovviamente unico
RLC 2-D
9 Per aumentare lefficienza, la codifica RLC 2-D sfrutta la correlazione tra i
pixel posti su righe consecutive dellimmagine, che deriva dalla elevata
probabilit della continuit verticale di regioni bianche o nere
9 Esistono diverse tecniche per lestensione al caso 2-D dei concetti che stanno
alla base della codifica run-length, in particolare ne vedremo una, della
tipologia delle codifiche ad indirizzo relativo (RAC), nella versione adottata
per la codifica fax, denominata MR (Modified READ, dove READ sta per
Relative Element Address Designate)
E. Ardizzone
66
Codifica run-length
9 La tecnica opera su due linee consecutive di scansione, la linea di
riferimento (reference line), che si suppone gi codificata, e la linea da
codificare (coding line):
b1
b2
9 Un gruppo di cinque pixel, detti di
rif.
variazione, devono essere identificati nelle
cod.
due linee, ad ogni passo di codifica
a0
a1
a2
Modo pass
9 Le loro posizioni relative definiscono infatti
b2
b1
quale di tre possibili modi (pass, verticale,
rif.
orizzontale) deve essere usato per la
cod.
a0
a1
a2
codifica
Modo verticale
9 Un pixel di variazione definito come il
primo pixel di un run (nero o bianco)
b2
b1
incontrato durante la scansione di una riga
rif.
cod.
da sinistra a destra
a0
a1
Modo orizzontale
a2
E. Ardizzone
67
Codifica run-length
Codifica run-length
9 I tre modi di codifica possibili sono:
Pass: Se b2 a sinistra di a1, significa che il run nella linea di riferimento che
comincia con b1 non adiacente al run nella linea di codifica che comincia
con a1 (i due run sono dello stesso colore). Questo il modo di codifica di
pass: viene generato dallencoder il codeword speciale 0001. In tal modo il
decoder viene a sapere che il run che inizia con a0 non termina nel pixel sotto
b2. Esattamente in questo pixel sotto b2 viene posizionato a0 per il prossimo
passo
b1
rif.
cod.
a0
b2
a1
Modo pass
a2
E. Ardizzone
69
Codifica run-length
Verticale: Se la distanza relativa lungo la direzione orizzontale tra a1 e b1
non maggiore di 3 pixel, il modo di codifica quello verticale: la
posizione di a1 codificata in relazione alla posizione di b1. A ciascuno dei
sette casi possibili viene assegnato un codeword, e infine a0 per il prossimo
passo posizionato in a1
Orizzontale: Se la distanza relativa lungo la direzione orizzontale tra a1 e b1
maggiore di 3 pixel, il modo di codifica quello orizzontale. Viene usata
una tecnica RLC 1-D
b1
rif.
cod.
a0
a1
Modo verticale
b2
b1
b2
a2
rif.
cod.
E. Ardizzone
a0
a1
Modo orizzontale
a2
70
Codifica run-length
Codeword
Pass
0001
Orizzontale
001 + M(a0a1)+M(a1a2)
Verticale
a1b1 = 0
a1b1 = 1
a1b1 = 2
a1b1 = 3
a1b1 = -1
a1b1 = -2
a1b1 = -3
1
011
000011
0000011
010
000010
0000010
E. Ardizzone
71
Codifica run-length
a0 posto
in a1
Modo
orizzontale
a0 posto a
sinistra del
primo pixel
a0 posto
sotto b2
Modo
verticale
a1, b1 e b2
sono
identificati
Modo
pass
a2
identificato
a0 posto
in a2
si
si
b2 a sinistra
di a1
no
si
a 1 b1 3
no
E. Ardizzone
Fine linea
di codifica
Fine
linea ?
no
72
Codifica run-length
9 Per completare il discorso sugli standard di codifica di immagini binarie per
la trasmissione in facsimile sulla rete telefonica, c da dire che gli apparati
fax sono classificati in quattro gruppi dal CCITT (Comit Consultatif
International de la Tlgraphie et de la Tlphonie), oggi ITU (International
Telecommunication Union)
9 I primi due utilizzano tecniche analogiche, con velocit di trasmissione di
una pagina A4 di 6 e 3 minuti, rispettivamente, e risoluzione di 3.85
linee/mm
9 Il Gruppo 3 e il Gruppo 4 sono quelli che ci interessano di pi. Usano
tecniche digitali di codifica, con campionamento di 1728 pixel per linea, e
velocit di una pagina al minuto. Sono oggetto di standardizzazione nelle
raccomandazioni CCITT T4 e T6
9 I due standard si differenziano per la tecnica di codifica utilizzata: il Gruppo
3 usa una RLC 1-D in cui le ultime K - 1 linee di ogni gruppo di K linee sono
(opzionalmente) codificate in 2-D (K = 2 oppure 4)
E. Ardizzone
73
Codifica run-length
9 Invece il Gruppo 4 usa soltanto la RLC-2D
9 La tecnica base di codifica la Huffman modificata (MH) precedentemente
illustrata
9 Pu essere interessante notare che durante il processo di standardizzazione
stato necessario valutare diverse tecniche alternative di compressione binaria
9 A tal fine, 8 documenti di test, rappresentativi di varie combinazioni di testo,
disegni, immagini, sono stati utilizzati per le valutazioni
9 I due standard CCITT lavorano abbastanza bene su tutti i documenti di test,
con rapporti di compressione dellordine di 15:1
9 Il difetto fondamentale degli algoritmi utilizzati negli standard CCITT di
compressione di immagini a due livelli la non adattivit, che li rende poco
efficienti in alcune situazioni critiche, in cui invece che una compressione si
pu avere una espansione dei dati, e incapaci di codificare immagini a mezzi
toni
E. Ardizzone
74
Codifica run-length
9 E stato in effetti gi da da tempo concluso un nuovo processo di
standardizzazione, affidato ad un comitato denominato JBIG (Joint Bilevel
Imaging Group), di tecniche di compressione di immagini binarie
9 Lo standard JBIG (oggi noto come JBIG-1, perch nel frattempo stato
avviata una revisione dello standard, che porter ad una nuova versione
nota come JBIG-2) utilizza una variante adattiva della tecnica RLC - 2D,
con codifica aritmetica per la parte a lunghezza variabile
9 Esso risulta molto pi efficiente degli standard CCITT, ottenendo
miglioramenti sulle immagini test dal 20 all80% del rapporto di
compressione, e riuscendo a comprimere anche immagini a mezzi toni
9 In realt JBIG pu essere anche visto come uno standard per immagini a
livelli, con un numero limitato di bit/pixel, pensate scomposte in piani di bit
(alla Gray)
9 Altre informazioni sugli standard JBIG possono essere reperite a partire dal
sito http://www.jpeg.org/public/jbighomepage.htm
E. Ardizzone
75
76
77
E. Ardizzone
78
fn
+
Predittore
Intero pi
vicino
E. Ardizzone
en
Codificatore
di simbolo
Immagine
compressa
fn
79
Decodificatore
di simbolo
en
fn
Immagine
di output
+
fn
Predittore
80
fn = round i f n i
i =1
9 m lordine del predittore lineare, round indica larrotondamento allintero
pi vicino, e i coefficienti i, per i = 1, , m, sono i coefficienti di
predizione
E. Ardizzone
81
i =1
82
83
Originale
Errore di predizione
E. Ardizzone
E. Ardizzone
85
86
fn +
en
fn
e&n
Quantizzatore
Predittore
f&n
Codificatore
di simbolo
Immagine
compressa
87
Decodificatore
di simbolo
e&n
f&n
Immagine
di output
+
f&n = e&n + fn
fn
Predittore
+
e&n =
E. Ardizzone
per en > 0
altrimenti
88
Modulazione delta
6.5
0
- 6.5
f&
89
Modulazione delta
Input
n
0
1
2
3
14
15
16
17
18
19
...
f
14
15
14
15
29
37
47
62
75
77
Encoder
f
-14.0
20.5
14.0
.
20.5
27.0
33.5
40.0
46.5
53.0
..
e&
-1.0
-6.5
1.0
.
8.5
10.0
13.5
22.0
28.5
24.0
..
-6.5
-6.5
6.5
.
6.5
6.5
6.5
6.5
6.5
6.5
.
Decoder
Errore
f&
f&
f f&
14.0
20.5
14.0
20.5
..
27.0
33.5
40.0
46.5
53.0
59.6
..
-14.0
20.5
14.0
.
20.5
27.0
33.5
40.0
46.5
53.0
..
14.0
20.5
14.0
20.5
.
27.0
33.5
40.0
46.5
53.0
59.6
.
0.0
-5.5
0.0
-5.5
.
2.0
3.5
7.0
15.5
22.0
17.5
.
9 La codifica inizia con il trasferimento diretto, senza errore, del primo pixel al
decoder. Occorre infatti stabilire delle condizioni iniziali sia per il codificatore
che per il decodificatore
E. Ardizzone
90
Modulazione delta
9 Le successive uscite dellencoder e del decoder possono a questo punto
essere calcolate, in sequenza, a partire dalle equazioni gi scritte, e qui
ripetute per comodit:
en = f n fn
fn = f&n 1
+ 6.5 per en > 0
e&n =
6.5 altrimenti
f&n = e&n + fn
Modulazione delta
9 Questo causa una distorsione nellimmagine decompressa, nota come
slope overload
9 Inoltre, nelle regioni con livello di grigio sufficientemente regolare, come
tra n = 0 e n = 3, il valore di risulta troppo grande per rappresentare le
variazioni di grigio pi piccole, il che causa la comparsa di rumore
granulare nellimmagine di uscita
9 Conseguenze della quantizzazione sono quindi il blurring delle immagini,
in corrispondenza ai contorni degli oggetti, e la presenza di rumore nelle
regioni molto regolari
9 Questi due tipi di distorsione sono comuni a tutti i tipi di codifica
predittiva con perdita, e si manifestano in modo direttamente legato ai
metodi di predizione e quantizzazione adoperati
9 E pertanto importante accennare alle tecniche di progetto di predittori e
quantizzatori
E. Ardizzone
92
Predittori ottimi
{[
]}
i =1
93
Predittori ottimi
E{ f n 1 f n 1 } E{ f n 1 f n 2 }
E{ f f } E{ f f }
n 2 n 1
n2 n2
R=
M
M
E{ f f } E{ f f }
n m n 1
nm n2
ed r e sono i vettori ad m elementi:
E{ f n 1 f n m }
L E{ f n 2 f n m }
L
M
L E{ f n m f n m }
L
r = [E{ f n f n 1 } E{ f n f n 2 } L E{ f n f n m }]
= [1 2 L m ]
E. Ardizzone
94
Predittori ottimi
9 I coefficienti che rendono ottimo il predittore possono pertanto essere
determinati per ogni immagine di input, e dipendono soltanto dalle
autocorrelazioni fra i pixel dellimmagine
9 Naturalmente un approccio locale come questo, in cui i coefficienti di
autocorrelazione sono calcolati per ogni immagine, computazionalmente
insostenibile
9 Si preferisce allora calcolare un set di coefficienti globali, assumendo
valido un certo modello dellimmagine, per esempio in quanto
rappresentativo di una certa categoria di immagini, e utilizzando le
autocorrelazioni calcolate a partire da esso nelle equazioni precedenti
9 Per esempio, lequazione di un predittore lineare (spaziale) del 4 ordine :
f ( x, y ) = 1 f ( x, y 1) + 2 f ( x 1, y 1) + 3 f ( x 1, y ) + 4 f ( x 1, y + 1)
E. Ardizzone
95
Predittori ottimi
9 La predizione quindi effettuata sulla base di alcuni degli 8-vicini del
pixel corrente:
9 Nellipotesi che la funzione di autocorrelazione
y
dellimmagine sia separabile:
E{ f ( x, y ) f ( x i, y j )} = 2 vi hj
x
2 = v h 3 = v 4 = 0
9 Infine, per garantire un valore delluscita del predittore compatibile con la
dinamica dellimmagine normalmente richiesto che:
m
i =1
1
E. Ardizzone
96
Predittori ottimi
9 A titolo di esempio, consideriamo lapplicazione dei quattro seguenti
predittori allimmagine mostrata, sempre nellipotesi di errore di
quantizzazione nullo:
1) f ( x, y ) = 0.97 f ( x, y 1)
2)
f ( x, y ) = 0.5 f ( x, y 1) + 0.5 f ( x 1, y )
3)
f ( x, y ) = 0.75 f ( x, y 1) + 0.75 f ( x 1, y ) +
0.5 f ( x 1, y 1)
4)
f ( x, y ) = 0.97 f ( x, y 1) se h v
0.97 f ( x 1, y ) altrimenti
dove h = f ( x 1, y ) f ( x 1, y 1) e v = f ( x, y 1) f ( x 1, y 1)
sono i gradienti orizzontale e verticale nel punto (x,y)
E. Ardizzone
97
Predittori ottimi
9 Il predittore 4) un esempio di predittore adattivo, progettato per un migliore
rendimento in corrispondenza ai contorni grazie alla misura locale delle
propriet direzionali dellimmagine
9 Gli errori di predizione, in forma di immagini di intensit, sono mostrati di
seguito:
Quantizzazione
4
3
-3.5
2
1
-1.5 -0.5
0.5 1.5 2.5 3.5
-1
-2
-3
-4
99
Quantizzazione
9 Indicando con di il generico livello di decisione, con yi il generico livello
di ricostruzione, e con il passo del quantizzatore, lequazione del
quantizzatore la seguente, avendo indicato con Q(x) la dipendenza da x:
yi = Q( x) per x (d i , d i +1 ]
9 Gli intervalli di input sono per convenzione semi-aperti a sinistra
9 Nellesempio precedente, = 1, e i = 1, , 9
9 Il quantizzatore uniforme se tutti i livelli di decisione, con la possibile
eccezione del primo e dellultimo, sono uniformemente distribuiti sullasse
x, e lo stesso avviene per i livelli di ricostruzione. Inoltre, ogni livello
interno di ricostruzione la media aritmetica dei livelli di decisione del
corrispondente intervallo di input
9 Il quantizzatore uniforme mostrato in precedenza denominato midtread:
uno dei livelli di ricostruzione pari a 0
E. Ardizzone
100
Quantizzazione
-3 -2 -1
101
Quantizzazione
102
Quantizzatori ottimi
9 In questo quadro, il problema del progetto ottimo pu essere cos espresso:
9 Per una data densit di probabilit p(x) dei livelli di grigio di ingresso al
quantizzatore, determinare numero e valori dei livelli di ricostruzione e di
decisione che soddisfano il prescelto criterio di ottimizzazione, di natura
soggettiva (psicovisuale) o oggettiva (statistica)
9 Rimanendo in questultimo ambito, un criterio di ottimizzazione spesso
utilizzato la minimizzazione dellerrore di quantizzazione
9 Lerrore di quantizzazione definito come la differenza tra il segnale di
input e luscita quantizzata:
eq = x Q ( x ) = x y i
9 Si consideri come al solito la forma quadratica media (rms) dellerrore:
N d i +1
MSEq = E {( x yi ) 2 } = ( x yi ) 2 p ( x)dx
i =1 d i
E. Ardizzone
103
Quantizzatori ottimi
9 Le condizioni di ottimo, ricavate separatamente da Max e Loyd nelle ipotesi
di p(x) con simmetria pari e di Q(x) con simmetria dispari, definiscono il
cosiddetto quantizzatore di Lloyd-Max a N livelli:
d i +1
1)
d ( x yi ) p( x)dx = 0
per i = 1,..., N
2)
1
d i = ( yi 1 + yi ) per i = 2,..., N
2
3)
d1 = ; d N +1 = +
104
Quantizzatori ottimi
9 Soluzioni numeriche sono state comunque individuate per le densit di
probabilit pi comuni (uniforme, gaussiana, laplaciana, etc.)
9 Per esempio, per una p(x) laplaciana:
2x
1
p( x) =
exp
2
i quantizzatori di Lloyd-Max a 2, 4 e 8 livelli, che assicurano rispettivamente
un bit rate fisso di 1, 2 e 3 bpp, sono i seguenti (supponendo = 1):
N
2
di
yi
-0.707 1.414
0 0.707
-1.087
0
1.087
-1.631 1.087
-0.544
0.544
1.631
E. Ardizzone
di
yi
-2.994 0.731
-2.285 -1.576
-1.181 -0.785
-0.504 -0.222
0 0.222
0.504 0.785
1.181 1.576
2.285 2.994
105
Quantizzatori ottimi
9 In caso di pdf a varianza non unitaria, i livelli di decisione e di ricostruzione si
calcolano moltiplicando i valori tabulati per la deviazione standard della pdf in
considerazione
9 Quanto visto finora attiene a quantizzatori uniformi. Si pu in realt
dimostrare come, ad eccezione del caso in cui la distribuzione dellinput sia
uniforme, le prestazioni dei quantizzatori non uniformi risultino migliori
9 Per i quantizzatori non uniformi sono state trovate condizioni di ottimo
analoghe a quelle viste nel caso uniforme, che si trovano tabulate nella
letteratura specializzata
9 Qualche vantaggio in pi si pu ottenere rendendo adattiva la quantizzazione,
ossia regolando i livelli di quantizzazione sulla base delle caratteristiche locali
dellimmagine: in teoria, regioni lentamente variabili vanno quantizzate pi
finemente, regioni con variazioni di grigio molto rapide possono essere
quantizzate pi grossolanamente
E. Ardizzone
106
Quantizzatori ottimi
9 Solo un approccio di questo tipo pu simultaneamente ridurre rumore
granulare e slope overload, ovviamente al prezzo di una maggiore
complessit del quantizzatore
9 Un semplice metodo di quantizzazione adattiva pu essere implementato
nel modo seguente
9 Limmagine viene divisa in blocchi di 16 pixel, e per ogni blocco viene
scelto il migliore, nel senso della minimizzazione dellerrore di
quantizzazione, tra quattro possibili quantizzatori
9 I quattro possibili quantizzatori sono versioni scalate dei quantizzatori di
Lloyd-Max, ottenute moltiplicando i valori visti in precedenza per quattro
fattori di scala, rispettivamente: 0.5, 1.0, 1.75, 2.5
9 E ovviamente necessario consentire al decoder di individuare quale
quantizzatore stato utilizzato, a tal fine un codice a due bit aggiunto ai
bit che codificano il blocco di 16 pixel
E. Ardizzone
107
Quantizzatori ottimi
Quantizzatore L-M
Quantizzatore adattivo
30.88
6.86
4.08
7.49
3.22
1.55
14.59
6.94
4.09
7.53
2.49
1.12
3
4
9.90 4.30
38.18 9.25
2.31
3.36
4.61
11.46
1.70
2.56
0.76
1.14
Compressione:
8:1
4:1
108
Quantizzatori ottimi
9 Come si pu notare, almeno da un punto di vista quantitativo lerrore
compiuto utilizzando il quantizzatore adattivo a due livelli di pochissimo
superiore a quello del quantizzatore non adattivo a quattro livelli, mentre
addirittura il quantizzatore adattivo a quattro livelli si comporta meglio di
quello non adattivo a otto livelli
9 Non esistono invece significative differenze nel comportamento dei
quattro predittori
9 Infine, il netto miglioramento nella performance dei quantizzatori dal
punto di vista dellerrore avviene a spese di un non sostanziale
peggioramento del bit rate
E. Ardizzone
109