La sigla JPEG identifica una commissione di esperti
denominata Joint Photographic Expert Group
, formata nel 1986 con lo scopo
di stabilire uno standard di compressione per le immagini a tono continuo – cioè
di tipo fotografico – sia a colori sia in bianco e nero. Il lavoro di questa
commissione ha portato alla definizione di una complessa serie di algoritmi,
approvata come standard ISO nell'agosto del 1990 e successivamente divenuta la
raccomandazione T.81 (9/92) dell'ITU, International Telecommunication Union
.
Chi la sera a letto ha difficoltà ad addormentarsi, può leggerne la versione
integrale, scaricabile in formato PDF dal sito del W3C. L'indirizzo è
http://www.w3.org/Graphics/JPEG/itu-t81.pdf: sono 186 pagine fitte di
definizioni, procedure, grafici, immagini esemplificative e formule matematiche.
Auguri di buona lettura!
Il JPEG è dunque uno standard industriale e non va
confuso con il formato di file JPG, che rappresenta di volta in volta, a seconda
della software house
che lo implementa, un sottoinsieme variabile e non
sempre universalmente compatibile dello standard di riferimento. Pochi ad
esempio sanno che le specifiche JPEG descrivono anche un formato di compressione
non distruttivo, basato su tecniche differenti da quelle che descriveremo qui di
seguito, del quale si è ormai persa traccia, non usando gli sviluppatori di
programmi di grafica - a causa delle sue non straordinarie prestazioni -
inserirlo tra le varie opzioni di salvataggio dei normali file JPG.
Fig. 6 – Schematizzazione semplificata del processo di compressione JPEG
Ecco in dettaglio la sequenza di operazioni che da un'immagine originale non compressa porta ad un'immagine compressa con JPEG.
1) Trasformazione dello spazio colore – A causa delle particolari caratteristiche dell'occhio umano, molto più sensibile alle variazioni di luminosità che alle variazioni cromatiche, è opportuno innanzitutto trasformare la modalità RGB in modalità YUV. E' questo lo spazio-colore definito per il sistema televisivo PAL. Tra i suoi equivalenti nel campo della computergrafica c'è il metodo L*a*b presente in Adobe Photoshop.
Il sistema YUV scompone l'informazione relativa a
ciascun pixel in due componenti: la luminanza, che definisce il grado di
luminosità nella scala da nero a bianco (la lettera Y
della sigla YUV), e la
crominanza, che definisce il colore in base al rapporto tra due assi, uno
che va da blu a giallo (la lettera U
) e l'altro che va da rosso a verde (la
lettera V
).
Eseguire la trasformazione dallo spazio-colore RGB allo spazio-colore YUV non è indispensabile, ma il farlo consente di ottenere una maggiore compressione JPEG. Quando, infatti, le successive trasformazioni matematiche che si applicano all'immagine trovano l'informazione nettamente suddivisa nelle due componenti di luminosità e di colore, possono procedere all'eliminazione di molte informazioni relative al colore senza intaccare quelle relative alla luminosità, più importanti per la visione umana, e senza causare, in tal modo, danni visibili al contenuto dell'immagine. Ciò non è possibile invece nella stessa misura quando gli algoritmi di compressione si applicano a valori RGB, che presentano l'informazione relativa al colore e quella relativa alla luminosità fuse insieme (per le immagini in scala di grigio la conversione non ha senso, in quanto l'informazione sulla luminosità è già disponibile in partenza).
2) Riduzione, in base alla componente, di gruppi di pixel a valori medi – E' un'operazione opzionale, di cui alcuni software di grafica consentono l'impostazione. La componente che esprime la luminanza è lasciata invariata, mentre la componente cromatica viene dimezzata in orizzontale e in verticale, oppure soltanto in orizzontale. Ciò si esprime con il rapporto 2:1 per indicare il dimezzamento e con il rapporto 1:1 per indicare che la componente è lasciata invariata. Alcuni programmi di grafica, tra le opzioni di salvataggio in JPG, mostrano stringhe esoteriche come 4-1-1 e 4-2-2, che esprimono appunto il coefficiente di riduzione che viene applicato alle componenti cromatiche dell'immagine. Tale operazione, che fa parte degli algoritmi distruttivi dello standard JPEG, riduce in partenza il file di una metà o di un terzo della sua grandezza originale. Non si applica alle immagini a toni di grigio e ciò spiega perché queste siano meno comprimibili in generale delle immagini a colori.
3) DCT applicata a blocchi di 8 x 8 pixel
suddivisi in base alla componente – La sigla DCT sta per Discrete Cosine
Transform
: si tratta di una serie di operazioni matematiche che trasformano
i valori di luminosità e colore di ciascuno dei 64 pixel di ogni blocco preso in
esame in altrettanti valori di frequenza. In particolare, mentre i valori dei
pixel contenuti nei blocchi di 8 x 8 tratti dall'immagine originale variano da 0
a 255, dopo l'esecuzione della DCT essi, trasformati in frequenze, variano da
–721 a 721. Dov'è allora il guadagno? In una sottile combinazione di quantizzazione e
codifica entropica. In termini più semplici, la
trasformazione dei valori in frequenze consentirà nei passaggi successivi di
tagliare più informazioni senza apparente perdita visiva di quante se ne
potrebbero tagliare lavorando sui valori naturali
dei pixel. Inoltre la
sequenza a zig zag in cui i nuovi valori vengono scritti consente di applicare
ad essi una compressione (Huffman o aritmetica) più efficace.
Fig. 7 – Scrittura a zig zag dei valori ottenuti con la DCT,
a partire dall'angolo superiore sinistro del blocco di 8 x 8 pixel (schemi
tratti dalle specifiche ufficiali JPEG ITU.T81
)
4) Divisione e arrotondamento all'intero dei 64 valori ottenuti con la DCT – Ciascuno dei 64 valori di frequenza viene diviso per uno specifico coefficiente di quantizzazione, codificato in apposite tavole di riferimento. Il risultato della divisione viene arrotondato all'intero più vicino. L'eliminazione dei decimali è la principale operazione di compressione distruttiva dello standard JPEG. Il tutto è studiato in modo che le frequenze più importanti per l'occhio umano, cioè le più basse, memorizzate nell'angolo superiore sinistro del blocco di 8 x 8, siano preservate, mentre le più alte, la cui perdita è relativamente ininfluente, vengano eliminate.
5) Compressione non distruttiva dei coefficienti quantizzati – Ai valori risultanti dalla divisione e dall'arrotondamento sopra descritti viene applicata una compressione non distruttiva, per la quale può essere utilizzato l'algoritmo Huffman o una codifica aritmetica chiamata Q-coding. Quest'ultima è di circa il 5-10 % più efficace della Huffman, ma è protetta da brevetto, per cui il suo uso non è gratuito. Per tale motivo i software che realizzano la compressione JPG implementano solo l'algoritmo Huffman.
6) Inserimento nel file compresso di intestazioni e parametri per la decompressione – Affinché il file possa essere in seguito decompresso e possa generare un'immagine il più possibile somigliante all'originale non compresso, occorre che nel file JPG siano inserite le tabelle contenenti i coefficienti di quantizzazione e i valori di trasformazione della codifica Huffman.
Due precisazioni in conclusione di paragrafo. La prima riguarda il noto fenomeno dei blocchi quadrettati, che sono spesso chiaramente visibili nelle immagini JPG molto compresse e rappresentano un forte elemento di degrado della qualità. Essi sono la conseguenza diretta dell'algoritmo che suddivide l'immagine di partenza in blocchi da 8 x 8 pixel. Le varie trasformazioni applicate ai valori dei pixel di ciascun blocco sono del tutto indipendenti dalle trasformazioni applicate ai pixel dei blocchi adiacenti. Ciò causa talvolta transizioni brusche tra pixel adiacenti appartenenti a blocchi differenti. Il fenomeno è tanto più appariscente quanto più l'immagine contiene aree di colore uniforme e linee sottili ben separate dallo sfondo.
Fig. 8 – A destra un particolare molto ingrandito della foto di sinistra, che mostra in modo inequivocabile la quadrettatura tipica risultante dalla compressione JPEG
La
seconda precisazione riguarda il significato dell'espressione codifica
entropica
, utilizzata al precedente punto 3). Questa locuzione traduce
l'inglese entropy coding
(o encoding
) ed esprime un tipo di
compressione non distruttiva – quale ad esempio l'algoritmo Huffman – che, data
una serie qualsiasi di simboli, è in grado di codificarli utilizzando il minor
numero possibile di bit.
Leggi
JPEG 2000,
l'evoluzione della specie…
Vai al
sommario
Scrivi a
info@diodati.org
Aggiornato Tuesday, 30-Jul-2002 18:14:10 CEST