COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei...

23
2 COMPRESSIONE DI IMMAGINI E VIDEO 1 Introduzione al capitolo L’importanza della comunicazione visiva è cresciuta in modo straordinario negli ultimi decenni; i progressi fatti nella microelettronica applicata ai computer uniti alla creazione di reti con alte capacità di trasferimento d’informazioni costituiscono oggi le basi di un’infrastruttura che ci condurrà in una nuova era delle telecomunicazioni. Parallelamente, l’emergere di nuove applicazioni come la video conferenza, i terminali wireless, la comunicazione audio-visiva tramite Internet stanno comportando all’interno della nostra società una vera rivoluzione nel campo professionale, educativo e ludico. Se da un lato l’informazione video di tipo digitale porta molti vantaggi in termini di affidabilità, qualità e flessibilità di applicazione, tuttavia lo svantaggio principale consiste nel bitrate eccessivamente elevato per i mezzi di memorizzazione e per i canali di trasmissione attualmente disponibili: ad esempio un segnale televisivo PAL su 8 bit richiederebbe un bitrate di circa 200 Mbit/s mentre un segnale ad alta definizione circa 1 Gbit/s. Si rende dunque necessaria una compressione dei dati sia con perdita di informazione che senza, e a questo scopo sono state sviluppate potenti tecniche ormai indispensabili anche laddove i canali di comunicazione sono in via di ampliamento grazie allo sfruttamento di moderne tecnologie come le fibre ottiche e le comunicazioni satellitari. In questo capitolo tratteremo brevemente delle tecniche di compressione d’immagine e di video standard dalle quali abbiamo preso spunto e con le quali ci siamo confrontati; l’algoritmo da noi sviluppato, che verrà trattato nel capitolo successivo, si collocherà sostanzialmente a cavallo tra il JPEG standard, oggi ampiamente utilizzato per l’image editing, la trasmissione di immagini su Internet e la fotografia digitale, e l’MPEG2, sfruttato invece nel video editing, nelle trasmissioni TV satellitari o su cavo e nei DVD.

Transcript of COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei...

Page 1: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

2

COMPRESSIONE DI IMMAGINI E VIDEO

1 Introduzione al capitolo L’importanza della comunicazione visiva è cresciuta in modo straordinario negli ultimi decenni; i progressi fatti nella microelettronica applicata ai computer uniti alla creazione di reti con alte capacità di trasferimento d’informazioni costituiscono oggi le basi di un’infrastruttura che ci condurrà in una nuova era delle telecomunicazioni. Parallelamente, l’emergere di nuove applicazioni come la video conferenza, i terminali wireless, la comunicazione audio-visiva tramite Internet stanno comportando all’interno della nostra società una vera rivoluzione nel campo professionale, educativo e ludico. Se da un lato l’informazione video di tipo digitale porta molti vantaggi in termini di affidabilità, qualità e flessibilità di applicazione, tuttavia lo svantaggio principale consiste nel bitrate eccessivamente elevato per i mezzi di memorizzazione e per i canali di trasmissione attualmente disponibili: ad esempio un segnale televisivo PAL su 8 bit richiederebbe un bitrate di circa 200 Mbit/s mentre un segnale ad alta definizione circa 1 Gbit/s. Si rende dunque necessaria una compressione dei dati sia con perdita di informazione che senza, e a questo scopo sono state sviluppate potenti tecniche ormai indispensabili anche laddove i canali di comunicazione sono in via di ampliamento grazie allo sfruttamento di moderne tecnologie come le fibre ottiche e le comunicazioni satellitari. In questo capitolo tratteremo brevemente delle tecniche di compressione d’immagine e di video standard dalle quali abbiamo preso spunto e con le quali ci siamo confrontati; l’algoritmo da noi sviluppato, che verrà trattato nel capitolo successivo, si collocherà sostanzialmente a cavallo tra il JPEG standard, oggi ampiamente utilizzato per l’image editing, la trasmissione di immagini su Internet e la fotografia digitale, e l’MPEG2, sfruttato invece nel video editing, nelle trasmissioni TV satellitari o su cavo e nei DVD.

Page 2: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

2 Introduzione allo standard JPEG Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione è ricaduta sul JPEG standard con perdite (o lossy), che rappresenta sicuramente un ottimo compromesso tra qualità e compressione e necessita di una potenza di calcolo ragionevole. Un comitato ISO/CCITT noto come JPEG (Joint Photographic Expert Group) ha definito il primo standard internazionale di compressione per immagini a tono continuo, sia in scala di grigi sia a colori. Lo standard definisce due metodi di compressione: uno di tipo lossy, cioè con perdita di informazione, ed uno di tipo lossless, senza nessuna perdita. L’algoritmo da noi scelto è quello base sequenziale di tipo lossy, detto anche “baseline”, costruito sull’uso della trasformata discreta coseno (DCT) che garantisce una compressione migliore ed una buona qualità. Lo standard, che vuole essere il più generico possibile, definisce inoltre estensioni opzionali all’algoritmo di base per compressioni di tipo gerarchico o progressivo, non utili nel nostro contesto. Il codice del lossy JPEG è stato interamente riscritto da noi per soddisfare al meglio le nostre necessità di compattezza, velocità di esecuzione e possibile recupero di errori. Richiameremo dunque brevemente i concetti fondamentali su cui si basa il JPEG ed il suo algoritmo, soffermandoci in particolare sui metodi di implementazione da noi scelti e sulle opzioni possibili, motivando le nostre scelte che sono ovviamente dettate dal contesto in cui tale algoritmo potrebbe essere implementato; tratteremo infine di una possibile modifica allo standard da noi sperimentata al fine di migliorare la velocità di esecuzione e diminuire il numero di calcoli a discapito della compressione.

3 Lo spazio cromatico

3.1 Campionamento I campioni di un’immagine digitale possono essere rappresentati in diversi spazi cromatici: gli standard da noi presi in considerazione sono quelli RGB (Red Green Blu) con tre componenti cromatiche e quello YCbCr (luminanza – crominanza) con una componente di luminosità e due cromatiche. Il limite superiore dei campioni necessari in un’immagine digitale è data dalla risposta del sistema visivo umano ai cambi di intensità; le curve rappresentate in figura1 ci forniscono la risposta relativa dell’occhio alla soglia dei cambi di intensità a differenti frequenze angolari (angolo misurato relativamente all’occhio dell’osservatore)[17]. Tutti i punti sopra la curva rappresentano la condizione in cui l’occhio non è capace di rilevare alcuna intensità di cambiamento, i punti al di sotto invece la condizione nella quale l’occhio percepisce tali variazioni. Si può notare come per la luminanza si abbia un picco a circa 5 cicli\grado mentre la curva va a 0 a circa 100 cicli\grado.

19

Page 3: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

