Compression d'image
This document is also available in English
Compression sans perte
Ce projet est né lors de la sortie de l'excellent format QOI. Sa simplicité et ses performances ont piqué ma curiosité et m'ont fait me poser les questions suivantes:
- peut-on améliorer le taux de compression de QOI tout en conservant un bon niveau de performances?
- quels sont les autres formats / codecs de compression d'image sans perte et quel est leur rapport taux/durée de compression?
Principaux formats actuellement disponibles
Benchmark
Prenons l'image culte de ce domaine, Léna...
... et essayons de la compresser avec les réglages par défaut des compresseurs suivants:
| Format | Taille du fichier (Ko) | Temps de compression (secondes) |
|---|---|---|
| PPM (non compressé) | 769 | 0 |
| QOI | 712 | 0.15 |
| PNG | 464 | 0.37 |
| WEBP (lossless) | 418 | 1.0 |
| JPEG XL (lossless) | 416 | 1.5 |
| FLIF | 422 | 1.9 |
| PAQ | 382 | 147.0 |
Ces chiffres illustrent bien l'arbitrage que doivent opérer les compresseurs, selon qu'ils visent à minimiser:
- la taille du fichier résultant (PAQ)
- le temps de compression (QOI)
Déroulement du projet
Ce type de projet n'a pas de fin: si son objectif initial était d'améliorer le taux de compression de QOI, la tentation de se confronter aux autres compresseur est trop grande... et il existe toujours un meilleur compresseur (du moins jusqu'à PAQ)!
En chemin, j'ai eu la chance d'en apprendre davantage sur:
- les encodeurs entropiques, en particulier ANS de Jarek Duda.
- les 1001 façons d'assembler les bits et logarithmes qui représentent les pixels de chaque canal de couleur pour limiter le nombre d'octets à compresser (même si certaines sont contre-productives et ont un effet négatif sur l'encodeur entropique)
- l'impact du contexte (voisinage proche) sur l'encodage de chaque pixel
- l'intégration de techniques d'apprentissage automatique (Machine Learning) et l'impact sur les performances à l'exécution
Je me concentre pour l'instant sur la compression de photographies (ou d'images médicales / satellites...). La compression d'icones, de pictogrammes ou de copies d'écran doit faire l'objet d'un traitement différent: nombre de couleurs restreint, haut degré de répétition des pixels / patterns.
Progression
Mon objectif est d'approcher ou de dépasser les taux de compression de JXL / FLIF / WEBP et le temps de compression de PNG.
Je mettrai à jour cette page au fur et à mesure de la progression du projet.
Ce projet n'a pas de forum dédié. Les demandes et autres réactions peuvent être adressées à [email protected].