PROGRAMMIAMO
File - Formato JPEG
Il formato JPEG

L'acronimo JPEG sta per Joint Photographic Experts Group e rappresenta attualmente il formato standard per le immagini. Attualmente questo è il formato usato nella stragrande maggioranza delle immagini presenti in internet. L'estensione più comune per questo formato è .jpg, ma sono anche usate .jpeg, .jfif, .JPG, .JPE.

La ragione del successo del formato JPEG sta nel fatto che, rispetto al formato BMP di cui abbiamo parlato precedentemente, esso comprime le immagini, cioè riduce le dimensioni dei file corrispondenti. La compressione è vantaggiosa sia perché fa risparmiare spazio su disco sia soprattutto perché rende rende più veloce il trasferimento delle immagini in rete.

Si tratta di un tipo di compressione lossy, cioè che ha come conseguenza una perdita di qualità (a differenza delle compressioni lossless che avvengono senza perdita). Tuttavia il formato JPEG consente di regolare la qualità della compressione (e di conseguenza le dimensioni del file compresso) a diversi livelli e in generale gli effetti di degrado dell'immagini dovuti alla compressione sono spesso talmente piccoli da risultare trascurabili.

Qui sotto vediamo un esempio della stessa immagine compressa in JPEG con diverse qualità e, conseguentemente, con diverse dimensioni del file corrispondente:

JPEG qualità 10% - 3,2 KB
JPEG qualità 50% - 6,7 KB
JPEG qualità 90% - 30,2 KB
JPEG qualità 100% - 87,7 KB

Come si può notare il miglior rapporto qualità/dimensione si ha con valore intorno al 90%. È inoltre immediatamente osservabile come, all'aumentare del livello di compressione, compaiano artefatti (cioè disturbi introdotti dalla tecnica di compressione) sempre più visivamente evidenti.

Come funziona la compressione: spazio RGB e spazio YCbCr

Vediamo ora come funziona l'algoritmo JPEG e come riesce a comprimere le dimensioni delle immagini. Tutto parte da un'immagine raster originale non compressa, cioè da un'immagine in cui ogni bit viene rappresentato tramite il proprio colore RGB (come nel formato BMP).

Per prima cosa l'informazione RGB (basata sui tre canali rosso, verde e blu) relativa all'immagine viene convertita in un altro formato detto YCbCr. In pratica l'immagine viene rappresentata tramite il suo luma (Y, in pratica l'intensità luminosa di ogni pixel) e la sua crominanza (CbCr), cioè l'informazione cromatica o di colore. La figura seguente mostra la stessa immagine scomposta in RGB e in YCbCr:

RGB e YCbCr

La figura seguente mostra ancora più chiaramente la scomposizione:

