Le immagini sono memorizzate normalmente in formato bidimensionale dove ogni pixel viene inserito in una matrice. Capite bene che così l’immagine è grandissima da scrivere su disco, facciamo due conti: mettiamo di avere una foto di 1000×1000 pixel a 24 bit ( ogni pixel è rappresentato da 24 bit di colori ossia 16 milioni ), per memorizzarla in via prettamente teorica abbiamo bisogno di 24 x 1000 x 1000 = 24.000.000 bit ossia 3.000.000 byte o 2.930 KB o 2,86 MB, ma solo teorica, perchè poi una bitmap ha bisogno anche dell’header e poi i files devono scrivere altre informazioni e quindi si sale molto di più.
Le immagini quindi devono essere compresse ed i maggiori metodi di compressione sono:
- RLE ( Run Length Encoding )
- LZW ( codifica di Lempel-Ziv-Welch )
- CCITT ( International Telegraph and Telephone Consultative Committee )
- DCT ( Discrete Cosine Transform, lo schema conosciuto come JPEG acronimo di Joint Photographic Experts Group )
I primi 3 sono di tipo lossless e cioè senza perdita di informazione nell’immagine finale compressa che quindi è identica all’originale. L’ultimo è invece di tipo lossy cioè con perdita di informazione dall’originale, ma non visibile o quasi all’osservatore.
Le immagini vengono compresse sui cosiddetti dati ridondanti con un algoritmo matematico; ad esempio, invece di contare x += 1 per 50 volte è molto meglio fare 50 x 1. Da questo è nato un altro modo di concepire la compressione di immagini, il formato RLE di tipo lossless, usato nelle immagini vettoriali ed in quelle in bianco e nero come i fax perchè le foto acquisite non sono lineari ed i metodi che riescono a comprimerle bene sono solo lossy. Tra gli altri possiamo elencare anche GIF ( Graphics Interchange Format ) e TIFF (Tag Image File Format ) che provengono dalla evoluzione della compressione LZW, ma non adatte ad immagini acquisite per il motivo che sono lossless e quindi si riesce a comprimere poco una foto, è preferibile il metodo lossy JPEG. Con le codifiche LZW si riesce a comprimere una foto con un rapporto da 2:1 a 5:1, invece con quelle lossy JPEG da 10:1 a 20:1 quindi 10 volte maggiore.
La compressione JPEG avviene in 4 fasi:
- Trasformazione dello spazio di rappresentazione del colore e sottocampionatura dei colori rispetto alla luminosità che viene percepita molto di più che quella del colore dall’occhio umano.
- Estrazione dall’immagine di blocchi di 8×8 pixel e calcolo dei valori della trasformata ( DCT ) in quanto lavorare sui blocchi di punti luminosi è meno distruttivo che lavorare sui singoli pixel.
- Codifica dei coefficenti di ogni singolo blocco di 64 ( 8×8 ) dati floating point ( virgola mobile ) che vengolo arrotondati ad interi.
- Codifica entropica della sequenza complessiva dei dati. Per u=0 e v=0 il valore della FDTC è proporzionale alla media dei pixel del blocco ed è denominato componente DC, i rimanenti 63 coefficenti si chiamano termini AC.
La decompressione avviene in maniera inversa, ma i dati del punto 3 non sono più ripristinabili perche prima float e poi interi, ecco la perdita dei dati nell’immagine.
Con questo tipo di compressione ci vuole un tempo medio per comprimere le immagini ed un tempo medio per decomprimerle. Esiste anche un’altra tipologia di compressione, IFS ( Iterated Function System ) che sono poi dei frattali dati da una figura geometrica iniziale ( un poligono ) che preso sempre più in profondità si ottiene una rappresentazione grafica dell’insieme frattale descritto dallo specifico IFS. Come ad esempio il triangolo di Sierpinski.
Unico problema di questo approccio è che occorre molto tempo per comprimere l’immagine, bilanciato da una velocità molto alta per decomprimerla che poi è quella importante in quanto la compressione avviene 1 volta e la decompressione ogni volta che debbo vedere l’immagine.
In questo articolo vi ho descritto i maggiori metodi della compressione delle immagini, sperando che con esso abbiate colmato alcune lacune che avevate sui formati per archiviare le vostre foto o i vostri disegni.