La codifica delle immagini ( o convertire un’immagine in bit) si riferisce al processo di trasformare i dati grezzi di un’immagine (ad esempio, pixel o componenti di colore) in un formato compresso o ottimizzato, spesso per l’archiviazione o la trasmissione. Questo processo è fondamentale in molti campi, come la fotografia digitale, la trasmissione video, il web, e i social media, dove è necessario bilanciare la qualità visiva con l’efficienza dello spazio di memoria o la velocità di trasmissione.
La codifica delle immagini si basa principalmente su due tipi di tecniche:
- Codifica senza perdita di dati (lossless):
- In questo tipo di codifica, l’immagine compressa può essere decompressa senza perdita di alcuna informazione, risultando esattamente uguale all’originale.
- I formati più comuni di compressione lossless sono PNG (Portable Network Graphics) e GIF (Graphics Interchange Format).
- Tecniche di compressione lossless includono algoritmi come Huffman coding e Run-Length Encoding (RLE).
- Codifica con perdita di dati (lossy):
- In questo tipo di codifica, l’immagine viene compressa riducendo la quantità di dati. Durante la decompressione, non è possibile ottenere l’immagine originale esatta, poiché alcune informazioni vengono eliminate per ridurre la dimensione del file.
- Questo tipo di codifica è particolarmente utile per ridurre notevolmente la dimensione dei file immagine, accettando una perdita di qualità visiva.
- I formati di compressione lossy più noti sono JPEG (Joint Photographic Experts Group) e WebP.
- Tecniche di compressione lossy includono la Quantizzazione e la Trasformata discreta del coseno (DCT), come spiegato di seguito.
Tecniche di codifica delle immagini (convertire un’immagine in bit)
1. Run-Length Encoding (RLE)
- È una tecnica di codifica semplice e utilizzata nei formati lossless, in cui le sequenze ripetute di pixel vengono rappresentate da un valore e il numero di ripetizioni.
- Esempio: una sequenza di pixel rossi ripetuti (RRRRRR) può essere codificata come R6, risparmiando spazio.
2. Codifica entropica (Huffman Coding)
- Utilizza un approccio basato sulle frequenze dei simboli, come i valori di colore o i pattern di pixel. I simboli che compaiono più frequentemente vengono rappresentati con codici più brevi, mentre quelli meno frequenti con codici più lunghi.
- Questo metodo è usato in formati come JPEG e PNG per ridurre la dimensione del file senza perdita di informazioni.
3. Codifica basata su trasformate (DCT e Wavelet)
- Discrete Cosine Transform (DCT): è una tecnica chiave utilizzata nella compressione delle immagini lossy, come nel formato JPEG. La DCT trasforma blocchi di pixel in componenti frequenziali. Le componenti ad alta frequenza (che tendono a rappresentare dettagli sottili che l’occhio umano ha difficoltà a percepire) vengono ridotte o eliminate per ridurre la dimensione del file, mantenendo una qualità visiva accettabile.
- Trasformata Wavelet: è un’alternativa alla DCT utilizzata in formati come JPEG 2000. È più efficiente della DCT nella gestione delle discontinuità e nella preservazione di dettagli locali nell’immagine.
4. Quantizzazione
- È un processo in cui i valori di colore o frequenza vengono arrotondati o ridotti a un set limitato di valori. Questo processo riduce la quantità di informazioni da memorizzare e viene usato nei metodi di compressione lossy.
- In JPEG, ad esempio, la quantizzazione si applica alle componenti della trasformata DCT per ridurre le informazioni dettagliate meno visibili.
5. Color Subsampling
- Il sistema visivo umano è meno sensibile alle variazioni di colore rispetto alle variazioni di luminosità . Per questo, molte tecniche di compressione delle immagini riducono la quantità di informazioni di colore rispetto alla luminosità .
- Un esempio comune è il chroma subsampling (ad esempio, 4:2:0 nel JPEG), in cui la risoluzione dei colori viene ridotta rispetto a quella della luminosità , riducendo notevolmente la dimensione dell’immagine senza un impatto visivo rilevante.
6. Compensazione del movimento (nelle immagini video)
- Per la compressione di immagini in movimento (come nei video), i frame successivi spesso sono simili. La compensazione del movimento riduce la ridondanza tra frame successivi, codificando solo le differenze (o “residui”) tra un frame e il successivo.
Formati di codifica delle immagini
- JPEG (Joint Photographic Experts Group):
- È il formato più comune per immagini fotografiche su Internet grazie alla sua efficienza nella compressione lossy.
- Utilizza la DCT per convertire l’immagine in frequenze spaziali e la quantizzazione per ridurre i dettagli non percepibili, ottenendo file molto più piccoli a scapito di una perdita di qualità accettabile.
- Supporta anche il chroma subsampling per ridurre i dati relativi al colore.
- PNG (Portable Network Graphics):
- È un formato di compressione lossless, usato quando è necessaria un’alta qualità senza perdita di informazioni (ad esempio, per immagini con testo o grafici).
- PNG utilizza la compressione deflate e supporta la trasparenza, motivo per cui è popolare nelle immagini per il web.
- GIF (Graphics Interchange Format):
- GIF è un formato lossless che supporta un massimo di 256 colori, utilizzando la palette di colori indicizzata.
- È più adatto a immagini semplici come loghi o immagini animate, dove la gamma di colori è limitata.
- WebP:
- È un formato moderno sviluppato da Google, che supporta sia compressione lossless che lossy.
- Promette una migliore compressione rispetto a JPEG e PNG, mantenendo alta la qualità visiva, specialmente per il web.
- JPEG 2000:
- È un successore di JPEG che utilizza la wavelet transform invece della DCT, migliorando la qualità visiva e la capacità di compressione. Tuttavia, non è così ampiamente adottato come il JPEG tradizionale.
- BMP (Bitmap):
- È un formato di immagine non compresso o leggermente compresso, che memorizza direttamente i pixel. È meno utilizzato nel web o nelle applicazioni moderne a causa delle sue grandi dimensioni rispetto ai formati compressi.
Compressione e QualitÃ
- Qualità vs Dimensione del file: Un problema comune nella codifica delle immagini è il bilanciamento tra la dimensione del file e la qualità dell’immagine. Una compressione eccessiva (specialmente con i metodi lossy) può introdurre artefatti visivi, come blocchi JPEG, che degradano l’immagine.
- Artefatti: I metodi lossy possono introdurre distorsioni o imperfezioni chiamati artefatti. Nei JPEG, ad esempio, possono apparire blocchi evidenti o perdita di dettagli a basse impostazioni di qualità .
Codifica delle immagini per applicazioni specifiche (convertire un’immagine in bit)
- Codifica per il Web:
- Le immagini per il web devono bilanciare velocità di caricamento e qualità visiva. Formati come JPEG e WebP sono spesso preferiti per fotografie, mentre PNG è utilizzato per immagini con testo o trasparenza.
- Codifica per video:
- I video sono una sequenza di immagini, quindi le tecniche di codifica delle immagini sono strettamente correlate alla compressione video. Formati come H.264 e HEVC utilizzano tecniche simili (come DCT e compensazione del movimento) per comprimere i dati video in modo efficiente.
In sintesi:
La codifica delle immagini ( o convertire un’immagine in bit) è un processo essenziale per ridurre le dimensioni dei file immagine mantenendo una qualità visiva accettabile. Tecniche come la paginazione, la DCT, la quantizzazione e il chroma subsampling sono ampiamente utilizzate per bilanciare la compressione e la qualità . La codifica può essere lossy o lossless, a seconda delle necessità dell’applicazione e della qualità richiesta. I formati più comuni includono JPEG, PNG, GIF, WebP e BMP, ciascuno con vantaggi specifici a seconda dell’uso.
Ecco un esempio di calcolo pratico della conversione di un’immagine: esempio pratico.