L’occhio umano può dunque distinguere circa 1000 livelli di grigio uniformemente spaziati nelle condizioni migliori, da cui si ricava che un limite per la precisione può essere di circa 10 bits\pixel. Nei sistemi pratici le condizioni sono in genere non ideali ed inoltre la capacità di percepire sottili cambiamenti è degradata in presenza di rumore e cambiamenti ampi di intensità, pertanto si utilizza in genere una precisione di 8 bits\pixel ottenendo buoni risultati. Ben diversa è la sensibilità alle variazioni di crominanza: il max è a circa 1 ciclo\grado e va a zero a 12 cicli\grado; la ridotta sensibilità alle variazioni spaziali di crominanza rispetto a quelle di luminanza viene sfruttata nei

sistemi di compressione, compreso il JPEG: è possibile infatti campionare la crominanza con un numero ridotto di bits\pixel senza che l’occhio umano percepisca alcuna differenza.

Risposta relativa dell’occhio alla soglia dei cambi di intensitàa differenti frequenze angolari. L’occhio umano è molto più sensibile alle variazioni di luminanza che non a quelle di crominanza.

3.2 Trasformazione dello spazio cromatico e sottocampionamento

’ da premettere che la trasformazione dello spazio cromatico da RGB a YCbCr da noi utilizzata Enon è di per sé un’operazione necessaria, si potrebbe infatti utilizzare l’algoritmo direttamente sull’immagine rappresentata nello standard RGB, in quanto l’algoritmo lavora indipendentemente su ogni componente. Per i motivi sopra elencati sembra però conveniente implementare questa operazione; la trasformazione è lineare ed introduce errori di arrotondamento che sono comunque trascurabili rispetto all’errore introdotto dall’algoritmo JPEG. Riportiamo ora le formule matematiche:

⎪⎩

⎪⎨

−−=+−−=

++=

BGRCrBGRCb

BGRY

8131.041869.05.05.033126.016874.0

114.0587.0299.0

e matrici delle due componenti cromatiche possono essere ora ridotte di un fattore 2

otta di metà e di un terzo.

Lorizzontalmente e di un fattore 2 o senza nessuna modifica verticalmente; queste due riduzioni vengono indicate con 2h2v e 2h1v e si ottengono facendo la media di 4 pixel adiacenti nel primo caso e di 2 pixel confinanti in verticale nel secondo. La quantità di informazione risulta rispettivamente rid

20

Page 4: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

2h2v

2h1v Sottocampionamento

Due tipi possibili di sottocampionamento della crominanza: il primo si ottiene calcolando la media di 4 pixel adiacenti, il secondo solo di due pixel adiacenti in verticale. La matrice di crominanza viene ridotta rispettivamente di ¼ e di ½.

3.3 Implementazione su calcolatore

e equazioni mostrate nel paragrafo precedente sono state implementate nel programma ma ai

e di trasformazione dello spazio deve essere eseguita ad ogni ciclo di lettura da

al_y = RGB_Y[0][val_red] + RGB_Y[1][val_green] + RGB_Y[2][val_blu]

ioè con sole 2 somme e 0 moltiplicazioni.

4 DCT

4.1 Introduzione

sistema visivo dell’occhio umano dipende considerevolmente dalla frequenza spaziale: essere in

e Trasform) è la procedura matematica che fornisce una buona approssimazione di questa decomposizione e sulla quale si basa la costruzione dei blocchi JPEG;

Lvalori ottenuti per Cb e Cr va ancora sommata la costante 128 se vogliamo riportare tali valori nell’intervallo tra 0 e 255. Al fine di evitare l’aritmetica in floating point, le costanti moltiplicative vengono rappresentate come interi scalati di 2^16 (precisione di circa 4 cifre decimali); dopo aver eseguito le moltiplicazioni i risultati saranno ovviamente shiftati a destra di 16 bit con opportuno arrotondamento. Poiché l’operazionRGB, per una maggior velocità di esecuzione ed un risparmio di calcoli ci è sembrato conveniente evitare di eseguire le moltiplicazioni ad ogni ciclo e calcolare invece una volta per tutte in un ciclo preliminare le costanti per ogni possibile valore tra 0 e 255. Per esempio, per quanto riguarda la luminanza, creiamo preliminarmente una matrice RGB_Y[][] di dimensione 3 righe * 256 colonne tale che, data una terna RGB, il corrispondente valore di luminanza si ottiene eseguendo V c

