Cours n 5 : UV Théorie de l Information Compression de l information : Codage de source sans distorsion Ex 1 : Code de Shannon Fano Ex 2 : Code de Huffman Ex 3 : Codage par plage Ex 4 : Codage de Lempel Ziv (Welch) Ex 5 : Codage arithmétique 1 Codes à longueur variable Encodage par signe Long. Optimale l i des mots code [nb. de symboles binaires] = Quantité d Information I(s i ) associée au signe s i Encodage par blocs de m signes Long. Optimale l i des mots [nb. de symboles binaires] = Quantité d Information I(s 1,...,s m ) associée au bloc de m signes Mais l i ℵ=> 1 (Longueur sous optimale) c i.e. codage de Shannon Fano, codage de Huffman, codage par plage, codage arithmétique, etc. 2
3 Ex 1 : Codage de Shannon Fano Encodage binaire (Q=2) (généralisation possible pour Q>2) : Ordonner les signes s i à encoder dans l ordre non croissant des probabilités p(s i ) ; Diviser l ensemble de ces signes ainsi ordonnés en Q=2 sous ensembles ordonnés, aussi équiprobables que possible ; Attribuer à chaque sous ensemble un symbole binaire d encodage distinct ; Répéter la même procédure pour chaque sous ensemble jusqu à ce que chaque signe possède un code binaire distinct. Remarque : Cette procédure ne garantit pas qu il n existe pas une autre procédure conduisant à une valeur < L sh fano Ex 2 : Codage de Huffman Encodage binaire (Q=2) (généralisation possible pour Q>2) : 0rdonner les signes s i à encoder dans l ordre des probabilités décroissantes ; Construire un arbre d encodage en partant de la fin (attribuer aux 2 signes de plus faibles probabilités s n et s n 1 les symboles d encodage «0» et «1» respectivement) ; Remplacer ces 2 signes par un nouveau signe s (n 1)n (de probabilité p(s n 1 )+p(s n ) ) qui dévient noeud de l arbre d encodage ;( Si N Q+k(Q 1), ajouter de symboles fictifs ayant des probabilités nulles). Recommencer la procédure en combinant de nouveau les 2 signes de plus faibles probabilités après leur avoir attribué à leur tour un symbole d encodage distinct ; Poursuivre jusqu à ce que toutes les probabilités p(s i ) aient été combinées ; l arbre d encodage est alors terminé. Les mots code se lisent en revenant en arrière. 4
Ex 2 : Codage de Huffman Code à décodage instantané compact (PPLM) répandu en raison de son gratuité et son efficacité ; préconisé dans de normes de compression d image (JPEG, MPEG) ; efficacité meilleure si encodage par blocs de signes (possibilité L d obtention de m bits signe 1 ) ; m comparé au Code de Shannon Fano, gain en compression parfois mineur devant l augmentation de la complexité des algorithmes de codage/décodage. 5 Vers de codes sans distorsion sous optimum Codages de Shanon Fano et de Huffman Difficiles à utiliser dans un système temps réel (complexité du dictionnaire d encodage) Procédures de codage sans distorsion sous optimales Codeurs décodeurs plus simples et économiques, tout en gardant une efficacité intéressante Exemples : Codage par plage et Codage de Lempel Ziv 6
EX 3 : Codage par plage (run length coding) Principe : Rassembler en paquets les signes s i (émis par une source S) qui se suivent et sont identiques Au lieu de coder chaque signe s i, coder des paires de nombres : (plage i, valeur i ) où la plage représente le nombre de signes à valeur identique rassemblés 7 EX 3 : Codage par plage (run length coding) Exemples : Image à peu de niveaux de gris ou de couleurs Ex. de codage d une suite de niveaux de gris prélevés sur une ligne horizontale : 10, 10, 10, 17, 18, 18, 31, 31, 31, 31 => (3,10), (1, 17), (2, 18), (4, 31) Image binaire à 2 niveaux de gris (télécopie) Ex. de codage d une suite d échantillons prélevés selon des lignes horizontales : 0, 0, 0, 1, 1, 1, 1, 1, 0, 1 => (3), (5), (1), (1) 8
EX 3 : Codage par plage (run length coding) Remarques : Codage efficace seulement si les plages de signes sont suffisamment grandes Signes issus d une télécopie classique => Codage selon les normes T4, T5 du CCITT Signes issus d une source ne présentant pas la propriété précédente, peuvent être transformés de manière réversible pour qu elle soit vérifiée => Codage selon les normes JPEG, H261, MPEG 9 EX 3 : Codage par plage (run length coding) Adaptation de l algorithme RLC : Considérer une paire (plage i, valeur i ) comme 1 vecteur à 2D Associer à chaque vecteur (paire) possible 1 seul mot binaire Préférer des mots code à longueur variables (ex : algo. de Huffman)!!! Nécessité de répertorier TOUS les vecteurs (paires) possibles, puis de déterminer pour chacun sa probabilité d apparition 10
Principe : EX 4 : Codage de Lempel Ziv Repérage des séquences qui se répètent dans un message complet de signes (caractères d un texte, niveaux de gris dans une image, etc.) ; séquences à stocker dans une table de traduction Coder une séquence déjà présente dans la table de traduction par son adresse dans cette table Exemples de telles séquences : Certaines instructions dans un programme écrit en C ; Motifs identiques sur les lignes d une image (surtout si elle est structurée verticalement). 11 12 EX 4 : Codage de Lempel Ziv Initialisation : Stocker dans la table de traduction tous les signes de l alphabet de la source ; (Remarque : Les adresse des locations serviront à coder tout caractère qui ne pourrait être reconnu comme appartenant à une séquence de plus d un caractère.) Construire la plus longue séquence par concaténation des caractères successifs entrant dans le codeur en vérifiant que tout nouveau caractère associé constitue une séquence déjà présente dans la table de traduction, SINON : Coder la dernière séquence reconnue par son adresse dans la table de traduction Concaténer le caractère innovant à la dernière séquence reconnue, puis stocker cette nouvelle séquence à la 1ère location libre dans la table de traduction Reprendre à partir du caractère innovant
Remarques : EX 4 : Codage de Lempel Ziv la longueur de la séquence à coder, son code binaire est toujours une adresse mémoire (=> nombre de bits fixe) Augmentation du taux de compression avec la longueur des séquences reconnues Codage mal adapté aux signaux à évolution suffisamment variée (pour qu il soit impossible d y reconnaître de longues séquences identiques) 13 EX 4 : Codage de Lempel Ziv Performances d après Guillois, 1996 : Programme source écrit en C de 832 lignes (commentaires compris) : Avant compression Taille : 29707 octets Logo de l ENST : Avant compression Taille : 41515 octets Après compression Taille : 9279 octets Après compression Taille : 1083 octets 14
EX 4 : Codage de Lempel Ziv Performances d après Guillois, 1996 : «Lena» : image NB sur 256 niveaux de gris, 512 X 512 pixels Avant compression Après compression Taille : 262159 octets Taille : 234214 octets «Bateaux» : image NB sur 256 niveaux de gris, 512 X 512 pixels Avant compression Après compression Taille : 262159 octets Taille : 216384 octets 15 EX 4 : Codage de Lempel Ziv Remarques : Gain en compression dépendant du contenu Mise en oeuvre actuelle sur des images en couleurs (24 bits ou 16 millions de couleurs) impossible sans distorsion Algorithme largement répandu : fichiers au format PDF ; fichiers Z, zip, gzip, pkzip (adaptation LZ77) ; images comprimées PNG (adaptation LZ77) ; images comprimées TIF et GIF (adaptation LZWelch brevetée par UNISYS à licence obligatoire depuis 1995). 16
Principe : Codage d une suite de signes par une séquence représentant une valeur fractionnaire de l intervalle réel [0,1] Procédure récursive encodant un signe à chaque itération : Réduction de la largeur de l intervalle réel en fonction de la probabilité du nouveau signe à encoder ; réduction d autant plus faible que le signe est probable Nombre de bits de spécification inversement proportionnel avec la probabilité 17 18 Procédure récursive encodant un signe à chaque itération : Initialisation : Attribuer à chaque signe s i une portion de l intervalle [0, 1] de largeur proportionnelle à sa probabilité 1ère itération : Identifier, pour le 1er signe du message, le sous intervalle correspondant 2ème itération : Diviser cet intervalle partiel selon les règles de partition, puis identifier, pour le 2ème signe du message, le sous sous intervalle correspondant... Répéter la procédure jusqu à la fin du message indiquée par un signe convenu
Règle de partition en fraction binaire : ½ >.100, ¼ >.010, ¾ >.110, etc. Décodage : A partir de la séquence binaire entière, en cherchant par comparaisons successives à simuler le fonctionnement de l encodeur qui l a produite. 19 Remarques :!!! Les notions suivantes n ont plus de sens : Codage par signe : C est le message complet qui est codé binairement. Préfixage : C est la séquence binaire entière qui est décodée. 20
Remarques (suite) : Couvert par des brevets détenus par IBM, AT&T et MITSUBISHI => utilisation soumise à la détention d une licence Comparé à l algorithme de Huffman : + légèrement plus efficace en terme du taux de compression, car le codage ne nécessite pas un nombre entier de bits par signe (l optimum étant ) l i log P x i plus lourd en termes d implantation logicielle et du temps de calcul 21 Remarques (suite) : Pour une source à alphabet volumineux, la séquence binaire codée n est connue qu au moment de la saisie du dernier signe du message à encoder fort probable qu une retenue vienne modifier la mesure du message à encoder (les bits de PF du résultat d additions) : M sx M s où M(s) = mesure de la séquence «s» N(s) = norme de la séquence «s» sx = «s» concaténée avec le caractère unique «x» Nécessité d une précision croissante des calculs (+ et *) au fur et au mesure que l algorithme avance 22 N s M x
Remarques (suite) : Bien adapté au codage adaptatif (où la fréquence relative d apparition est estimée et mise à jour en cours de codage) => Séparer la modélisation de la source de la conception de l algorithme de codage => Appliquer le même algorithme au codage de sources différentes Utilisé pour la compression de données : programmes et fichiers) et prévu pour la compression d images (ex : JPEG) à condition d en détenir la licence 23