Comprimere Foto ed Immagini

Le immagini ed i formati di compressione di foto più diffusi come RLE, LZW, CCITT e DCT fino ad arrivare alla compressione frattale.

Le immagini sono normalmente memorizzate in formato bidimensionale, dove ogni pixel viene inserito in una matrice. Questo comporta che l’immagine occupi molto spazio su disco. Facciamo un esempio: una foto di 1000×1000 pixel a 24 bit (ogni pixel rappresentato da 24 bit di colore, ossia 16 milioni di colori) richiede teoricamente 24 x 1000 x 1000 = 24.000.000 bit, cioè 3.000.000 byte, ovvero circa 2.930 KB o 2,86 MB. Tuttavia, questo è solo un valore teorico, poiché una bitmap necessita anche di un header e di altre informazioni, aumentando ulteriormente la dimensione del file.

Metodi di compressione delle immagini

Per ridurre lo spazio occupato, le immagini vengono compresse utilizzando diversi metodi, tra cui:

  • RLE (Run Length Encoding)
  • LZW (codifica di Lempel-Ziv-Welch)
  • CCITT (International Telegraph and Telephone Consultative Committee)
  • DCT (Discrete Cosine Transform), noto come JPEG (Joint Photographic Experts Group)

I primi tre metodi sono di tipo lossless, cioè senza perdita di informazione, quindi l’immagine compressa è identica all’originale. L’ultimo, invece, è di tipo lossy, con perdita di informazione, ma generalmente non visibile all’osservatore.

La compressione si basa sull’eliminazione dei dati ridondanti tramite algoritmi matematici; ad esempio, invece di contare “x += 1” per 50 volte, si registra “50 x 1”. Il formato RLE, di tipo lossless, è usato soprattutto nelle immagini vettoriali e in bianco e nero, come i fax, perché le foto acquisite non sono lineari e i metodi che le comprimono bene sono solo lossy.

Tra i formati evoluti dalla compressione LZW troviamo anche GIF (Graphics Interchange Format) e TIFF (Tag Image File Format), ma non sono adatti per immagini fotografiche perché, essendo lossless, comprimono poco le foto. Per le foto è preferibile il metodo lossy JPEG.

Con la codifica LZW si ottiene un rapporto di compressione da 2:1 a 5:1, mentre con JPEG si arriva da 10:1 a 20:1, quindi circa 10 volte maggiore.

Compressione JPEG

La compressione JPEG avviene in quattro fasi:

  1. Trasformazione dello spazio di rappresentazione del colore e sottocampionatura dei colori rispetto alla luminosità, che è percepita molto più intensamente dall’occhio umano.
  2. Estrazione dall’immagine di blocchi di 8×8 pixel e calcolo della trasformata discreta del coseno (DCT) su ciascun blocco, poiché lavorare su blocchi di punti luminosi è meno distruttivo che lavorare sui singoli pixel.
  3. Codifica dei coefficienti di ogni blocco di 64 dati floating point, che vengono arrotondati a interi.
  4. Codifica entropica della sequenza complessiva dei dati.

Nel dettaglio, per u=0 e v=0 il valore della FDTC è proporzionale alla media dei pixel del blocco ed è denominato componente DC, mentre i rimanenti 63 coefficienti si chiamano termini AC.

La decompressione avviene in modo inverso, ma i dati del punto 3 non sono più ripristinabili a causa dell’arrotondamento da float a interi, causando la perdita di dati nell’immagine.

Esempi pratici di compressione

Esempio 1: Compressione RLE

Immaginate un’immagine in bianco e nero con una lunga striscia di pixel bianchi seguiti da una lunga striscia di pixel neri. Invece di memorizzare ogni singolo pixel, la compressione RLE registra la quantità di pixel consecutivi dello stesso colore. Ad esempio, 50 pixel bianchi seguiti da 30 pixel neri si codificano come “50 bianchi, 30 neri”. Questo riduce drasticamente la dimensione del file per immagini con ampie aree uniformi.

Esempio 2: Compressione LZW

Supponiamo di avere un’immagine GIF con molte ripetizioni di pattern di colori. L’algoritmo LZW costruisce un dizionario di sequenze di pixel ricorrenti e le sostituisce con codici più corti. Ad esempio, una sequenza di pixel “rosso, rosso, blu, rosso, rosso” potrebbe essere codificata con un codice unico che rappresenta questa sequenza, riducendo la dimensione del file.

Esempio 3: Compressione JPEG

Consideriamo una foto digitale a colori. La compressione JPEG trasforma l’immagine in blocchi 8×8 pixel, calcola la trasformata discreta del coseno (DCT) per ogni blocco, e arrotonda i coefficienti. Le frequenze alte (dettagli fini) vengono spesso eliminate o ridotte perché l’occhio umano non le percepisce facilmente. Questo permette di ridurre molto la dimensione del file mantenendo una qualità visiva accettabile. Ad esempio, una foto originale di 5 MB può essere compressa a 500 KB con perdita minima di qualità visibile.

In questo articolo sono stati descritti i principali metodi di compressione delle immagini, con l’obiettivo di colmare alcune lacune sui formati utilizzati per archiviare foto e disegni.

Esempio 4: Compressione WebP e PNG

Compressione WebP

WebP è un formato di immagine sviluppato da Google che combina compressione lossy e lossless. Ad esempio, un’immagine PNG di 1 MB può essere compressa in WebP a circa 400 KB mantenendo una qualità visiva molto simile. WebP utilizza tecniche avanzate di compressione basate su DCT simili a JPEG, ma con miglioramenti che permettono una compressione più efficiente e supporto per trasparenza.

Compressione PNG

PNG è un formato lossless molto usato per immagini con trasparenza o grafica a colori piatti. Ad esempio, un logo con aree di colore uniforme e trasparenza può essere compresso da 500 KB a circa 300 KB senza perdita di qualità. PNG utilizza compressione basata su DEFLATE, un algoritmo di compressione senza perdita che combina LZ77 e codifica Huffman.

Questi formati sono molto usati sul web per bilanciare qualità e dimensione, specialmente per immagini con trasparenza o necessità di alta fedeltà.

Altri metodi di compressione

Esiste anche la compressione IFS (Iterated Function System), basata su frattali generati da una figura geometrica iniziale (ad esempio un poligono). Approfondendo la rappresentazione si ottiene un’immagine frattale, come il triangolo di Sierpinski.

Triangolo di Sierpinski

Il problema principale di questo metodo è il tempo elevato necessario per comprimere l’immagine, bilanciato però da una decompressione molto veloce, che è importante perché la compressione avviene una sola volta mentre la decompressione avviene ogni volta che si visualizza l’immagine.

Conclusione

In questo articolo sono stati descritti i principali metodi di compressione delle immagini, con l’obiettivo di colmare alcune lacune sui formati utilizzati per archiviare foto e disegni.

Lascia una risposta

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Modifica preferenze cookie