Ilgrado di decomporre l’immagine in un insieme di forme d’onda elementari, ognuna con una particolare frequenza, significa poter separare ciò che l’occhio può realmente vedere da ciò che è invece impercettibile[17]. La DCT (Discrete Cosin

21

Page 5: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

essa permette di ottenere dei coefficienti non correlati, ognuno dei quali può essere pertanto trattato indipendentemente senza perdita di efficienza nella compressione.

4.2 DCT uni-dimensionale

mpioni adiacenti in scala di grigi rappresentati su 8 bit ( valori tra e 255 ); se x è la coordinata spaziale, indichiamo tali valori con s(x).

onda di frequenza spaziale

con componenti sia continue

Consideriamo un segmento di 8 ca0Dopo aver sottratto ai campioni il valore 128 ( valori tra -128 e 127 ) come richiesto dal JPEG, possiamo decomporre questa sequenza in un insieme di forme d’crescente, per esempio 8 diverse funzioni coseno di ampiezza uniforme ognuna campionata su 8 punti f(x)=cos(ux) con u che va da 0 a 7. Queste forme d’onda sono tra loro ortogonali, quindi indipendenti, e possono essere usate per ottenere gli 8 campioni tramite combinazione lineare: gli 8 coefficienti moltiplicativi rappresentano l’uscita della DCT a 8 punti. Il coefficiente con u=0 è chiamato “coefficiente DC”, gli altri “coefficienti AC”; questi nomi derivano dall’uso storico della DCT per analizzare correnti elettricheche alternate. E’ da notare che il coefficiente DC rappresenta la media degli 8 campioni. Il processo di decomposizione in un insieme di funzioni di base coseno è chiamato FDCT ( Forward DCT ) e la sua definizione matematica è la seguente:

[ ]∑ +⋅=7

16/)12(cos)()()( uxxsuCu π =02 x

ove (u)

S

dC = 1/ 2 se u=0

1 se u>0

a DCT.

ei campioni si chiama IDCT (Inverse DCT) e la sua definizione atematica è:

C(u) = S(u) = coefficienti dell Il processo di ricostruzione dm

[ ]∑=

+=7 ()( uCxs

016/)12(cos)(

2)

uuxuS π

alla definizione di ortonormalità otteniamo la conferma di tale proprietà:

D

[ ] [ ] )',(16/')12(cos2

)'(16/)12(cos2

)(7

0uuuxuCuxuC

xδππ =+⋅+⋅∑

=

dove 1)',( =uuδ se u=u’, 0)',( =uuδ altrimenti.

i è più lun rre dividerla in sottosequenze da 8 ciascuna ed pplicare poi la DCT indipendentemente ad ogni gruppo.

Se la sequenza di campion ga di 8 occoa

22

Page 6: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

4.3 DCT bidimensionale La procedura per il calcolo della DCT uni-dimensionaimmagini bidimensionali. Le fun

le può essere estesa per l’applicazione nelle zioni base coseno sono ottenute moltiplicando le 8 funzioni base

ni-dimensionali orientate orizzontalmente con le stesse orientate verticalmente: le prime urappresentano le frequenze orizzontali, le altre quelle verticali. Moltiplicate per coefficienti opportuni queste 64 funzioni di base possono essere usate per rappresentare i valori dei campioni del blocco 8*8, esattamente come nel caso uni-dimensionale. La definizione matematica della FDCT è la seguente:

[ 1/)12(cos),(22

),( πuxxysuvS ⋅+⋅⋅⋅= ∑∑ ] [)()( 7 7uCvC ]16/)12(cos60 0

πvyy x

⋅+⋅= =

C(u) e C(v) è la stessa del caso uni-dimensionale. La definizione per la IDCT è invece:

dove la costante

[ ] [ 16/)12(cos16/)12( ]s)()(7 7

ππ vyuxuCvC⋅+⋅+co),(

22),(

0 0

uvSxysv u

⋅⋅⋅= ∑ ∑= =

I 64 valori così ottenuti vengono ordinati in un array seguendo una sequenza a zigzag, come mostrato nella figura seguente. La codifica a zigzag utilizzata dal JPEG ordina approssimativamente

le funzioni di base con frequenza spaziale crescente. Poiché le

no presi coefficienti DCT nel JPEG tandard.

4.4 Rappresentazione ad interi e quantizzazione

ratezza con la quale i tondati a numeri interi. In pratica, dopo

ver applicato la DCT al blocco 8*8, ogni elemento del blocco viene diviso per un coefficiente di

da della

funzioni coseno bidimensionali si ottengono dal prodotto di due uni-dimensionali, l’unica funzione di base continua è quella corrispondente al primo coefficiente in alto a sinistra detto, analogamente al caso uni-dimensionale, coefficiente DC; nella codifica a zigzag questo sarà il primo coefficiente, poi seguiranno i coefficienti AC. Ordine con cui vengoi s

La quantizzazione è un’operazione che ci permette di ridurre l’accucoefficienti DCT sono rappresentati quando vengono arroaquantizzazione distinto ed arrotondato all’intero più vicino; questo è il procedimento formale che porta alla perdita di informazione, soprattutto là dove l’informazione è meno significativa. Le matrici contenenti i 64 coefficienti di quantizzazione, che chiameremo Q(u,v) possono essere definite a piacere, lo standard non pone limitazioni, in ogni caso dopo alcuni esperimenti sono state rese note tabelle di quantizzazione che danno i risultati migliori, diverse a seconcomponente a cui andranno applicate (Y,Cb,Cr,R,G o B); tali tabelle sono state scelte in base a criteri di “visibilità” delle funzioni di base. Misurando la soglia di visibilità di una data funzione di base, cioè l’ampiezza del minimo coefficiente rilevabile dall’occhio umano, possiamo dividere i

23

Page 7: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

coefficienti per tale valore con appropriato arrotondamento all’intero più vicino e successivamente, in fase di ricostruzione dell’immagine originale, moltiplicare per lo stesso coefficiente senza che l’occhio umano possa accorgersi di alcuna differenza tra il coefficiente quantizzato e quello originale. E’ possibile scegliere di codificare l’immagine con qualità inferiore accettando una perdita visibile ed utilizzando in tal modo dei coefficienti molto più grandi di quello di soglia.

iste ad una distanza

i campioni dell’immagine con precisione pari a 8 bit

ta d n zi ta d an zi e m za

Questi valori sono prossimi alla soglia della visibilità ed un’immagine ricostruita usando questebelle mostra comunque artefatti quando viste su schermi ad alta qualità; se tutti i valori vengono

arà compreso tra 0

La visibilità delle funzioni di base è stata misurata per immagini con risoluzione di 720*576 per quanto riguarda la luminanza, e 360*576 per quanto riguarda la crominanza, vpari a 6 volte la larghezza dello schermo[17]. Nel sistema JPEG i coefficienti DCT quantizzati sono interi così come quelli di quantizzazione; la rappresentazione ad interi è scelta in modo chesi trasformino in coefficienti DCT quantizzati con precisione 11 bit per valori di quantizzazione unitari; di conseguenza da un campione di valore 13 si ottiene un coefficiente di precisione 7bit[17]. Riportiamo ora le tabelle standard.

bella i qua tizza one per luminanza bella i qu tizza one p r cro inan

tadivisi per due l’immagine risultante sarà indistinguibile dall’originale. Manipolando dunque la matrice di quantizzazione si può ottenere una variazione della quantità di informazione eliminata nell’immagine; il parametro p che si potrà specificare s(pessima qualità) e 100 (circa indistinguibile dall’originale). Tale parametro agisce in questo modo su Q(u,v): si definisce un “fattore di scalatura” s che vale 5000/p se p<50, mentre vale 200-2p altrimenti; tale valore si applica poi sulla matrice in questo modo:

10050*),(),( +

=svuQvu Q

Se p=100 si avrà s=0, ed in questo caso tutti i valori della matrice di quantizzazione vengono posti ari a 1. p

Se F(u,v) è il blocco di coefficienti DCT, la formula della quantizzazione sarà infine:

⎟⎟⎠

⎞⎜⎛

=),(int),( vuFroundvuq ⎜

⎝ ),( vuQ

16 11 10 16 24 40 51 61

F

12 12 14 19 26 58 60 55

14 13 16 24 40 57 69 56

14 17 22 29 51 87 80 62

18 22 37 56 68 109 103 77

24 35 55 64 81 104 113 92

49 64 78 87 103 121 120 101

72 92 95 98 112 100 103 99

17 18 24 47 99 99 99 99

18 21 26 66 99 99 99 99

24 26 56 99 99 99 99 99

47 66 99 99 99 99 99 99

99 99 99 99 99 99 99 99

99 99 99 99 99 99 99 99

99 99 99 99 99 99 99 99

99 99 99 99 99 99 99 99

24

Page 8: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

4.5 Complessità della DCT Il calcolo della DCT con il semplice utilizzo della definizione matematica richiede per ogni

3 addizioni; la quantizzazione richiede poi un’addizione ed una io erazioni possono dare però un’idea sbagliata sull’effettiva

el contesto del nostro lavoro le esigenze di risparmio energetico e velocità di esecuzione ci hanno ritmo che lavori esclusivamente su numeri interi e di

“f inor numero di operazioni.

5

mo indicato

coefficiente 64 moltiplicazioni e 6ivis ne in più. Queste considd

complessità del calcolo: esistono diversi algoritmi con efficienza di gran lunga superiore; il migliore algoritmo ad interi che implementa DCT e quantizzazione richiede una sola moltiplicazione e 9 addizioni per coefficiente[17]. Sono inoltre disponibili metodi che permettono di avvantaggiarsi del parallelismo dei moderni elaboratori e processori di segnali che rendono possibili implementazioni molto efficienti anche con l’uso di floating point.

.6 Implementazione su calcolatore 4 Nportato a scegliere di implementare un algo

po ast”, un po’ meno accurato ma con un mtiSi può notare dalla definizione come la DCT bidimensionale sia ottenibile applicando la DCT uni-dimensionale su tutte le righe e poi su tutte le colonne; esistono algoritmi che lavorano direttamente sulle due dimensioni ma sono molto complessi e non sembrano essere poi più veloci una volta implementati. L’algoritmo da noi scelto è quello di Arai, Agui e Nakajima il quale intelligentemente sfrutta il fatto che i coefficienti della DCT dovranno poi essere divisi per quelli di quantizzazione al fine di diminuire il numero complessivo di moltiplicazioni. Se per ottenere una DCT a 8 punti non si possono eseguire meno di 8 moltiplicazioni, con tale algoritmo bastano solo 5 moltiplicazioni e 29 addizioni per ottenere dei coefficienti proporzionali a quelli della DCT; ovviamente tali coefficienti andranno poi divisi per una tabella di quantizzazione modificata in modo che alla fine della quantizzazione il risultato sia quello corretto. Il principale svantaggio di questo metodo è che con la matematica ad interi si perde in accuratezza a causa di un’imprecisa rappresentazione dei valori di quantizzazione. Riportiamo ora i passi matematici di tale algoritmo: chiamiamo con d[] l’array con i coefficienti DCT e con s[] l’array di campioni; definiamo innanzitutto le costanti c6=0.382683433 c2-c6=0.541196100 c4=0.707106781 c2+c6=1.30656296

dove con ck abbia ⎟⎠⎞

⎜⎝⎛=

16cos πkck

Poiché l’algoritmo lavora su numpoi verrà eseguita la moltiplic

eri interi, su tali costanti viene prima eseguito uno shift a sinistra, azione tra numeri interi ed infine il risultato verrà riscalato a destra

enza portarsi dietro bit frazionari nelle addizioni seguenti, il che compromette leggermente sl’accuratezza ma permette di risparmiare qualche operazione di shift.

25

Page 9: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

Definiamo: s07=s[0]+s[7] d07=s[0]-s[7]

16=s[0]+s[6] d06=s[0]-s[6] d25=s[2]-s[5]

34=s[3]+s[4] d34=s[3]-s[4]

=s07-s34

(il coefficiente DC) [1]=A-B

se z1=(C+D)*c4 si ha:

[6]=D-z1

efiniamo ancora:

=d25+d16

6)+z5)+z5

