Qu’est-ce que le codage entropique ?

Le codage entropique est une compression sans perte qui utilise en moyenne moins de bits pour les symboles les plus probables et davantage pour les moins probables. Le codage de Huffman et le codage arithmétique sont des méthodes courantes.

Fonctionnement du codage entropique

Un codec convertit d’abord les informations sources en symboles dont la distribution statistique peut être modélisée, puis une étape de codage entropique représente les séquences probables de manière compacte. Le décodeur doit connaître ou reconstruire les mêmes tables de codes, contextes et états pour inverser cette représentation. Cette étape diffère de la quantification : elle peut réduire le nombre d’octets, mais ne supprime pas intentionnellement de valeurs de symboles. Elle intervient couramment vers la fin d’un encodeur d’images, d’audio ou de vidéo et vers le début du décodeur correspondant.

Points clés

  1. Un code de Huffman attribue à chaque symbole codé son propre mot de code de longueur variable ; il ne peut donc pas utiliser moins d’un bit par symbole, aussi prévisible soit-il. Le codage arithmétique n’a pas ce plancher. La spécification VP8, dont le codeur booléen est une variante de codeur arithmétique, développe un exemple dans lequel une issue a une probabilité de 1/1024 et le débit minimal possible est d’environ un centième de bit par valeur. Le gain est maximal pour des données à distribution fortement déséquilibrée et disparaît lorsque les deux issues sont équiprobables, cas pour lequel le même texte donne une borne inférieure d’un bit.
  2. Le codage entropique peut être refait sans modifier la qualité. L’outil jpegtran de libjpeg-turbo réorganise les coefficients DCT compressés d’un JPEG sans décoder entièrement l’image, et sa documentation décrit comme sans perte le passage à des paramètres entropiques optimisés, à des balayages progressifs ou au codage arithmétique. Pour cjpeg, la même documentation indique que -optimize réduit généralement un peu la taille du fichier sans modifier la qualité de l’image ni la vitesse de décompression, tandis que l’encodeur s’exécute un peu plus lentement et nécessite beaucoup plus de mémoire ; jpegtran accepte la même option. L’outil jpegtran ne peut pas modifier le réglage de qualité et peut supprimer des métadonnées : son option par défaut, -copy comments, conserve les marqueurs de commentaire et supprime les autres métadonnées ; utilisez donc -copy all pour conserver les données Exif, un profil ICC et les autres marqueurs supplémentaires.
  3. Un codeur entropique plus efficace n’est utile que si tous les décodeurs cibles l’implémentent. Dans la norme JPEG, le processus séquentiel de base utilise le codage de Huffman, et le codage arithmétique n’est disponible que dans les processus étendus et sans perte. La documentation de libjpeg-turbo avertit que le JPEG à codage arithmétique est peu implémenté et que de nombreux décodeurs ne peuvent pas du tout lire un tel fichier. Vérifiez les décodeurs que vous devez prendre en charge avant d’activer un mode entropique autre que celui par défaut.
  4. Le décodeur doit reproduire exactement les tables et l’état des probabilités de l’encodeur ; les dommages s’étendent donc au-delà des octets corrompus. La documentation de libjpeg-turbo indique que, sans marqueurs de redémarrage, les dommages subis par un JPEG dégradent généralement l’image depuis l’erreur jusqu’à la fin ; avec ces marqueurs, ils restent généralement limités à la portion précédant le marqueur suivant, et les marqueurs occupent de l’espace supplémentaire. JPEG réinitialise sa prédiction DC et ses estimations de probabilités arithmétiques à chaque intervalle de redémarrage, ce qui permet au décodage de reprendre à cet endroit. L’outil jpegtran n’émet aucun marqueur de redémarrage par défaut, même lorsque le fichier source en contient, et ne reprend pas l’intervalle de la source : -restart N insère de nouveaux marqueurs toutes les N lignes de MCU ; choisissez donc N explicitement pour conserver cette protection. Sa documentation inclut -restart parmi les options qui définissent la représentation codée et qualifie ses transformations de sans perte ; un fichier non endommagé est donc décodé en une même image avec ou sans marqueurs.

Quand le codage entropique est utile

Les développeurs de codecs appliquent le codage entropique aux coefficients quantifiés, aux résidus de prédiction et à d’autres valeurs structurées ; son efficacité dépend de la fidélité du modèle de probabilité aux données. Les autres utilisateurs le rencontrent sous forme de réglage de l’encodeur : les outils JPEG proposent des tables de Huffman optimisées ou le codage arithmétique, et les encodeurs H.264 proposent CAVLC ou CABAC. Cette étape ne supprime rien par elle-même ; à quantification donnée, ces réglages constituent donc un compromis entre la taille du fichier, le coût d’encodage et la prise en charge par les décodeurs.

Références

Transformer vos connaissances sur les médias en une chaîne de traitement opérationnelle

Reliez les téléversements, le traitement, l’IA, le stockage et la diffusion via une seule API déclarative — la pile d’encodage, la montée en charge et l’évolution constante des formats sont prises en charge pour vous.

Essayer Transloadit gratuitement