Come è facile notare la luma (in pratica una copia in bianco e nero dell'immagine) contiene la maggior parte delle informazioni significative sull'immagine stessa. Gli altri due canali (Cr e Cb) contengono invece informazioni cromatiche e hanno importanza minore al fine di ricostruire l'immagine originale.

Sfruttando questo fatto (legato alle caratteristiche dell'occhio umano, che risulta più sensibile alla luminosità che al colore avendo un maggior numero di bastoncelli rispetto ai coni), l'algoritmo JPEG procede ad una prima compressione dell'immagine originale sottocampionando (subsample) i canali di crominanza Cr e Cb. In pratica l'informazione di luminosità Y viene mantenuta inalterata, mentre l'informazione di crominanza viene ridotta, riducendo di conseguenza lo spazio occupato dall'immagine.

color

Come funziona la compressione: la Trasformata Discreta del Coseno (DCT)

Il passo successivo del processo è il più importante al fine della compressione e anche quello più difficile da spiegare e da capire senza la conoscenza di alcuni procedimenti matematici piuttosto avanzati.

Per prima cosa l'immagine (già scomposta nei canali YCbCr come spiegato sopra) viene suddivisa in tanti quadrati, ciascuno di dimensione 8 x 8 pixel. La figura seguente mostra un esempio di scomposizione. I singoli blocchi 8 x 8 pixel sono anche mostrati ingranditi col indicato il valore (in decimale) di ogni pixel.

Scomposizione immagine in quadrati 8 x 8 (JPEG)

Le successive elaborazioni vengono svolte separatamente su ciascuno dei quadrati 8x8. Ogni quadrato viene elaborato secondo un procedimento detto Trasformata Discreta del Coseno (Cosine Discrete Transform o DCT).

Senza entrare nei dettagli tecnici e matematici, la DCT rappresenta ciascun quadrato 8x8 in base non al colore del singolo pixel, ma alle componenti in frequenza (o componenti spettrali). Infatti un'immagine può essere scomposta in base al grado di dettaglio fine in essa rappresentato. Si consideri ad esempio la figura seguente:

Filtered picture

L'immagine originale è in alto a sinistra (a). Subito accanto sulla destra abbiamo una copia dell'immagine dove sono contenute solo le informazioni a bassa frequenza (b). Nelle altre due immagini vediamo le componenti a frequenza intermedia (c) e ad alta frequenza (d). L'immagine totale è data dalla somma di tutte le componenti, cioè

a = b + c + d

Tuttavia è facile osservare come le componenti a bassa frequenza (b) siano di gran lunga le più importanti per il nostro occhio al fine di riconoscere l'immagine, mentre alle frequenze più elevate (c, d) le componenti diventano sempre meno significative.

L'algoritmo JPEG elabora i valori presenti in ogni quadrato 8x8 dell'immagine in base alla DCT. In pratica ogni quadrato (matrice) 8x8 viene trasformato in un'altra matrice 8x8, dove però i numeri non rappresentano più i colori dei pixel ma le informazioni sulla frequenza:

Componenti in frequenza JPEG

In ognuno dei nuovi quadrati 8x8 l'informazione a bassa frequenza si trova nell'angolo in alto a sinistra mentre spostandosi verso l'angolo in basso a destra si va verso i valori di frequenza più alti. Come si può vedere dall'esempio qui sopra, i numeri maggiori si trovano nelle componenti a bassa frequenza (in alto a sinistra) mentre all'aumentare della frequenza i valori diminuiscono.

Finora l'applicazione di DCT non ha effettuato nessuna compressione, in quanto ogni blocco 8x8 è stato trasformato in un altro blocco con le stesse dimensioni (8x8) ma che usa una diversa rappresentazione del contenuto dell'immagine. A questo punto però, dato che le informazioni ad alta frequenza sono meno importanti al fine della ricostruzione dell'immagine, è possibile comprimere l'immagine eliminando (in termine tecnico si dice sottocampionando) una parte dei valori ad alta frequenza.

Questa è la parte lossy dell'algoritmo JPEG e avviene attraverso un processo detto quantizzazione. In pratica i valori presenti in ogni cella della matrice 8x8 vengono rappresentati tramite un numero binario intero (con un certo numero di bit) troncando le parti decimali. In pratica questa operazione di troncamento fa sì che molti valori vengano approssimati con zero.

Come ultimo passaggio, i valori troncati riducendo le componenti ad alta frequenza, vengono codificati per mezzo di un codice Huffman a lunghezza variabile, il quale permette di comprimere lo spazio occupato da ogni matrice 8x8 usando codici più brevi per i valori che si presentano con maggiore frequenza.

Problemi del formato JPEG

Il formato JPEG è molto apprezzato perché permette compressioni molto spinte delle immagini, di fronte a una perdita di qualità spesso trascurabile. Ciò è particolarmente vantaggioso per le immagini condivise in rete, poiché consente di risparmiare sul tempo di scaricamento e dunque di velocizzare la navigazione.

Tuttavia, specialmente con immagini che presentano bordi netti o particolari fini e dettagli molto definiti, il formato JPEG non è così perfetto come sembra, soprattutto se si usa una bassa qualità o se si ingrandisce molto un’immagine. Si osservi a titolo di esempio l'immagine nella figura seguente. A destra viene mostrato il file originale e a sinistra il file compresso con JPEG:

Artefatti in JPEG

Come si vede ci sono alcuni artefatti (difetti introdotti nell'immagine dal processo di compressione) in particolare nei dettagli dei petali del fiore.

Inoltre un altro problema del JPEG è che ogni volta che un’immagine viene modificata e salvata nuovamente, viene introdotta una nuova compressione e dunque la qualità peggiora progressivamente (anche se di poco) ad ogni salvataggio.

Per queste ragioni JPEG non è il formato ideale per conservare immagini e archivi fotografici e viene utilizzato dai fotografi professionisti solo per la distribuzione finale delle immagini (per esempio per mandarle in stampa), ma non per la loro conservazione.

 

 

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it