3=F*c4

tteniamo infine:

2[3]=z13+z2

[7]=z11-z4

ss25=s[2]+s[5]s A=s07+s34 B=s16+s25 C=s16-s25D Otteniamo così d[0]=A+Bd e d[2]=D+z1d d E=d34+d25FG=d16+d07 z5=(E-G)*cz2=E(c2-c6z4=G(c2+c6z z11=d07+z3z13=d07-z3 o d[5]=z13+zdd[1]=z11+z4d

26

Page 10: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

4.7 Immagini reali ed artefatti

ente più grandi di 8*8 pixels, pertanto devono gnuno dei quali verrà applicata indipendentemente la DCT

idimensionale; tutto questo porta ad alcuni difetti nell’immagine codificata, i cosiddetti “blocking

e in base al sistema visivo umano

ri distorsioni visibili.

omprimere l’immagine in figura e vediamo di rilevare imprecisioni e distorsioni ssione JPEG

Le immagini di cui ci occuperemo sono ovviamessere divise in blocchi da 8*8 su obartifacts”, ovvero delle discontinuità visibili tra blocchi adiacenti tanto che l’immagine appare “quadrettata”; questo fenomeno deriva dal fatto che le frequenze spaziali nell’immagine e quelle delle funzioni di base coseno non sono esattamente equivalenti. Ogni volta che i coefficienti DC di due blocchi adiacenti differiscono di una quantità significativa, la discontinuità può essere visibile. La quantizzazione di ogni coefficiente è data indipendentementper un particolare insieme di condizioni visive, se queste condizioni cambiano allora la quantizzazione può introdurre ulterio

Giorgio De Chirico “Cavalli in riva al mare” Proviamo ora a cintrodotte dalla compre

27

Page 11: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

L’immagine quì a fianco è semplicemente un ingrandimento senza alcuna compressione

Se proviamo ora a comprimere l’immagine con alta qualità ( rapporto di compressione di

rca 10:1) : l’immagine è molto simile

Comprimendo l’immagine con qualità 50 ( rapporto di circa 18:1) si nota una maggior

ocatura, una minor precisione nei dettagli

ciall’originale e non si notano artefatti evidenti se non una leggera sfocatura ed una minore precisione dei contorni.

sfcon apparizione del blocking ed una certa distorsione sui bordi, noto come fenomeno di Gibbs: il bordo della figura è come una discontinuità e la soppressione di coefficienti ad alta frequenza determina la perdita di qualità

28

Page 12: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

Qualità 15: la quantizzazione molto

8 occorre aggiungere copie dell’ultima riga o ell’ultima colonna alla matrice dell’immagine sino a che la dimensione della nuova matrice non

nsioni ono multiple di 16, pertanto questa operazione non sarà quasi mai necessaria.

spinta ha portato alla soppressione di molti coefficienti AC ed all’aumento del fenomeno di Gibbs sui bordi delle figure; ogni particolare pittorico è andato perso. In questo caso sarebbero necessari coefficienti diversi da zero per eliminare gli artefatti.

Se la dimensione dell’immagine non è multipla diddiventi multipla di 8. Questa operazione fa in modo che la tonalità o la luminosità dei blocchi sui bordi inferiore e su quello destro non varino sensibilmente dopo l’applicazione della DCT, fatto che può accadere se gli elementi mancanti per completare il blocco sono posti ad esempio uguali a zero. In fase di decodifica bisognerà tener conto di questa operazione.

Nel seguito comunque utilizzeremo immagini in formato standard CIF e QCIF, le cui dimes SQCIF – Sub QCIF 128x96

QCIF – Quarter Common Intermediate Format

176x144

CIF – Common IntermediaFormat

te 352x288

Se le dimensioni dell’immagine non sono multiple di 8 vengono aggiunte righe e colonne uguali alle ultime fino a che non viene raggiunto il numero multiplo di 8 più vicino; bisognerà toglierle in fase di decodifica.

29

Page 13: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

5 Entropy coding

5.1 Concetti base I coefficienti del blocco 8*8 ottenuti applicando DCT e quantizzazione vengono codificati con una tecnica di tipo Run Length Encoding senza più alcuna perdita di informazione, grazie alla quale si riescono a rappresentare in modo efficiente le lunghe sequenze di zeri che si ottengono inevitabilmente con la quantizzazione. Ricordiamo che la quantità di informazione I trasferita nella codifica di un simbolo di probabilità p è in bit pari a I=log2(1/p). Se p=1 allora I=0 mentre se p=0 allora I tende all’infinito. Dato un insieme di simboli S, si definisce l’entropia H come l’informazione media di un simbolo s

( )∑ ⋅=s

spspSH )(/1log)()( 2 Tale grandezza è una buona misura delle prestazioni di una codifica. Se ogni simbolo fosse equiprobabile si codificherebbe ogni simbolo con lo stesso numero di bit, ma se le probabilità dei bit sono diverse è possibile usare codici a lunghezza variabile con parole di codice corte per i simboli più probabili ottenendo così un’entropia molto più elevata. Su questo concetto base si fonda per esempio la “codifica di Huffman” con la quale si minimizza la lunghezza media delle parole di codice. JPEG usa due tecniche per l’”entropy coding”: quella di Huffman e quella aritmetica; nel nostro lavoro sarà utilizzata sempre la codifica di Huffman, che è la più antica e la più nota tra le due, perché più semplice sia dal punto di vista computazionale sia da quello dell’implementazione; tale tecnica richiede che le tabelle di conversione siano comunque note prima di iniziare la codifica. La codifica aritmetica è di tipo “adattativo”, si adatta cioè dinamicamente ai dati da trattare ottenendo prestazioni migliori di circa il 10%, ma necessita di più operazioni.

5.2 Codifica di Huffman La codifica di Huffman nello standard JPEG prevede due modelli statistici differenti: uno per le differenze dei coefficienti DC l’altra per i coefficienti AC. Le tabelle di codifica in cui viene associato ad ogni simbolo della sequenza un codice di Huffman possono essere calcolate prima della fase di compressione attraverso un’analisi statica dei dati da rappresentare oppure si possono usare delle tabelle standard già stabilite a priori attraverso l’analisi di immagini con caratteristiche frequenti. Le esigenze di risparmio sui calcoli e di velocità di esecuzione ci hanno ovviamente indotto alla scelta di tabelle statiche standard.

5.2.1 Codifica coefficienti DC Il DC di ogni blocco viene sempre codificato per primo basandosi sul modello DPCM (Difference Pulse Code Modulation); tale modello permette di predire il valore di un coefficiente DC a partire da quelli già codificati nell’immagine. Codificando per esempio una riga da sinistra a destra, occorre usare il campione di sinistra per stimare quello corrente passando all’entropy encoder il valore della differenza tra i due campioni. In un’immagine a toni continui il valore della differenza tra campioni adiacenti risulta essere molto più piccolo del valore stesso a causa dell’alto grado di

30

Page 14: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

correlazione tre campioni vicini: risulta dunque più efficiente codificare le differenza piuttosto che non ogni campione indipendentemente[17].

Campione precedente

Campione

+ Differenza - Tecnica DPCM: schema per la codifica Naturalmente dovremo tenere conto di questo metodo in fase di ricostruzione dove invece il campione sarà ottenuto secondo lo schema sottostante:

Campione precedente

Differenza

+ Campione

+ Tecnica DPCM: schema per la decodifica Se proviamo ad analizzare l’andamento dell’intensità della differenza tra un campione e quello precedente sulla stessa riga di un’immagine reale notiamo come questa curva oscilli molto vicina allo zero e come i valori piccoli siano estremamente probabili. Nello standard JPEG si sfrutta questo fenomeno codificando non il valore del coefficiente DC ma la differenza tra i DC di due blocchi codificati in sequenza. Si costruisce una coppia (Size,Valore) dove Size è il numero di di bit necessari a codificare il modulo della differenza DC e si calcola utilizzando la seguente tabella:

Size Valore 1 2 3 4 5 6 7 8 9 10

-1 1 -3,-2 2,3

-7…-4 4…7 -15…-8 8…15

-31…-16 16…31 -63…-32 32…63

-127…-64 64…127 -255…-128 128…255 -511…-256 256…511

-1023…-512 512…1023 Size viene codificato utilizzando la relativa tabella di Huffman; a questi bit si aggiungono poi quelli del valore della differenza nel seguente modo: se è un numero positivo i bit sono quelli corrispondenti al valore in binario, altrimenti si fa il complemento a due della differenza-1 e si prende a partire da destra un numero di bit pari a Size.

31

Page 15: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

5.2.2 Codifica coefficienti AC Per quanto riguarda i restanti 63 coefficienti, quelli non nulli vengono rappresentati nel seguente modo: (Runlength,Size)(Valore) Runlength dice quanti zeri ci sono prima del coefficiente non nullo e può assumere al massimo il valore 15, Size è il numero di bit necessari a rappresentare il valore del coefficiente e si calcola ovviamente utilizzando la stessa tabella vista per i DC. Si calcola il numero Runsize = 16*Runlength + Size e lo si codifica utilizzando la tabella di Huffman relativa ai coefficienti AC. A questi bit si aggiungono quelli relativi al valore con lo stesso metodo usato per i DC. Esistono 2 combinazioni particolari: (0,0) = EOB (End Of Block) utilizzato quando si hanno solo zeri da un certo punto sino alla fine dell’array, caso questo molto frequente dopo aver ordinato a zigzag e quantizzato; se il coefficiente 63 è non nullo EOB non viene codificato. (0,15) = ZRL indica che all’interno della sequenza ho 16 zeri consecutivi.

5.2.3 Implementazione Le tavole di codifica di Huffman si ricavano dalle sequenze che vengono allegate nell’intestazione del file JPEG, che chiamiamo BITS e HUFFVAL, come nel documento T81. BITS è un vettore di 16 elementi che fornisce il numero di codici per ogni lunghezza possibile da 1 a 16, in pratica BITS[i] è il numero di codici di Huffman di lunghezza i bit. Dal vettore BITS si ricava una tabella intermedia HUFFSIZE di lunghezza pari al numero di codici di Huffman ∑i

iBITS ][ in modo che se i è il numero del simbolo, HUFFSIZE[i] ne fornisce la lunghezza. Dalla tabella HUFFSIZE appena creata otteniamo una seconda tabella che chiamiamo HUFFCODE con l’elenco dei codici, in pratica il simbolo i_esimo è fornito da HUFFCODE[i]. A questo punto possiamo generare le tabelle vere e proprie che useremo in fase di codifica, chiamate EHUFSI ed EHUFCO; dato il simbolo i, il codice HUFFCODE[i] su HUFFSIZE[i] bit codificherà il valore HUFFVAL[i]. Riportiamo ora i flow_chart dell’algoritmo impiegato per codificare i coefficienti DC e AC[18]. Dopo aver codificato la differenza DC, il seguente algoritmo permette di codificare i restanti coefficienti; indichiamo con R quello che abbiamo chiamato RunLength.

32

Page 16: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

Codifica coefficienti AC K=0

R=0

K=K+1

ZZ(K)=0 K=63

R>15

Codifica R,ZZ(K) (v.avanti)

R=0

K=63

R=R+1

Metti EHUFSI(x’00) di EHUFCO(x’ 00)

fine

Aggiungi EHUFSI(x’F0) bits di EHUFCO(x’F0)

R=R-16

no

si si

no si

no

sino

SSSS=CSIZE(ZZ(K)) Codifica R,ZZ(K) RS=(16*R)+SSSS Aggiungi EHUFSI(RS) bits di EHUFCO(RS)

ZZ(K)<0

Aggiungi SSSS bits di ZZ(K)

ZZ(K)= ZZ(K)-1

si no

33

Page 17: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

6 Formato del file JPEG

6.1 Struttura generale Analizziamo ora brevemente la struttura del file JPEG di tipo standard sequenziale così come utilizzato nel nostro software. Il file JPEG è costituito da segmenti di tipo “entropy-coded” (i dati codificati) e da “marker segments” comprendenti informazioni sull’immagine e su tutto ciò che serve per la corretta decodifica della stessa. Un’immagine codificata in modo non gerarchico sarà costituita da un unico frame con la possibilità di avere più “scans” di dati, ovvero segmenti processati in un unico passo.

6.2 Sequenza dei dati “entropy coded” L’immagine viene processata da sinistra a destra lungo tutte le righe ed i blocchi 8*8, o “data units”, vengono assemblati in MCU (Minimum Coded Units); se nello scan è presente una sola componente l’MCU coincide col blocco 8*8, altrimenti è possibile compattare nello stesso scan i dati di più componenti nel formato “interleaved”; l’ordine dei dati in questo caso dipende dal tipo di sottocampionamento. Facciamo un esempio: nel caso di sottocampionamento 2h1v ci troviamo nella seguente situazione

Se non utilizziamo la tecnica interleaved dobbiamo creare tre scan indipendenti, uno per ogni componente; nel caso interleaved invece avremo un unico scan con i dati nel seguente ordine Y1 Y2 Cb1 Cr1 = MCU1 Y3 Y4 Cb2 Cr2 = MCU2 ………….. Nel nostro contesto è sembrato abbastanza indifferente scegliere l’uno o l’altro metodo ed abbiamo infine optato per quest’ultimo solo per maggior compattezza.

6.3 Marker segments Ogni marker segment inizia con un “marker code” che ne identifica la funzione; questi sono codici di 2 bytes di cui il primo è sempre FF (notazione esadecimale). Se nel segmento entropy coded capita un dato FF allora bisognerà farlo seguire dal byte “stuffed” 00. Esistono due categorie di marker codes: quelli senza parametri e quelli seguiti da una serie di parametri di lunghezza variabile e struttura nota: per questi ultimi il primo parametro sta su 2 bytes

Y1 Y2 Y3 Y4 Cb1 Cb2 Cr1 Cr2

Y5 Y6 Y7 Y8 Cb3 Cb4 Cr3 Cr4

Dati nel caso di sottocampionamento 2h-1v

34

Page 18: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

ed indica la lunghezza della sequenza dei parametri successivi compreso se stesso ma escluso il marker code. Vediamo ora la struttura generica di un file JPEG : SOI ( FF D8 ) Start Of Image DQT ( FF DB ) Quantization Table DRI ( FF DD ) Restart Interval SOFn ( FF C0 ) Frame Header DHT ( FF C4 ) Huffman Tables SOS ( FF DA ) Scan Header Dati compressi per il Restart Interval 1 – FF D0 Dati compressi per il Restart Interval 2 – FF D1 ……………… DHT ( FF C4 ) Huffman Tables SOS ( FF DA ) Scan Header Dati compressi per il Restart Interval 1 – FF D0 Dati compressi per il Restart Interval 2 – FF D1 ……………… EOI ( FF D9 ) End Of Image Ecco brevemente la funzione dei vari marker segments[18].

• DQT: specifica le tabelle di quantizzazione per ogni componente.

• DRI: per ovviare all’eventuale perdita o corruzione dei dati trasmessi, JPEG ha definito un meccanismo di partizione dei dati compressi in segmenti decodificabili indipendentemente chiamati “Restart Intervals”; tali intervalli contengono un numero fissato di MCU stabilito in questo segmento. Abilitando il Restart Interval occorrerà piazzare un marker code di tipo RSTn ( FF D0 …. FF D7 : numerazione modulo 8 ) tra gli intervalli di restart; encoder e decoder sono reinizializzati ogni volta che si imbattono in un marker RSTn.

• SOFn: il marker è differente a seconda della tecnica usata ( sequenziale, progressiva … ), nel nostro caso sarà FF C0; in questo segmento vengono specificati i parametri validi per tutto il frame: precisione dei campioni, dimensione dell’immagine, numero di componenti, fattore di campionamento e identificatore delle tabelle usate per ogni componente.

• DHT: definizione delle tavole di Huffman BITS e HUFFVAL come già spiegato in

precedenza.

• SOS: vengono specificati qui i parametri relativi allo scan di dati, come l’identificatore delle tabelle per la codifica di Huffman per ogni componente più altri parametri maggiormente significativi nella codifica progressiva da noi non utilizzata.

35

Page 19: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

7 Codificatore di Golomb-Rice

7.1 Introduzione Vediamo ora una possibile modifica al processo di codifica dei coefficienti, non prevista dallo standard JPEG, che andrebbe quindi a sostituire quella di Huffman. Abbiamo voluto sperimentare questa tecnica di compressione adattandola alle nostre esigenze perché è sembrata semplice da implementare, poco esigente in termini di memoria, ed inoltre vari articoli in letteratura la considerano una tecnica molto efficiente per la compressione di immagini e video digitali.

7.2 Algoritmo Il codificatore di Golomb-Rice utilizzato elabora 8 coefficienti della DCT per volta (ovvero 8 interi con segno su 16 bit) e, supposto che non siano tutti nulli, calcola un numero detto k ottimo, che permetta di rappresentarli con il minor numero di bit. Il kottimo è definito come il più piccolo valore di k in grado di soddisfare la seguente disuguaglianza:

∑=

>8

1__2*8

ii

K codificatoDCTcoeff

Il termine “coeff_DCT_codificato” indica i coefficienti della DCT trasformati da Rice in modo tale da eliminarne opportunamente il segno e poter costituire così l’input delle tecniche di codificazione che andremo a descrivere. In pratica, un coefficiente positivo verrà codificato come se stesso moltiplicato per due, ottenendo così un valore sempre pari (ultimo bit a 0), mentre un coefficiente negativo verrà codificato come se stesso moltiplicato per 2 e diminuito di 1, ricavando sempre un valore dispari (ultimo bit a 1). In ricezione si osserverà l’ultimo bit: se sarà uguale a 0 si dovrà dividere solo per 2, altrimenti toccherà prima aggiungere 1, ottenendo in entrambi i casi il valore originale. Si faccia attenzione che in trasmissione la moltiplicazione per 2 non dà overflow su 16 bit perché in realtà ciò che corrisponde ad un bit di segno nei coefficienti “int” della DCT lo si ritrova come bit di parità nei valori “unsigned int” codificati. Successivamente, a seconda del kottimo trovato si possono utilizzare le seguenti 3 codifiche, di cui descriviamo brevemente la tecnica di base: - codifica no-Rice : si scrive su file l’header di riconoscimento “1111” seguito dagli 8 coefficienti

codificati riportati tali e quali su 16 bit; - codifica k-Rice : si scrive su file l’header indicante il valore “kottimo + 1” su 4 bit, seguito da

tutte le parti più significative degli 8 coefficienti codificati ed infine da tutte quelle meno significative; in pratica i dati in input vengono spezzati in due segmenti, a seconda del k trovato, come segue:

0000001001 101101 (caso kottimo = 6) 16 - kottimo bit kottimo bit

36

Page 20: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

La parte a sinistra viene chiamata “più significativa” ed è codificata con un numero di zeri pari al valore decimale corrispondente, terminati da un bit aggiuntivo pari a 1. La parte a destra è quella “meno significativa” ed è scritta su file tale e quale. Quindi per l’esempio sopra scritto si otterrebbe:

0000000001 101101 9 zeri con un kottimo bit un bit a 1 finale

- codifica full-Rice : si scrivono su file l’header indicante il valore “kottimo + 1” su 4 bit (in questo caso kottimo = 0) e gli 8 coefficienti codificati, rappresentandoli come le parti “più significative” descritte sopra.

Per scegliere quale delle 3 codifiche consenta di utilizzare il minor numero di bit su file si compie il seguente ragionamento: - nella codifica no-Rice, corrispondente in pratica a kottimo = 16, si raggiunge il seguente numero

di bit:

∑=

− ==°8

112816__

iRicenobittotalen

- nella codifica k-Rice, eseguita solo se 1 ≤ kottimo ≤ 13, si perviene al risultato:

∑=

− ⎟⎠⎞

⎜⎝⎛ ++=°

8

11

2__

iottimoKottimo

iRicek k

coeffbittotalen

- nella codifica full-Rice, con kottimo = 0, i bit impiegati sono:

( )∑=

− +=°8

11__

iiRicefull coeffbittotalen

Si sceglie quindi il metodo più conveniente a seconda di quale tra i suddetti totali risulti minore. E’ bene osservare infine che il k non può superare il valore di 13 poiché i numeri 14 e 15 comportano una codifica con una quantità di bit addirittura superiore a quella che si ottiene con l’impiego dei coefficienti così come sono. Descriviamo ora con che ordine vengono considerati i coefficienti della DCT in input per ottimizzare il processo di compressione delle informazioni. I dati vengono forniti all’algoritmo di Rice a blocchi di 8, prendendoli nell’ordine a zig-zag e partendo dal valore DC. Nel caso in cui ve ne siano uno o più consecutivi totalmente nulli si scrive su file l’header “0000” seguito da tanti zeri quanti sono i blocchi di 8 coefficienti a zero e aggiungendo infine un bit pari a 1 come terminazione. Per sfruttare il più possibile questo metodo si procurano al codificatore i coefficienti della DCT in modo tale da favorire la concentrazione di valori nulli consecutivi. Facendo riferimento alla figura sottostante, prima si analizzano in successione (da sinistra a destra) i primi 8 coefficienti di tutti i blocchi di luminanza e crominanza appartenenti all’MCU (zona 1), poi tutti i secondi (zona 2), etc., in modo tale che i gruppi in basso a destra della matrice DCT, quasi sicuramente tutti nulli, vengano esaminati consecutivamente:

37

Page 21: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

Ordine con cui prendiamo i coefficienti per la codifica G-R Inoltre, per i coefficienti della luminanza all’interno della medesima MCU si usa sempre fare la predizione del valore DC (codifica intera del primo e differenziale dei successivi).

7.3 Risultati e conclusioni Proviamo ora a paragonare in termini di compressione del file finale e tempo impiegato per l’elaborazione i due codificatori impiegati, cioè quello di Huffman e quello di Golomb-Rice. Si osserva che Rice produce in media un file del 25 % più grande rispetto a Huffman ed i tempi di codifica risultano più lenti del doppio; questa maggior lentezza è dovuto al fatto che ad ogni blocco di valori in input Rice deve calcolare il k, ricavare i coefficienti codificati ed eseguire l’algoritmo di k-split, mentre Huffman gestisce la codifica mediante semplici puntamenti in memoria ai codici già calcolati una volta per tutte in fase di inizializzazione. Per contro, il vantaggio principale di Rice consiste nella compattezza del suo codice e nella bassa occupazione di RAM, favorita dal fatto di non necessitare, a differenza di Huffman, dell’uso di tabelle. Nel nostro software abbiamo scelto dunque di continuare ad utilizzare la tecnica di Huffman.

8 La codifica video Se con il JPEG si è sfruttata la ridondanza spaziale delle informazioni relative ad un’immagine per poter comprimere i dati, in una sequenza di immagini è possibile sfruttare anche la ridondanza temporale per un’ulteriore compressione. Se le immagini che compongono la sequenza venissero infatti codificate con un codificatore JPEG ognuna indipendentemente dalle altre non si otterrebbero elevate compressioni. La maggior parte dei fotogrammi di una sequenza è generalmente costituita di immagini molto simili tra loro e le differenze tra un fotogramma ed il successivo sono dovute a traslazioni di parte di esso: è possibile quindi evitare di trasmettere le parti che non sono cambiate mentre per le altre trasmettere solo il verso e l’entità dello spostamento. Questa tecnica si chiama “compensazione del moto” (Motion Compensation), ed il verso e l’entità dello spostamento vengono indicati da una grandezza bidimensionale chiamata Motion Vector generalmente costruito prendendo come unità blocchetti di dimensione fissa; le informazioni sul moto saranno parte delle informazioni necessarie alla ricostruzione dell’immagine in fase di decodifica. L’errore di predizione viene detto “differenza di frame spostato” (Displaced Frame Difference, DFD) e viene codificata insieme ai vettori di moto. I codificatori video vengono classificati in base al fatto di essere o meno predittivi, oppure per il modo con cui eseguono la compressione.

38

Page 22: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

9 Lo standard MPEG L’ISO si è assunta il compito di sviluppare uno standard generico per la memorizzazione di video digitali e dell’audio ad essi associato su dispositivi come CD-ROM, DAT, nastri, dischi ottici ecc.. e per la trasmissione di questi video nei canali di comunicazione ed ha così creato l’MPEG (Moving Pictures Experts Group)[20]. Le tecniche che vengono usate per la compressione sono le stesse del JPEG (sottocampionamento della crominanza, DCT, quantizzazione dei coefficienti e compressione di Huffman) unite a quella della compensazione del moto di cui già accennato. Il gruppo MPEG ha standardizzato la sequenza dei bit in uscita ma non l’algoritmo di compressione stesso; si definisce dunque uno schema di compressione ma ci sono parecchi gradi di libertà e sta ai vari produttori ottimizzare il proprio codificatore ed il proprio decodificatore. Nello standard MPEG esistono esistono tre tipi di fotogrammi[19][20]: fotogrammi Intra (Intraframes o I frames), predetti (Forward predicted frames o P frames) o interpolati bi-direzionalmente (Bidirectional frames o B frames). Gli I frames vengono codificati singolarmente senza nessun riferimento ad altri consentendo dunque una compressione modesta, i P frames sono

codificati in riferimento ad immagini passate di tipo I o P, ed infine i B frames si ottengono interpolando fra un I frame ed un P frame. In MPEG è dunque possibile applicare le tecniche di predizione considerando sia la storia passata che quella futura. La presenza di immagini codificate in modo indipendente dalle altre, e quindi poco compresse, garantisce tra l’altro la possibilità di un accesso casuale al filmato.

I B B P B B P B B I

0 2 5 6 8 1 3 4 7 9

La sequenza di operazioni è sostanzialmente la seguente: inizialmente viene generato un I frame

considerandolo come una singola immagine fissa. Per il calcolo del motion vector e la predizione del P frame si considerano i punti all'interno di blocchi 16x16 nel canale di luminanza Y e nei corrispondenti blocchi 8x8 nei canali di crominanza U e V. Per ognuno di questi blocchi si cerca quello che ad esso si avvicina di più nell'ultimo I o P frame inviato, il verso e la direzione fra questi due blocchi identificano il motion vector. Se si riesce ad individuare il motion vector, per specificare il blocco nel P frame che stiamo codificando bastera' indicare, oltre ovviamente al motion vector stesso, la differenza fra i punti dei due blocchi in esame. Una volta codificato un frame I ed uno P si possono codificare i B frames compresi fra essi. Allora si esaminano i blocchi dei fotogrammi compresi fra il frame I e quello P cercando per ogni blocco quello a lui più simile nell’I frame (quindi indietro nel tempo), quello più simile nel P frame (quindi avanti nel tempo) oppure cercando di fare una media fra il blocco più simile nell’I frame e quello più simile nel P frame e sottraendo a questa il blocco da codificare.

Il GOP è la sequenza di fotogrammi tra due I frames: comprende frames predetti (P) e interpolati (I).

Se con nessuno di questi tre procedimenti si ottiene un risultato soddisfacente si può sempre codificare il blocco come se facesse parte di un I frame ovvero senza riferimenti ai blocchi precedenti o futuri.

Quindi otteniamo logicamente una sequenza di frames del tipo :

39

Page 23: COMPRESSIONE DI IMMAGINI E VIDEO - webalice.it · Iniziamo dunque a trattare della compressione dei singoli frames visti come immagini statiche. La scelta del metodo di compressione

COMPRESSIONE DI IMMAGINI E VIDEO

I B B P B B P B B P B B I B B P B B P B B P B B I ... Un insieme di immagini in ordine contiguo di visualizzazione compresa tra due I frames viene detto GOP. A causa dell’impiego di immagini interpolate B che fanno riferimento anche ad immagini future, l’ordine di trasmissione è diverso dall’ordine di visualizzazione: le immagini future a cui quelle B si riferiscono devono necessariamente essere trasmesse prima. La sequenza di trasmissione dei frames in figura risulterà dunque essere: 0 3 1 2 6 4 5 9 7 8 e la sequenza di operazioni che si compirà leggendo un flusso MPEG sarà:

1) Lettura e decodifica del frame I(t=0) 2) Lettura e decodifica del frame P(t=3), visualizzazione frame I(t=0) 3) Lettura e decodifica del frame B(t=1), visualizzazione frame B(t=1) 4) Lettura e decodifica del frame B(t=2), visualizzazione frame B(t=2) 5) Lettura e decodifica del frame P(t=6), visualizzazione frame P(t=3) 6) Lettura e decodifica del frame B(t=4), visualizzazione frame B(t=4) 7) Lettura e decodifica del frame B(t=5), visualizzazione frame B(t=5) 8) Lettura e decodifica del frame P(t=9), visualizzazione frame P(t=6) 9) ...

9.1 Versioni Sono state proposte fino ad oggi varie versioni per lo standard MPEG[21]: MPEG-1: definito a livello di standard nel 1992, questo formato è stato progettato per la

codifica di immagini in movimento e per l’audio ad esse associato con bitrate fino a circa 1.15 Mbit/s per il video e dai 384 ai 192 kbit\s per l’audio; il formato valido soprattutto per la memorizzazione digitale con sequenze video strettamente non interlacciate.

MPEG-2: è stato sviluppato a partire dall’MPEG-1 ma progettato per una varietà più ampia di applicazioni; esiste dal 1994. L’applicazione primaria è la trasmissione a qualità televisiva CCIR 601 con un bitrate tra 3 e 10 Mbit/s, ma è efficiente anche per applicazioni con bitrate superiore come HDTV. La sua caratteristica principale è la scalabilità, cioè loa possibilità di creare soluzioni di codifica e decodifica più o meno complesse in base al tipo di prodotto da realizzare.

MPEG-3: confluito in MPEG-2. MPEG-4: sviluppato dal 1993 al 1998, è stato progettato per la codifica audiovisiva a

bassissimo bitrate. Tale formato può essere considerato un’evoluzione dell’MPEG-2 nella gestione di immagini provenienti dalla televisione digitale e dalle applicazioni grafiche interattive, nella distribuzione e nell’accesso di multimedialità in rete. La principale caratteristica è la capacità di gestire la codifica di singoli oggetti: per il video non c’è più l’obbligo della forma rettangolare e per l’audio è possibile codificare indipendentemente e con diverso bitrate colonna sonora, musica ed effetti. A livello qualitativo lo standard non offre miglioramenti evidenti come nel passaggio da MPEG-1 a MPEG-2, ma a livello di bitrate il risparmio è significativo.

40