Cours codage

51
Formats de Documents Roberto Mantaci 13 mars 2012

description

codage

Transcript of Cours codage

  • Formats de Documents

    Roberto Mantaci

    13 mars 2012

  • 2

  • Chapitre 1

    Introduction

    3

  • 4 CHAPITRE 1. INTRODUCTION

  • Chapitre 2

    Gnralits

    2.1 Prsentation et Principes de la Compression de Donnes

    Compression de Donnes = convertir un stream (= source, plus appropri que fichier) dedonnes en entre en une autre de taille plus petite.

    Raisons : stockage vitesse de transfertLa notion de compression de donnes est lie la notion de codage. En fait on parle de codage

    de la source.Il existent plusieurs mthodes trs diverses pour cela, mais elles sont toutes bases sur un

    mme principe : rduire la redondance.

    Exemple 1 Redondance alphabtique : E plus frquent que Z donc il faut donner E un motde code plus court. Un code uniforme (tous les caractres sont cods avec des mots de code de lamme longueur) a plus de redondance quun code de taille variable, mme si il a son utilit.

    Exemple 2 Redondance Contextuelle : aprs Q toujours U.

    Exemple 3 Redondance Contextuelle dans images : plusieurs pixels tendent avoir la mmecouleur que leurs voisins.

    Principe de Base de la Compression de Donnes : attibuer codes depetite longueur vnements plus frquents et codes plus longs auxvnements plus rares.

    La compression de donnes est possible car souvent les donnes sont reprsentes de manireredondante (P. ex. ASCII)

    Cela explique aussi pourquoi un fichier dj compress ne peut pas tre compress ultrieu-rement : toute la redondance a t limine (ou presque). Sinon on pourrait continuer linfini.Il y a un niveau dinformation "essentielle" au dessous de la quelle on ne peut pas descendre. Ilfaudra parler de comment mesurer linformation.

    La plupart des fichiers de donnes ne peuvent pas tre compresss(en fait, tous ceux qui sont random, sans structure, sans regularitet donc sans redondance).

    1

  • 2 CHAPITRE 2. GNRALITS

    La plupart des fichiers de donnes ne peuvent pas tre compresss (en fait, tous ceux qui sontrandom, sans structure, sans regularit et donc sans redondance ne peuvent pas ltre).

    Si A, B files, A 6= B, C compress de A et D de B. Alors C 6= D sinon on ne pourrait pasreconstruire.

    Supposons que nous sommes satisfaits de compresser de 50% un fichier. Il y a 2n fichiers den bits que nous voudrions compresser en fichiers de n/2 bits ou moins. Il y a

    N = 1 + 2 + 22 + . . .+ 2n/2 = 2n/2+1 1

    de tels fichiers. Donc seulement N des 2n fichiers peuvent tre efficacement compresss. MaisN

  • 2.2. VOCABULAIRE 3

    Compression symtrique : Encodeur et dcodeur utilisent le mme algorithme en direc-tions opposes. Ils font donc "le mme travail". Dans le cas contraires, lun des deux doittravailler davantage. Par exemple, dans un cas o lencodeur va stocker un fichier compressdans une archive (opration effectue une fois) et le fichier sera ensuite tlcharg pour tredcompress par plusieurs utilisateurs (dcodeurs), on prfrera une mthode asymtriqueo la dcompression est moins complexe que la compression.

    Performances de compression : Plusieurs grandeurs et quantits :

    - le rapport (ratio) de compression : =taille stream de output (compress)taille stream de input (original)

    Aussi dit bpb (bit per bit) parce quil exprime le nombre de bit ncssaires en moyennepour reprsenter dans le stream cod un bit du stream dorigine.Pour les images on parle de bpp (bit per pixel).Pour le texte on parle de bpc (bit par caractre).Bitrate est un terme gnral pour bpb ou bpc.

    - le facteur (factor) de compression : = taille stream de input (original)taille stream de output (compress)

    (linverse

    du prcdent)

    - le gain de compression : = 100 log taille stream de rfrence (original)taille stream compresso le strem de rfrence et soit le stream dorigine soit un stream obtenu par une mthodesans perte.

    Modles probabilistes : Le modle doit tre construit avant de pouvoir comprimer. Parexemple on lit une fois, on compte les occurrences de chaque caractre, on calcule proba-bilits ensuite on encode la 2e passe.

  • 4 CHAPITRE 2. GNRALITS

  • Chapitre 3

    Techniques de base (mthodesintuitives ou du pass

    3.1 Brailles

    Groupes de 3 2 points quivalents 6 bits, on peut donc reprsenter 26 = 64 symboles :typiquement les lettres, chiffres, ponctuation et les strings les plus communes (P. ex en anglaisound, ation, th). Compression limite (les livres en brailles sont trs voluminuex) maisimportante.

    3.2 Compression de texte irreversible

    Seulement pour cas trs spciaux quand jeter la poubelle de linformation reste acceptable.On laissse simplement tomber de linfo (P. ex plusieurs sont cods par un seul ou bien casextrme tous les caractres sauf les lettres et les sont limins et toutes les lettres majusculessont transformes en minuscules = 27 symboles en tout = 5 bits suffisent, plutt que les 8 deASCII. Le rapport de compression est donc 5/8 = 0, 625 mais il y a beaucoup de perte. Puisque25 = 32, il reste mme 32 27 = 5 mots de code de longueur 5 utiliser pour codes les chanesplus frquentes.

    3.3 Compression de texte reversible ad hoc

    Voici quelques ides quand la compression doit tre rversible. texte avec beaucoup de parpills. On les limine et on ajoute une bitstring {0, 1} oi-me lettre bitstring = 1 i-me lettre stream = .voici un petit exemple devient voiciunpetitexemple + 000001001000001000000On verra que ce dernier bitstring est facilement et fortement compressible.

    ASCII est dhabitude sur 8 bit dont 1 pas ncessaire pour 128 = 27 symboles. Peut trecompress en lcrivant sur 7(Packing). Rapport de compression 7/8 = 0, 875.

    Un exemple qui peut tre appliqu en cas dalphabets de petite taille. Supposons 40 carac-tres (p. ex 26 lettres, 10 chifffres, , 3 symboles de ponctuation). Si on les regroupe par

    5

  • 6 CHAPITRE 3. TECHNIQUES DE BASE (MTHODES INTUITIVES OU DU PASS

    triplets on 403 = 64000 triplets. Puisque 216 = 65536 > 403, chaque triplet peut tre codavec 16 bits (2 octets). Sans compression, chacun des 40 caractres a besoin d1 octet (enASCII) donc chaque triplet fait 2 octets au lieu de 3. Rapport de compression 2/3 = 0, 666(lun des rares cas o il est constant et connu).

    Code Baudot (1880, tlgraphe) 5 bits (32 combinations) mais on reprsente plus de 32symboles. Chaque quintuplet de bits code soit une lettre, soit une figure. Deux caractresspciaux (meta-caractres ou caractres dchappement) permettant de passer dune repr-sentation lautre. Au total 32 2 2 = 62 caractres. Pas trs sr, car il ny a pas de bitde parit ou contrle (parler de la question de la correction derreur de transmission).

    Codage de Dictionnaires (ou donnes stockes en ordre alphabtique). Deux mots adjacentspartagent souvent un prfixe commun (disons de longueur n), alors un mot peut trereprsent par le nombre n suivi du suffixe diffrent.

    Mot du dictionnaire Mot coda a

    aardvark 1ardvark

    aback 1back

    abaft 3ft

    abandon 3ndon

    abandoning 7ing

    3.4 Run Length Encoding (RLE)

    Un run est une suite de valeurs toutes gales entre elles.Principe : Si une donne d apparat n fois conscutives, alors remplacer d . . . d

    n fois

    par n d.

    Appliqu texte et image.

    3.4.1 Compression de texte par RLE

    La chane :"attendre 2 secondes avant de passer"

    devient"a2tendre 2 secondes avant de pa2ser" (ambigu, pas de gain)

    donc avec un meta-symbole @ :"a@2tendre 2 secondes avant de pa@2ser" (pas ambigu, mais perte)

    Donc il convient de remplacer seulement les occurrences de 3 rptitions, ou plus.

    Exercice : Ecrire lalgorithme dun compresseur et dun dcompresseur RLE.

    Problmes :

    1. Dans les langages natures il existes beaucoup de doubles mais trs trs peu de triplets.

    2. Si @ est un caractre du texte, un autre meta-caractre doit tre choisi

    3. Si le compteur de rptitions est reprsent par un octet, il pourra compter au plus 255rptitions.

  • 3.4. RUN LENGTH ENCODING (RLE) 7

    On peut calculer le facteur de compression dun RLE pour un stream de N caractres ayantM rptitions de longueur moyenne L. Chaque rptition (run) est remplace par un triplet(escape, compteur, donne) :

    N

    N (M L) + (3M)=

    N

    N M(L 3)

    pour N = 1000,M = 10, L = 3 = facteur de compression = 1.01pour N = 1000,M = 50, L = 10 = facteur de compression = 1.538

    3.4.2 Variante 1

    Pour alphabets de petite taille qui nutilisent pas tous les symboles disponibles (P. ex. lettres,chiffres, caractres de ponctuation, par rapport tous les ASCII) : codage par digramme (couplesde lettres). On identifie les digrammes les plus communs et on les remplace par un caractre (lescodes non utiliss) de ceux qui napparaissent pas dans le texte (p. ex. en anglais "E", "T","TH", "A".)

    3.4.3 Variante 2

    Substitution de motifs. Bon pour programmes (codes source) o certains mots (P. ex les motscl du langage de programmation) sont recourants = ces mots peuvent tre cods par un seulcaractre, ou bien par @ et un caractre. Par exemple si "a" correspond "print" alors "print(a)"devient "@a(a)".

    3.4.4 Relative Encoding

    Suites de donnes (P. ex. numriques, comme une longue suite de tempratures releves intervalles rguliers, ou une suite de strings qui ne diffrent pas beaucoup lune de lautre p.ex. les lignes conscutives dun fax) qui ne diffrent pas beaucoup = on a intrt coder lesdiffrences avec la donne prcdente. Si les diffrences deviennent trop importantes, alors onpeut envoyer la donne brute = il faut une flag (1 bit de plus) pour distinguer donns bruteset diffrences. En gnral, quand on doit envoyer des flags, on attends den avoir 8 avant deles envoyer pour quils forment un octet (le dcodeur devra attendre aprs 8 donnes (un octetchacune, par exemple) de recevoir loctet de flags pour dcoder les 8 donnes prcdentes (codes dlai born).

    Une autre pratique : envoyer des couples doctets (16 bits) chaque couple est soit une valeurabsolue (dans [0, 216 1] = [0, 65535] ou dans [215, 215 1] = [32768, 32767]), ou bien deuxdiffrences sur huit bits chacune (donc dans [28, 28 1] = [256, 255]). Pour chaque couple, unflag est mis : 0 pour les valeurs absolues et 1 pour les diffrences. Aprs 16 couples doctets, onenvoie leurs 16 flags (un autre couple doctets).

    Exemple 4 Par exemple :

    valeurs 51110 51115 51121 51119 8200 8202 8205 8207 8206 . . .

    codes 51110 (5, 6) (2,1) 8200 (5, 6) (2,1) (1,1) . . .flags 0 1 1 0 1 1 1 . . .

  • 8 CHAPITRE 3. TECHNIQUES DE BASE (MTHODES INTUITIVES OU DU PASS

    3.5 RLE pour images

    Une image digitale est une ensemble de petits points dits pixels. Un pixel est reprsent soitpar un bit (pour images en N/B), soit par plusieurs bits (pour images niveaux de gris et encouleur). Les pixels sont stocks dans un tableau en mmoire (bitmap), dhabitude ligne parligne.

    Un pixels choisi au hasard a de grandes chances davoir la mme valeur (ou une valeur trsproche) que ses voisins. On peut donc balayer limage ligne par ligne la recherche de runs.

    Si une ligne commence par 17B, 1N, 55B, 31N, .... et si on prend la convention quune lignecommence toujours avec un run de blancs (ventuellement de taille 0), seuls les 17, 1, 55, 31doivent tre crit dans le compress. La rsolution de la bitmap (c.a.d. son nombre de colonne etventuellement de lignes) doit aussi tre insr au dbut de loutput. En connaissant le nombretotal de colonnes par ligne on ne doit pas envoyer le dernier run (on lobtient par diffrence).

    La taille de limage compresse dpend de sa complexit. Mais dans le cas dune imagehorizontalement connexe (1 seul morceau) le taux de compression est :

    2 demi-primtrenombre total de pixels de la figure

    =primtre

    surface (en pixels).

    RLE marche aussi pour des images plusieurs niveaux de gris. Chaque run de pixels estcod toujours par le couple (longueur du run, valeur commune des pixels du run). La valeurs eststocke sur plusieurs bits (4 8, selon le nombre de niveaux de gris)

    Exemple 5 .

    12, 12, 12, 12, 12, 12, 12, 12, 12, 35, 76, 112, 67, 87, 87, 87, 5, 5, 5, 5, 5, 5, 1

    devient

    9 , 12, 35, 76, 112, 67, 3 , 87, 6 , 5, 1

    = compteurs.

    Solutions pour distinguer compteurs et valeurs : Si on nutilise que 128 niveaux de gris (ou moins), le bit restant de loctet peut tre utilispour signaler sil sagit dune valeur ou dun compteur.

    Si on utilise 256 niveaux de gris on peut renoncer un (P. ex le niveau 255) qui sera utiliscomm flag signalant que le prochain octet est un compteur.

    255, 9, 12, 35, 76, 112, 67, 255, 3, 87, 255, 6, 5, 1

    On associe chaque nombre (valeur ou compteur) un flag (0 si valeur, 1 si compteur). Cesflags sont associs par groupes de huit pour former un octet supplmentaire qui sera envoyavant ou aprs les 8 donnes auxquelles il fait rfrence. On ajoute donc 1/8 la taille, quiaugmente de 12, 5%.

    100000102 = 130, 9 , 12, 35, 76, 112, 67, 3 , 87, 100....., 6 , 5, 1

    si on a m pixels tous diffrents entre eux (aucune rptition de valeurs), on les fait prcderpar m. Note : pour pouvoir reprsenter des nombres ngatifs on devra renoncer unbit (de signe) pour les donnes. Si on a un octet disposition pour les donnes, il faudrautiliser seulement 7 bits.

  • 3.5. RLE POUR IMAGES 9

    9, 12,4, 35, 76, 112, 67 4 valeurs

    , 3, 87, 6, 5, ?, 1, . . .

    Si aprs le dernier 1 on a un autre 1, alors ? sera un compteur (longueur du run de1), sinon il sera une valeur ngative m o m est le nombre de valeur diffrentes de laprcdente que lon trouve partir de 1. Cas le pire :

    p1, p2, p2, p1, p2, p2, p1, p2, p2, . . .

    devient1, p1, 2, p2,1, p1, 2, p2,1, p1, 2, p2, . . .

    Expansion de 33% !

    3.5.1 Remarques

    . Puisque un run na pas longueur 0, on peut envoyer l 1 au lieu de l

    Pour images couleur, un pixel est stock sur 3 octets, le trois valeurs RGB (Rouge, Vert,Bleu) comprises entre 0 et 255. On code sparment chaque suite relative une couleur .

    (171, 85, 34)(172, 85, 35)(172, 85, 30)(173, 85, 33) . . .

    se casse en trois :

    (171, 172, 172, 173, . . .); (85, 85, 85, 85, . . .); (34, 35, 30, 33 . . .)

    Comme pour niveaux de gris, RLE et relative encoding peuvent tre utiliss.

    Il est prfrable de coder chaque ligne sparment, mme si cela fait briser des runs. P. ex. siune ligne termine par 4 pixels de valeurs 87 et la suivante commence avec 9 pixels de valeur87. IL convient de couper (4, 87), (9, 87) plutt que (13, 87). Mieux : (4, 87), eol, (9, 87).(code spcial pour eol).

    Raisons : Si chaque ligne est code individuellement, le dcodeur pourra dcoder les lignes intervalles rguliers (p. ex par pas de 5 : la 1e, la 6e, la 11e, la 16e, . . . Ensuite la 2e, la 7e,la 12e, la 17e, . . .). Ainsi limage est construite graduellement sur lcran et on pourra plusvite comprendre sa nature et dcider par exemple si terminer ou pas son tlchargement,si la garder ou pas...

    Aussi, si chaque ligne est code individuellement, il est plus facile extraire une partie delimage (p. ex de la ligne l la ligne h) ou de fusionner deux images sans devoir les dcoder.

    Dans ce cas, il faut un marquer de la fin de chaque ligne. De plus on fait prcder le fichiercompress avec un groupe de paquets de 4 octets (32 bits), un paquet de 4 octets pourchaque ligne de limage. Le k-me paquet de 4 octets contient loffset (mesur en octets)du dbut du fichier au dbut de la ligne k. Taille plus importante mais on gagne du temps.

  • 10 CHAPITRE 3. TECHNIQUES DE BASE (MTHODES INTUITIVES OU DU PASS

    3.5.2 Dsavantages de la mthode RLE pour images.

    Si limage est modifie, les longueurs des runs doivent tre recalcules entirement. RLE peut produir des fichiers plus gros (expansion). P. ex. une iages de lignes noiresverticales sur fond blanc qui serait scannerise horizontalement. Idalement, un compresseurRLE devrait scanneriser une image horizontalement, verticalement et en diagonal et choisirle meilleur.

    EXO 1.2. Page 29.

    3.5.3 Mthode de compression dimages avec perte

    On amliore le taux de compression en ignorant les runs trop courts. La perte peut (ou pas)tre acceptable (p.ex ; non adapt pour imagerie mdicale) On demande lutilisateur la longueurmaximale des runs ignorer (p. ex ; 3). Le programme fusionne tous les runs de longueur 1,2, ou3 avec leurs voisins.

    3.5.4 Une autre application : Images BMP

    Si un pixel est reprsente par p bits on dit que limages possde p bitplans. Le k-me bitplanest la suite de tous les k-mes bits.

    Pour images 1, 2, 4, 8, 16, 24 bitplans (ces dernires sont les images couleurs).Format (simplifi) : En tte du fichier : 2 octets BM, et la taille du fichier. En tte de limage : largeur, hauteur, nombre de bitplans. Palette de couleurs (3 formats possibles, pas prsents ici). Les pixels (soit en format brut, ou bien compacts par RLE).Supposons 8 bitplans (un pixel = 8 bits = 1 octet = 1 un hexadcimal 2 chiffres).

    Le fichier compress est organis par couple doctets (couples dhexadcimaux 2 chiffres). Engnral, dans chaque couple (C16, P16), le 1er octet est un compteur et le second une valeur depixel P .

    P. ex. : 0416, 0216 est le compress de 0216, 0216, 0216, 0216.Toutefois, si C = 0016, alors la smantique du couple (0016, P )dpend du caractre P aprs

    le 0016 : Si P = 0016, le dcodeur interprte le couple (0016, 0016) comme end of line (et remplitle restant de la ligne de 0).

    Si P = 0116, le dcodeur interprte le couple (0016, 0116) comme end of image (le restede limage est rempli de 0).

    Si P = 0216, le dcodeur interprte le couple (0016, 0216) comme linformation que ce quisuit est un run de 0s qui dpasse la fin de la ligne courante, et il faut donc effectuer un saut une autre position de limage plus en bas pour trouver le prochain pixel non nul. Dansce cas, le couple doctets qui suivent dit de combien de colonnes droite et de combien delignes vers le bas se trouve le prochain pixel non nul (par rapport au dernier pixel non nul).

    Si P = k > 0216, le dcodeur interprte le couple (0016, k16) comme le fait que les k octetsqui suivent sont des donnes brutes (utilis pour les suites de caractres tous diffrents).P. ex dans le cas dune image 4 8 avec 8 bitplans.

    0416, 0216, 0016, 0416, a35b124716, 0116, f516, 0216, e716, 0016, 0216, 000116,0116, 9916, 0316, c116, 0016, 0016, 0016, 0416, 08926bd716, 0016, 0116

    est le code de limage :

  • 3.6. CODAGE MOVE-TO-FRONT (MTF) 11

    02 02 02 02 a3 5b 12 47f5 e7 e7 00 00 00 00 0000 00 99 c1 c1 c1 00 0008 92 6b d7 00 00 00 00

    3.6 Codage Move-to-Front (MTF)

    Premier exemple de code adaptatif (cad, qui modifie le codage bas sur des proprits dutexte coder.

    Ide de base : Lalphabet des symboles est maintenu comme une liste ordonne. Le 1er sym-bole de la liste est cod par 0, le 2e par 1, le 3e par 2, etc. Lordre de cette liste est modifi encours de codage. chaque fois quon traite (cad, quon code pour lencodeur, quon dcodepour le dcodeur) un symbole, on le dplace en dbut de liste (son code devient donc 0) alorsque tous les autres symboles sont dcals.

    P.ex. Alphabet initial (liste) : A = {a, b, c, d, m, n, o, p}, code initiaux :

    symbole a b c d m n o pcode 0 1 2 3 4 5 6 7

    Soit le stream abcddcbamnoppnnm. Sans move to front (liste fixe et donc codage fixe)

    symbole coder sans MTF avec MTFliste (fixe) code liste (variable) code

    a a, b, c, d, m, n, o, p 0 a, b, c, d, m, n, o, p 0b a, b, c, d, m, n, o, p 1 a, b, c, d, m, n, o, p 1c a, b, c, d, m, n, o, p 2 b, a, c, d, m, n, o, p 2d a, b, c, d, m, n, o, p 3 c, b, a, d, m, n, o, p 3d a, b, c, d, m, n, o, p 3 d, c, b, a, m, n, o, p 0c a, b, c, d, m, n, o, p 2 d, c, b, a, m, n, o, p 1b a, b, c, d, m, n, o, p 1 c, d, b, a, m, n, o, p 2a a, b, c, d, m, n, o, p 0 b, d, c, a, m, n, o, p 3m a, b, c, d, m, n, o, p 4 a, b, c, d, m, n, o, p 4n a, b, c, d, m, n, o, p 5 m, a, b, c, d, n, o, p 5o a, b, c, d, m, n, o, p 6 n, m, a, b, c, d, o, p 6p a, b, c, d, m, n, o, p 7 o, n, m, a, b, c, d, p 7p a, b, c, d, m, n, o, p 7 p, o, n, m, a, b, c, d 0o a, b, c, d, m, n, o, p 6 p, o, n, m, a, b, c, d 1n a, b, c, d, m, n, o, p 5 o, p, n, m, a, b, c, d 2m a, b, c, d, m, n, o, p 4 n, o, p, m, a, b, c, d 3

    Note : la moyenne des codes sans MTF est 3.5 alors que avec MTF est 2.5 (on a utilis desplus petits nombres).

    Mais cela ne marche pas toujours. Essayer avec abcdmnopabcdmnop. La moyenne augmenteavec MTF.

    MTF marche bien dans lhypothse que si un symbole s a t rencontr, alors il sera rencontrfrquemment au moins pour un moment. Autrement dit, le stream prsente des concentrations

  • 12 CHAPITRE 3. TECHNIQUES DE BASE (MTHODES INTUITIVES OU DU PASS

    de symboles identiques dans des rgions du stream (on appelle cela proprit de concentration).Le stream du premier exemple satisfait cette proprit, le second non.

    En gnral, les performances de MTF sont lgrement pire que celles du codage de Huffmandans le pire des cas et bien meilleures dans le meilleur cas.

    3.6.1 De lintrt manipuler des valeurs plus petites

    Une fois transformes les donnes numriques en valeurs plus petites (comme le fait relativeencoding) les nombres valeurs plus petites apparatront plus frquemment dans le stream cod,on peut donc ensuite coder ces donnes plus petites avec des codes longueur variable o auxnombres plus petits sont affects des codes plus courts, tandis quaux nombres plus grands sontaffect des codes plus courts (aprs avoir limin la redondance contextuelle on sattaque laredondance alphabtique). Il y a plusieurs manires de raliser cela :

    Assigner des codes dHuffman (ce sera vu plus tard) aux entiers dans [0, n] de manire queles entiers plus petit aient des codes plus courts. P ex 0 0, 1 10, 2 110, 3 1110,4 11110, 5 111110, 6 1111110, 7 1111111

    Coder un entier i 1 par son code binaire prcd de log2 i zros.

    i Code Taille1 1 12 010 33 011 34 00100 55 00101 56 00110 57 00111 58 0001000 79 0001001 7...

    ......

    15 0001111 716 000010000 9

    3.6.2 Variantes de MTF

    Avance-de-k.

    Le symbole lu nest pas mis au dbut de lista mais avanc de k positions (le paramtre kpeut tre choisi par lutilisateur). En gnral cela rduit les performances (moyenne de codes plusleve) pour des streams qui satisfont la proprit de concentration, mais les amliore pour lesautres. Si k = n (taille de lalphabet), on retrouve MTF classic. Si k = 1 on change simplementle symbole avec son prdcesseur dans la liste.

    Attend-c-et-bouge.

    Un symbole et dplac au dbut de la liste seulement aprs lavoir rencontr c fois (nonncessairement conscutives). Il faut un compteur par symbole. Utile si le rarrangement de Aest couteux.

  • 3.7. QUANTIZATION NUMRIQUE (NUMERICAL QUANTISATION) 13

    MTF appliqu aux mots.

    Normalement un symbole est un caractre (un octet). Mais si le stream contient du texte, onpeut traiter chaque mot comme un symbole. On considre un mot toute chane de caractrescomprise entre deux espaces ou entre un espace et le symbole de fin de stream (pour simplicit,on suppose que le stream contient que des lettres minuscules, lespace et le caractre de fin destream). Puisque on peut rencontrer nimporte quel mot, lalphabet A nest pas fix au dbut. Enfait, au dbut lalphabet est vide, et on y ajoute des mots au fur et mesure quil sont rencontrset traits.

    Exemple 6 Soit le stream theboyonmyrightistherightboy.Premier mot : the. Pas encore dans A donc on lajoute A. On met le mot the (brut)

    prcd du nombre de symboles qui le prcdent dans lalphabet prsent, qui est 0. Le dcodeurcommence aussi avec un alphabet vide. Quand il recoit 0 il sait quil doit prendre le premiermot de A, mais puisque A est vide, il sait que 0 sera suivi dun mot brut quil faudra ajouter lalphabet.

    Deuxime mot : boy. Pas encore dans A donc on lajoute A qui devient {the, boy}. Onmet le mot boy (brut) prcd du nombre de symboles qui le prcdent dans lalphabet prsent,qui est 1. PUIS, on avance le mot quon vient de coder en tte de liste : A = {boy, the}. Ledcodeur reoit un 1, il devrait donc prendre le 2e mot de lalphabet, mais celui-ci na quunsymbole (the) en ce moment, donc il sait quil va recevoir un mot brut quil devra ajouter (entte !) son alphabet.

    On continue selon la table (pour lencodeur) :

    Mot Alphabet (avant MAJ) Code Alphabet (aprs MAJ)the {} 0the {the}boy {the} 1boy {boy, the}on {boy, the} 2on {on, boy, the}my {on, boy, the} 3my {my, on, boy, the}right {my, on, boy, the} 4right {right, my, on, boy, the}is {right, my, on, boy, the} 5is {is, right, my, on, boy, the}the {is, right, my, on, boy, the} 5 {the, is, right, my, on, boy}right {the, is, right, my, on, boy} 2 {right, the, is, my, on, boy}boy {right, the, is, my, on, boy} 5 {boy, right, the, is, my, on}

    3.7 Quantization Numrique (Numerical Quantisation)

  • 14 CHAPITRE 3. TECHNIQUES DE BASE (MTHODES INTUITIVES OU DU PASS

  • Chapitre 4

    Mthodes Statistiques (Codes taille variables)

    4.1 Introduction

    Principe : codes plus courts pour symboles plus frquents.

    Deux problmes rsoudre :

    1. Choisir des mots qui forment un vrai code, cad qui peuvent tre dcods sans ambiguit(P. ex. {0, 10, 01} nest pas un code, 010 a deux dcodages possibles).

    2. Choisir des codes avec taille (longueur des mots de code) moyenne la plus petite possible.

    4.2 Quelques Concepts de Thorie de lInformation

    Quest ce que linformation ? Comment peut-on la mesurer ?

    La Thorie de lInformation soccupe prcisment de rpondre la demande : "Combien din-formation est contenue dans une donne" ? Base sur lobservation que linfo contenue dans unedonne est quivalente la quantit de "surprise" contenue dans le message quelle convoie.

    Exemple 1. Le rsultat de lopration de lancer une pice de monnaie peut tre exprime parP/F ou O/N ou 0/1. Le nombre minimal de questions ( rponse binaire) poser pour devinerle rsultat est 1. Autrement dit, 1 bit dinformation suffit pour rsoudre lincertitude.

    Exemple 2. Deviner une carte parmi 64 numrotes de 1 64. Le nombre minimal de ques-tion poser ( rponse oui/non) pour deviner le rsultat en tout cas est 6 = log2 64. Autrementdit, 6 = log2 64 bits dinformation suffisent toujours pour rsoudre lincertitude.

    Exemple 3. (Autre approche de la mme question) Quelle information faut il donner pouridentifier un nombre entier N 0 ? Rponse : les chiffres qui le composent qui sont en nombrede logb N, o b est la base choisie. Linfo contenue dans le nombre N est proportionnelle aunombre de chiffres de N = logb N.

    Le logarithme est la fonction mathmatique qui quantifie linfo.

    15

  • 16 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    4.2.1 Relation entre information et probabilit.

    On a dj observ que la quantit dinformation relie un vnement est dautant plu grandeque la quantit de "surprise" apporte par lvnement est rande. Autrement dit, la quantit din-formation I est dautant plus grande que la probabilit P que lvnement se ralise est petite.

    Les Exemples 1 et 2 prcdents mettent en vidence cette relation entre information et pro-babilit dans le cas dvnements quiprobables (tels que le rsultat du lancement dune piceou de lextraction dune carte parmi 64).

    Dans lExemple 1, le rsultat du lancement dune pice porte une information de 1 bit alorsque la probabilit quelle se ralise est P = 1/2. On a 1 = log2(2) = log2(1/2).

    Dans lExemple 2, le rsultat de lextraction dune carte parmi 64 cartes numrotes, porteune information de 6 bit alors que la probabilit quelle se ralise est P = 1/64 = 1/26. On a6 = log2(2

    6) = log2(1/26).

    Dans le cas dun vnements parmi plusieurs quiprobables quiprobables on a en effet

    I = log2(P )

    Que se passe-t-il en cas dune suite dvenements ayant en principe probabilits diffrentes ?

    Exemple 4. On a vu que pour gagner toujours un jeu o il faut deviner correctement unnombre entre 1 et n il nous faut I = log2(n) bits dinformation.

    Soit un jeu qui consiste deviner deux bons numros en suite, dabord lun compris entre1 et n et ensuite un autre, compris entre 1 et m. Ce jeu est quivalent celui o il faudraitdeviner correctement un couple de bons numros, lun compris entre 1 et n et lautre comprisentre 1 etm. Dans ce jeu, il y a au total nm possibilits quiprobables (P = 1/nm). Pour devinercorrectement la combinaison gagnante il faut, comme attendu

    I = log2(P ) = log2(nm)

    bits dinformation (la mme quantit dinformation que pour deviner un nombre compris entre1 et nm, puisque chaque couple peut tre numrote avec les nombres de 1 nm et donc onrevient lexemple 3.). Or, pour les proprits du log :

    log2(nm) = log2(n) + log2(m),

    donc, la quantit dinformation ncessaire pour deviner dabord un bon numro compris entre1 et n et lautre compris entre 1 et m (la quantit dinformation contenue dans une suite dv-nements) est bien la somme des quantits dinformation des vnements pris individuellement.Cest la fonction logarithme quon doit cette proprit dadditivit.

    4.2.2 Notion dEntropie

    Considrons une source (metteur). Dans la pratique, un vrai metteur envoie donnes bi-naires (0 ou 1). Mais pour la gnralit, supposons quil envoie streams composes de n symboles{a1, a2, . . . , an}. Chaque symbole peut tre vu comme un chiffre dun systme base n, cest dire un entier plus petit ou gal n, qui peut tre identifie par log2 n bits.

  • 4.2. QUELQUES CONCEPTS DE THORIE DE LINFORMATION 17

    Supposons que lmetteur envoie s symboles par unit de temps (P. ex. 28800 bits par seconde,1 bit par seconde = 1 baud). Linformation envoye est donc H = s log2 n.

    H = s log2 n est la quantit dinfo (mesure en bits) envoye dans une unit de temps.

    Soient donnes les probabilits Pi (pour i = 1, 2..., n) dapparition des symboles ai.

    Dans le cas particulier o tous les Pi sont gaux (Pi = P pour tout i) on a 1 =n

    i=1 Pi = nPet donc n = 1/P . On a donc

    H = s log2(1/P ) = s log2 P

    .

    Par contre, dans le cas gnral, si une fraction Pi des s symboles mis dans une unit detemps est ai, alors la contribution lentropie par ces sPi symboles est sPi log2 Pi. On a

    H = s

    ni=1

    Pi log2 Pi

    info (mesure en bits) envoye dans 1 unit temps.

    On appelle Entropie E de la source, la quantit (moyenne) dinfo envoye par symbole mis.On a E = H/s (il faut 1/s temps pour envoyer un symbole), soit :

    E =

    ni=1

    Pi log2 Pi

    entropie des donnes transmises.

    Par analogie, Pi log2 Pi est lentropie de ai. Cest le nombre minimal de bits ncessairespour reprsenter le symbole.

    Cette entropie informatique a la mme grandeur dimensionnelle que lentropie introduite enthermodynamique (et qui mesure le dsordre).

    Lentropie dune source est maximale quand les probabilits sont toutes gales (cas de fichiertotalement random, o le dsordre est maximal).

    Par exemple, si une source met le symbole a1 avec une probabilit p et le symbole a2 avecune probabilit 1 p, lentropie de cette source est :

    E = p log1

    p (1 p) log

    1

    1 p

    Comme fonction de p, E tend vers 0 si p tend vers 0 ou 1, elle a son seul maximum pourp = 1/2 (symboles quiprobables) o elle vaut

    1

    2log

    1

    2

    1

    2log

    1

    2= log

    1

    2= 1

    La figure suivante montre le graphe de la fonction E(p) dans ce cas.

  • 18 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    0 0,5 1

    1

    E

    p

    Le stream mis dune source dentropie maximale (quand les symboles sont tous quipro-bables) est compltement random et donc na aucune redondance. Sinon, la redondance R estdfinie comme la diffrence entre lentropie maximale de la source et la vraie entropie :

    R =

    (

    ni=1

    1

    nlog

    1

    n

    )

    (n

    i=1

    Pi logPi

    )= logn

    (n

    i=1

    Pi logPi

    )

    4.2.3 Codes taille variable

    Soient quatre symboles a1, a2, a3, a4 qui apparaissent avec la mme frquence 0.25.Entropie est : 4 (0.25 log 0.25) = 4 (0.25 (2)) = 2. Le plus petit nombre de bits ncessaires(en moyenne) pour reprsenter les symboles est 2. (P. ex. par le code taille fixe : 00, 01, 10, 11).La redondance du stream est 0, on ne peut pas compresser davantage.

    Soit maintenant p1 = 0.49, p2 = p3 = 0.25, p4 = 0.01. Entropie 1.57. Le plus petit nombre debits ncessaires (en moyenne) pour reprsenter les symboles est 1.57.

    Avec le code prcdent 00, 01, 10, 11 on a une redondance de 0.43, donc un code de longueurvariable peut faire peut-tre mieux.

    Par exemple : a1 = 1, a2 = 01, a3 = 010, a4 = 001.Longueur moyenne : 1 0.49 + 2 0.25 + 3 0.25+ 3 0.01 = 1.77 (ceci est vrai pour de longsmessages, alors que pour petits messages on peut sloigner beaucoup de la moyenne).

    Mais ce nest pas un code ! : 01001 = 01|001 = 010|01 = a3a2 = a2a4

    Mieux, le suivant : a1 = 1, a2 = 01, a3 = 010, a4 = 001.Cet ensemble est bien un code car il a la proprit prfixe (aucun mot nest prfixe dun autre).Un ensemble avec la proprit prfixe est toujours un code.Un code prfixe est un code longueur variable avec la proprit prfixe.

  • 4.3. MTHODE DE SHANNON-FANO 19

    Il nous faut donc des algorithmes pour trouver des codes de taille moyenne minimale enfonction des frquences (probabilits) des symboles de lalphabet.

    4.3 Mthode de Shannon-Fano

    On applique lalgorithme suivant : Ordonner les symboles par frquences dcroissantes ; Partager les symboles en deux sous-ensembles de sorte que les deux sommes des frquencesdes symboles dans les deux sous-ensembles soient le plus proches possible ;

    Ajouter un 0 aux mots de code des symboles du premier ensemble et 1 aux mots de codedes symboles du second ensemble ;

    Continuer rcursivement partages les sous-ensembles jusqu ce quils contiennent un seulsymbole.

    Voici un exemple (le symbole _ indique o lon fait les partages).

    Symbole Construction Code0.25 1 _ 1 110.20 _ 1 0 100.15 0 1 _ 1 0110.15 0 _ 1 0 0100.10 0 0 _ 1 0010.10 0 0 0 _ 1 00010.05 0 0 0 0 0000

    Note. La longueur moyenne de ce code (pondre par les probabilits) est 2.7 alors que len-tropie est 2.67, on est donc trs proche de la longueur minimale.

    Exercice. Excuter le premier partage entre le troisime et le quatrime symbole et montrerque le code obtenu est moins bon.

    Les partages "parfaits" (ce qui est possible si les probabilits sont des puissances ngativesde 2) donnent les meilleurs codes. Par exemple :

    Symbole Construction Code0.25 1 _ 1 110.25 _ 1 0 100.125 0 1 _ 1 0110.125 0 _ 1 0 0100.125 0 0 _ 1 0010.125 0 0 0 000

    Longueur moyenne 2.5, entropie 2.5. Code optimal.

    4.4 Mthode de Huffman

    Cest la base de beaucoup de logiciels de compressions sur les PC, soit utilis comme seulemthode de compression, soit comme une tape dun processus de compression en cascade.

  • 20 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    Gnralement, donne des meilleurs rsultats que la mthode de Shannon-Fano et commecelui-ci donne les meilleurs rsultats quand les probabilits sont des puissances (ngatives) de 2.Cependant, on peut dmontrer que la mthode de Huffman produit toujours le code optimal (cequi nest pas vrai pour Shannon-Fano)

    Diffrence avec Shannon-Fano, les mots de code sont produits de droite gauche.

    Voici lalgo (qui construit un arbre)

    Ordonner les symboles de A = {a1, . . . , an} par frquences (probabilits) dcroissantes ; E A ; Tant que il y a plus dun symbole dans E faire Choisir deux symboles aI , aJ E (o I et J sont deux sous-ensembles de {1, . . . , n})ayant les deux plus petites probabilits ;

    Construire larbre de racine aIJ ayant comme fils aI et aJ ; E E {aI , aJ} {aIJ} ; Proba(aIJ ) Proba(aI) + Proba(aJ) ;

    Fin Tant queOn obtient un arbre binaire dont les feuilles sont tiquetes par les symboles de lalphabet.

    Le mot de code de chaque symbole est obtenu en parcourant le chemin de la racine la feuillecorrespondante au symbole et en ajoutant un 0 chaque fois quon se dplace vers un fils gaucheet un 1 chaque fois quon se dplace vers un fils droit.

    Exemple

    1

    0.4

    a12345

    a345

    a2345

    a45

    a1

    a2

    a3

    a4

    a5

    0.2

    0.4

    0.6

    0.1

    0.1

    0.2

    0.2

    On obtient

    Symbole Codea1 0a2 10a3 110a4 1110a5 1111

  • 4.4. MTHODE DE HUFFMAN 21

    Toutefois, lalgorithme pourrait aussi produire un autre arbre

    1

    a145

    a12345

    a45

    a1

    a2

    a3

    a4

    a5

    0.2

    0.1

    0.1

    0.2

    0.2

    0.4

    0.4 a23

    0.6

    Correspondant au code

    Symbole Codea1 10a2 00a3 01a4 110a5 111

    Calculons les deux longueurs moyennes. Pour le premier code :

    M1 = 0.4 1 + 0.2 2 + 0.2 3 + 0.1 4 + 0.1 4 = 2.2 bits/symbole

    Pour le second :

    M2 = 0.4 2 + 0.2 2 + 0.2 3 + 0.1 3 + 0.1 3 = 2.2 bits/symbole

    soit la mme valeur.Quand on choisit arbitrairement les deux symboles de probabilit minimale quil faut combi-

    ner, on peut obtenir des arbres diffrents mais la longueur moyenne rsultera la mme.

    Lequel des deux codes est prfrable ? Celui avec la plus petite variance (ou dviation).

    Dfinition 1 Soit une suite de valeurs x1, . . . , xn de moyenne M =1n

    ni=1 xi, la variance de

    la suite est :

    V :=1

    n

    ni=1

    (xi M)2

    Pour une suite pondre par les probabilits p1, . . . , pn, o la moyenne pondre est dfinie commeM =

    ni=1 pixi, la variance sest dfinit comme suit :

    V :=

    ni=1

    pi(xi M)2

  • 22 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    Calculons les deux variances. Pour le premier code :

    V1 := 0.4 (1 2.2)2 + 0.2 (2 2.2)2 + 0.2 (3 2.2)2 + 2 0.1 (4 2.2)2 = 1.36

    pour le deuxime :

    V2 := 0.4 (2 2.2)2 + 0.2 (2 2.2)2 + 0.2 (2 2.2)2 + 2 0.1 (3 2.2)2 = 0.16

    Rgle pour obtenir celui avec la plus petite variance : sil existent plus que deux symbolesayant probabilit minimale, choisir les deux tels que la diffrence de hauteur est minimale. Cecigarantit que larbre obtenu est plus quilibr et revient choisir les deux symboles les plus anciens(en ordre de cration) parmi ceux ayant probabilit minimale. Ceci peut tre facilement gr enimplmentant lensemble E laide dun tas-min, o les symboles sont rangs par rapport leurfrquence.

    Lintrt davoir des codes de variance minimale est que lon peut utiliser des tampons detaille infrieure et que les temps de dcodage de chaque symbole sont plus proches (importantpour applications on-line).

    Note. Si les symboles ont la mme proba, alors la mthode de Huffman ne compresse pasles donnes (le texte est random et donc ne peut pas tre compress). Il y a bien sr des casspciaux o, tout en gardant la mme probas, les symboles sont disposs avec un certaine rgu-larit, P. ex. a1 . . . a1a2 . . . a2a3 . . . a3 . . ., qui peut tre compress par RLE mais pas par Huffman.

    Note. Huffman ne peut pas tre appliqu alphabets de taille 2 (p.ex images en N/B). Onpourrait combiner paquets de bits (4, 8, ...) et les considrer un nouvel alphabet (de taille 16,256, ...), mais on pourrait perdre certaines rgularits, notamment celles dues au fait quun pixelest probablement de la mme couleur que ses voisins. P. ex. 00011100|00000110 a un run de 0 delongueur sept, qui serait cass si on regroupe par paquets de 8 bits.

    Dcodage

    Lencodeur construit donc larbre sur la base des frquences (entires) ou des probas (relles)et ensuite il commence coder en utilisant les mots de code ainsi obtenus.

    Le dcodeur doit connatre les mots de code ou avoir le mme arbre qua construit lencodeurpour pouvoir effectuer le dcodage. Ou, au moins, il doit disposer de la mme information qui aservi lencodeur pour le construire.

    En tout cas, lencodeur doit faire prcder le stream compress par un "en tte" contenant : soit des couples (symboles, codes) dans un format qui devra tre dtermin par protocole ; soit larbre, dans un format dtermin par protocole ; soit les frquences (ou les probas, qui peuvent tre rendues entires par normalisation),par lesquelles on peut construire larbre (certaines rgles devraient tre alors dcides parprotocole pour assurer que encodeur et dcodeur construisent le mme arbre, p. ex. lequelde deux fils prend 0 et lequel le 1).

    Si le dcodeur dispose de larbre, lalgorithme de dcodage dvient extrmement simple. Encommenant la racine de larbre, pour chaque bit lu du stream cod, il parcourra les branchesde larbre pour dcoder un symbole chaque fois quune feuille est atteinte, avant de revenir a racine. Il sagit en fait dun simple transducteur ptales.

  • 4.4. MTHODE DE HUFFMAN 23

    Proprit pour calculer la longueur moyenne dun code dHuffman

    1

    0.45

    a12345

    a345

    a2345

    a45

    a1

    a2

    a3

    a4

    a5

    0.55

    0.25

    0.15

    0.03

    0.02

    0.2

    0.05

    On calcule la longueur moyenne :

    M = 0.55 1 + 0.25 2 + 0.15 3 + 0.03 4 + 0.02 4 = 1.7

    Mais aussi1.7 = 1 + 0.45 + 0.2 + 0.05

    Ceci est toujours vrai. La longueur moyenne dun code peut aussi tre calcule en additionnantles probabilits de tous les nuds internes de larbre de Huffman.

    4.4.1 Codes dHuffman canoniques

    Soit lexemple de la figure 4.1.

    Lalgo construit le code :a 000b 001c 100d 101e 01f 11

    Toutefois, il existe dautres codes ayant la mme longueur moyenne (et donc aussi codes dHuff-man). Notamment, tous les codes prfixes qui assignent des mots de code de longueur 3 a, b, c, det des mots de code de longueur 2 e et f sont aussi des codes dHuffman (et donc optimaux).

    Pour le cas de cet exemple, nous voulons calculer le nombre de tels codes. On note que lesmots de code peuvent tre partags en quatre classes, selon le prfixe de longueur deux par lequelils commencent. Le quatre classes sont :

    {00x | x {0, 1}}, {10y | y {0, 1}}, {01}, {11}

    Or, tous les codes quon obtient en permutant arbitrairement ces quatre prfixes seront descodes de Huffman aussi. Il y a 4! = 24 de telles permutations. De plus, pour chaque permutation

  • 24 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    1

    a

    c

    d

    e

    b

    f

    0.53

    0.11

    0.12

    0.13

    0.14

    0.24

    0.26

    0.23

    0.27

    0.47

    Fig. 4.1 Un exemple pour la construction dun code dHuffman canonique

    possible, on peut construire quatre codes de Huffman diffrent en choisissant les valeur de x ety. Il y a donc au total 4 24 = 96 de tels codes dHuffman.

    Considrons en particulier le code que lon obtient par la permutation

    00 00; 10 01; 01 10; 11 10;

    et en choisissant x = 0 pour a et y = 0 pour c.

    a 000b 001c 010d 011e 10f 11

    Ce code est intressant puisque il assigne aux symboles a, b, c, d quatre mots (sur trois bits)reprsentant en binaire les entiers conscutifs 0, 1, 2, 3 alors quil assigne aux symboles e, f deuxmots (sur deux bits) reprsentant les entiers conscutifs 2, 3. Ce code est videmment aussi uncode de Huffman, et pourtant lalgorithme de Huffman donn ne pourra jamais le produire. Eneffet, on constate que si un code a t produit par lalgo, alors e et f seront toujours combins endernier (ils se trouveront lun dans le sous arbre droit de la racine et lautre dans le sous arbregauche) et donc leurs mots de code ne pourront jamais commencer par le mme caractre (ici, 1).

    On va montrer pourtant quun tel code de Huffman choisissant pour toute longueur l des motsde code (sur lbits) reprsentant des entiers conscutifs est toujours possible et facile construire.Un tel code est dit code de Huffman canonique. Comme on va le voir, lintrt dutiliser des

  • 4.4. MTHODE DE HUFFMAN 25

    codes canoniques est quils peuvent tre construits trs facilement par le dcodeur, sans besoinque celui-ci connaisse ni les probabilits, ni larbre. Il suffit quil connaisse pour toute longueurl combien de symboles ont t cods par un mot de longueur l. Voyons cela avec un exemple.

    Supposons que lencodeur execute lalgorighme pour calculer un code dHuffman et supposonsquil dcouvre ainsi que lalgo affecte- 6 symboles, des mots de longueurs 7- 3 symboles, des mots de longueurs 6- 4 symboles, des mots de longueurs 5- 4 symboles, des mots de longueurs 3

    Il veut alors changer le codage (pour un autre code dHuffman et notamment le code dHuff-man canonique) de sorte que les nl symboles cods par des mots de longueurs l soient cods pardes mots (toujours sur l bits) reprsentant nl entiers conscutifs. Autrement dit, pour un entierpremier(l) opportunment choisi, ces nl symboles seront cods par les entiers

    premier(l), premier(l) + 1, premier(l) + 2, . . . , premier(l) + nl 1.

    Il sagit donc simplement de dterminer pour tout l, lentier premier(l) de manire obtenirun code prfixe.

    On considre les longueurs en ordre dcroissant (7, 6, 5, (4), 3). Pour la longueur maximalelmax (ici lmax = 7), on choisit toujours premier(lmax) = 0. Le code canonique alors assigne auxsix symboles le moins frquents les mots sur 7 bits :

    000000000000010000010000001100001000000101

    Il faut maintenant dterminer premier(6), de manire ce que les 3 mots de longueur 6 repr-sentant premier(6), premier(6) + 1 et premier(6) + 2 ne soient pas prfixes des mots de codedj prsents.

    Pour cela, il suffit de choisir pour premier(6) un entier m tel que 2m (c-a-d, m shift dunbit vers la gauche avec lajout dun 0) soit plus grand que 0000101 = 101 = 5 = 0 + 6 1 =premier(7) + n7 1. On peut simplement choisir premier(6) =

    premier(7)+n72 = 6/2 = 3. Le

    code canonique alors assigne aux trois symboles suivants les mots sur 6 bits :

    000011000100000101

    Noter quaucun de ces mots nest prfixe des mots de longueur 7 dj dans le code.De manire analogue on dtermine

    premier(5) =

    premier(6) + n6

    2

    =

    3 + 3

    2

    = 6/2 = 3.

  • 26 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    Le code canonique alors assigne aux quatre symboles suivants les mots sur 5 bits :

    00011001000010100110

    Noter quaucun de ces mots nest prfixe des mots de longueur 6 et 7 dj dans le code.

    Mme si aucun symbole nest cod par des mots de longueur 4, on doit calculer premier(4)car sa valeur est ncessaire pour calculer premier(3). On a

    premier(4) =

    premier(5) + n5

    2

    =

    3 + 4

    2

    = 7/2 = 4

    et

    premier(3) =

    premier(4) + n4

    2

    =

    4 + 0

    2

    = 4/2 = 2.

    Le code canonique alors assigne aux quatre derniers symboles suivants les mots sur 3 bits :

    010011100101

    Lencodeur va alors coder les symboles (tris par frquence croissante) par les mots

    0000000 000110000001 001000000010 001010000011 001100000100 0100000101 011000011 100000100 101000101

    Le dcodeur utilisera le mme code. Toutefois pour que le dcodeur puisse le reconstruire ilsuffit quil connaissent uniquement :- les symboles de lalphabet tris par ordre de frquences croissantes (dans un format accordpar protocle, p. ex ; en ASCII)- pour toute longueur l, le nombre de symboles cods par des mots longueur l.

    Ces informations lui suffisent reconstruire le code canonique par lalgorithme :

    Premier[lmax]=0 ;Pour i de lmax 1 1 faire

    Premier[i] =Premier[i+1]+Nombre[i+1]

    2

    fPour

  • 4.4. MTHODE DE HUFFMAN 27

    Pour lexemple prcdent on a comme donne le tableau Nombre = (0, 0, 4, 0, 5, 3, 6) et lalgo-rithme calcule Premier = (2, 3, 2, 4, 3, 3, 0).

    Le code canonique a aussi lavantage de faciliter le dcodage. Le dcodeur lit le stream codbit par bit. Pour chaque paquet de l bits lus, il verifie si le mot v de l bit qui vient dtre lureprsente un entier plus petit que Premier[l]. Si cest le cas, v nest pas un mot de code maisun prfixe dun mot du code. Il faut donc continuer lire bit par bit jusqu ce que v (dont lalongueur l augmente) devienne plus grand ou gal Premier[l], on pourra alors le dcoder.P. ex si le dcodeur reoit le stream 0001001 . . ., chaque bit lu on aura :

    v = 0 < Premier[1] = 2v = 00 < Premier[2] = 3v = 000 < Premier[3] = 2v = 0001 = 1 < Premier[4] = 4v = 00010 = 2 < Premier[5] = 3v = 000100 = 4 Premier[6] = 3

    Il saura alors que 000100 reprsente le 2e symbole parmi ceux qui sont cods sur des mots delongueur 6 et il pourra ainsi le dcoder avant de poser nouveau v = et lire le prochain bit.

    4.4.2 Codes dHuffman adaptatifs

    Souvent, on ne connat pas les frquences (probabilits) de chaque symbole avant davoirentirement lu le stream.

    Pour viter deffectuer un codage deux passes (peu efficace), la mthode dve-loppe un code dHuffman bas sur les statistiques des symbole dj lus.

    Il faut faire cela en minimisant les calculs pour mettre jour larbre lorsquun nouveau sym-bole est lu et donc les frquences changent.

    Si n est la taille de lalphabet, on reprsente larbre par un tableau de taille 2n 1, puisqueun arbre binaire complet avec n feuilles (les symboles) possde exactement 2n 1 nuds entout. Chaque composante du tableau correspond donc un nud de larbre et est constituedune structure ayant des champs contenant la frquence du symbole (le poids du noeud), lesymbole lui-mme (si le nud est une feuille), ainsi que des champs permettant de faire les liensde parent (par exemple lindex des fils gauche et droite). Chaque nud a donc un poids (lafrquence du symbole sil sagit dun feuille, la somme des frquences de ses deux fils si le nudest interne) et un numro (son index dans le tableau).

    On affectera lindex 2n + 1 (soit, la dernire composante du tableau) la racine de larbre.Ensuite, chaque fois que un nouveau noeud est ajout larbre, on lui affectera le plus grandindex pas encore attribu un nud. Autrement dit, on remplira le tableau de la droite versla gauche.

    De plus, les nuds sont ordonns dans le tableau de sorte que leurs poids sont (faiblement)croissants et de sorte que le numro dun nud interne est toujours suprieur celui de ses deuxfils. Ceci assure que quand on lit les poids des nuds du bas vers le haut et , dans chaque niveaude larbre de la gauche vers la droite, on obtient une suite faiblement croissante.

    On voudra maintenir cette proprit comme un invariant. Par la suite on appellera bloc unesous-suite de nuds (un intervalle du tableau) constitue de tous les nuds ayant le mme poids.

  • 28 CHAPITRE 4. MTHODES STATISTIQUES (CODES TAILLE VARIABLES)

    La procdure de mise jour de larbre

    Au dbut, lencodeur et le dcodeur ne connaissent rien sur les statistiques du stream. Lesdeux commencent alors avec un arbre vide. En fait cet arbre contient un seul nud racine : PEC(pour Pas Encore Cod) (de numro 2n 1 et de poids 0) correspondant tous les symbolesde lalphabet qui nont pas encore t cods. Pendant le traitement du stream, lencodeur et ledcodeur maintiennent des arbres identiques (synchrones), mthode symtrique.

    Quand un caractre c est rencontr pour la premire fois, lencodeur lenvoie sous forme noncompresse (brute). Bien entendu, il faut que le dcodeur puisse reconnaitre les suites de bits quicorrespondent des caractres non compresss, il faut donc un meta-caractre pour annoncerlarrive dune donne brute. On comprend que le code de ce meta-caractre ne peut pas trefixe dans le temps, parce que, quel que soit le code quon choisit pour lui, il se peut que plus tardce code doive tre attribu un autre symbole. On utilise le nud PEC (et donc son code, quiest variable) avec prcisment cette fonction.

    Ensuite, lencodeur ET le dcodeur ajoutent larbre un nouveau nud (de poids 1) corres-pondant c. Ceci est fait en transformant le nud PEC (qui tait une feuille) en un nud interne(de poids 1) ayant deux fils : le nouveau nud PEC (de poids toujours 0 et qui reste une feuille)et le nud correspondant c de poids 1. La position de PEC dans larbre donc change, ainsique son code. Ce sera son code (courant) qui sera envoy comme caractre dchappement avantdenvoyer un caractre sous forme brute. Puisque le dcodeur maintient un arbre synchrone, ilreconnaitra le code du caractre dchappement PEC et donc le flag.

    Quand un caractre c est dj dans larbre, lencodeur envoie son code que le dcodeur pourradcoder (les deux ont toujours le mme arbre). Ensuite les deux procdent la (mme) mise jourde larbre. Pour cela, il faudra incrmenter dune unit le poids du nud de larbre correspondant c et rtablir linvariant sil a t cass. En effet, linvariant est cass si le nud contenant cnest pas le dernier de son bloc. Pour rtablir linvariant il suffit dchanger le nud c avec ledernier nud de son bloc (il y a une exception, quand le dernier nud de son bloc est prcismentson pre ; dans ce cas aucun change nest ncessaire). La procdure de mise jour ne peut passarrter l, puisque il faudra incrmenter dune unit aussi le poids du nud pre de c et rpterrcursivement la procdure de mise jour son niveau pour rtablir linvariant.

  • Chapitre 5

    Mthodes Dictionnaire

    Les mthodes statistiques utilisent un modle statistique des donnes, les rsultat de com-pression dpendent de la qualit du modle.

    Les mthodes dictionnaire slectionnent chanes de caractres coder comme des tokenutilisant un dictionnaire.

    Le dictionnaire peut tre statique (fixe, permanent) bien que des ajouts soient parfois permis, ou dynamique (adaptatif), ajouts et suppressions du dictionnaire sont alors permis en fonctionde ce quon trouve dans le texte.

    En principe, une mthode dictionnaire peut compresser une chane de n symboles en nEbits o E est lentropie de la chane (si le fichier est suffisamment large). Elles fournissent doncdes codages optimaux du point de vue du taux de compression.

    Elles sont appliques texte mais aussi image et audio.

    Si une chane est dj dans le dictionnaire (on dit dans ce cas quon a un matching), un tokencorrespondant son index est envoy. Sinon, on envoie la chane brute. Le stream compresscontient donc indices et mots bruts, il faut donc pouvoir les distinguer.

    Une possibilit est de rserver un bit supplmentaire (flag) pour chaque item. Gnralement19 bit sont suffisants pour reprsenter indices dans le dictionnaire (219 = 524.288 mots dans ledictionnaire ). Avec un 20e bit on indique si le mot a t trouv (0) ou non trouv (1) dans ledictionnaire . Si le mot est brut (1), il faut faire suivre ce 1 par la longueur du mot.

    Donc, si un mot est dans le dictionnaire , son codage tient sur 20 bits. Sil ne lest pas, unoctet pour le flag et la longueur (sut 7 bits), plus un octet par lettre. Si les mots ont une longueurmoyenne de 5 lettres, cela fait 6 octets, soit 48 bits.

    Si on peut compresser 48 bits en 20 bits, cest trs bien, condition que cela arrive souvent(quun mot est dans le dictionnaire ). Si la probabilit de trouver un mot dans le dico est P ,alors aprs lecture/codage de N mots on a un stream compress de taille :

    N [20P + 48(1 P )] = N [48 28P ]bits

    alors que la taille du stream non compress (dans lhypothse que les mots ont une longueurmoyenne de 5 lettres) est 5N octets = 40N bits.

    29

  • 30 CHAPITRE 5. MTHODES DICTIONNAIRE

    On a donc compression si N [48 28P ] < 40N , ce qui donne P > 0.29.

    Ds quon a des matchings avec une probabilit de 29%, on a compression.

    Pour un texte en langue naturelle, un dictionnaire statique de 500000 fait trs bien laffaire(puisque tous les mots y seront).

    Pour fichiers binaires, quand ils sont lus en ASCII cela peut donner un nombre trs grand demots (sans sens). Dans ce cas, cest plus difficile de trouver un mot dans le dictionnaire , donc onrisque davoir expansion plutt que compression, un dictionnaire statique ne marche pas bien.

    Cependant, un dictionnaire statique marche bien dans des cas particuliers. P. ex. quand onutilise souvent des mots techniques, qui font partie dun petit dictionnaire ad hoc. Dans ce casun petit dictionnaire statique donne de trs bonnes performances.

    En gnral, on a de meilleurs rsultats avec des mthodes adaptatives. Le dictionnaire estinitialement vide (ou avec quelques mots par dfaut). Au fur et mesure que lon rencontre desnouveaux mots, on les ajoute. Si le dictionnaire devient trop grand, on peut effacer certains mots(p. ex ceux que lon ne rencontre plus depuis le plus longtemps). Cela permet de rduire le tempsde recherche.

    Comme pour toutes le mthodes adaptatives, quand on trouve un mot dans le dictionnaire,on envoie son token. Sinon, on envoie le mot non compress et et ensuite on lajoute au diction-naire. De plus, avant de passer au mot suivant, on regarde si un vieux mot peut tre effac dudictionnaire .

    Avantages des mthodes dictionnaire : le calculs effectues par les algorithmes sont des algos de string search or string matchinget non des oprations numriques (qui peuvent causer des problmes darrondi).

    les dcodeur est trs simple (mthodes asymtriques, alors que pour les mthodes statis-tiques, le plus souvent cest symtrique). Le dcodeur qui reoit un token (index), doitseulement chercher le mot correspondant dans le dictionnaire .

    5.1 LZ77 (fentre glissante)

    5.1.1 Lencodage

    Lencodeur maintient une fentre (tampon) qui est virtuellement glisse sur le texte coderen la dplaant vers la droite. Le tampon est compos de deux parties :

    la partie gauche est le tampon de recherche (search buffer, ou s.b.), cest le dictionnaireproprement dit, o se trouvent les symboles rcemment cods. Gnralement il a une taillede lordre de milliers doctets.

    la partie droite est le tampon danticipation (look ahead buffer ou l.a.b.) qui contient dutexte encore coder. Gnralement il a une taille de lordre de quelques dizaines doctets.

    Exemple 7 Soit le texte :

    Supposons que easesseasickseals doit encore tre compress. Le premier symbole dul.a.b. (premier symbole coder) est un e. On regarde le s.b. de gauche vers la droite larecherche dun e. On en trouve un distance (offset) 8 de la fin du tampon. Ensuite on regarde

  • 5.1. LZ77 (FENTRE GLISSANTE) 31

    search buffer lookahead buffer

    ... sir sid eastman easily teases sea sick seals ...

    combien de symboles suivant ce e concident avec des symboles suivant le e coder. Il y en adeux : le a et le s, donc au total on un matching de longueur 3. On continue de balayer les.b. vers la gauche la recherche du matching le plus long. En cas dgalit, on retient le plus gauche. Il y a celui offset 16 ayant aussi longueur 3. Cest celui qui sera retenu. Le token decodage est alors le triplet form par loffset o, la longueur l du matching et le premier caractresuivant les l caractres du matching. Dans ce cas le token envoy sera (16, 3, e).

    Le token est crit dans loutput et la fentre est glisse vers la droite de 4 positions.

    Si aucun matching nest trouv dans le s.b., alors le token (0, 0, symbole) est envoy. Cestokens, qui neffectuent pas une bonne compression, sont communs au dbut :

    s (0, 0, s)i (0, 0, i)r (0, 0, r) (0, 0, )sid (4, 2, d)

    Quelle est la taille en bits dun token ? Si S est la taille du s.b., L la taille du l.a.b. et A lataille de lalphabet, un token a une taille log2 S+ log2(L 1)+ log2 A. Si S est de lordrede quelques milliers de bits, log2 S = 10 - 12 bits. Si L est de lordre de quelques dizaine debits, log2(L 1) = 4 - 6 bits. Les symboles de lalphabet sont typiquement codes sur 8 bits.Pour un total de 24 bits environ, y compris pour les tokens de type (0, 0, symbole), ce qui esttrois fois plus long que le symbole brut.

    Attention au cas :

    Mr alf fait pousser des alfalfa ...

    Le plus long matching est celui a offset 3 qui est de longueur 4 (parce quil comprend le a,mme si celui-ce est le permier caractre du l.a.b.) et non celui de offset 13 et longueur 3, doncle token (3, 4, ) sera envoy et non (13, 3, a).

    Penser aussi au cas :

    ... Joe cria aaaaaaaaahhh ...

    5.1.2 Le dcodage

    Le dcodeur est plus simple (LZ77 est asymtrique, donc adapt si la compression seffectueune seule fois et la dcompression plusieurs fois). Il doit maintenir une tampon de taille gale

  • 32 CHAPITRE 5. MTHODES DICTIONNAIRE

    la fentre de lencodeur. Quand il reoit un token, il cherche dans son tampon le string corres-pondant au matching et ajoute le symbole en troisime position du token. Ensuite il effectue leshift ncessaire (de longueur du matching plus 1).

    5.1.3 Petites amliorations possibles

    La mthode LZ77 attribue les codes (tokens) en fonction de ce qui a t lu rcemment (cequi se trouve toujours dans le s.b.) donc les textes qui seront mieux compresss sont ceux o deschaines similaires sont distribues de manire proche les unes des autres.

    Quelques amliorations des performances de compression peuvent tre obtenues par les tech-niques suivantes

    Utiliser des champs de taille variable pour loffset et les longueurs Augmenter la taille du s.b. Un s.b. plus grand permettera de trouver des matching plusfrquemment et plus longs, mais le prix payer est que les algos de recherche dun motdans le dictionnaire (recherche de motif) sera plus longue et labore.

    Changer la technique pour faire coulisser la fentre. En gnral un shift coteO(taille(fentre)).Mais si on omplmente la fentre comme une file circulaire, alors chaque nouvel input ilsuffira dcraser la partie la plus ancienne du s.b. et dplacer les deux pointeurs de dbutet de fin de file.

    Organiser le dictionnaire (le s.b.) sous forme de ABR, mieux si quilibr, dans lequel onstocke toutes les sous-chanes du s.b. le longueur | l.a.b. | avec loffset qui leur est associ.On envoie donc un token 2 champs (offset, longueur). Il faut mettre jour larbre aprschaque shift (liminer des nuds et en ajouter des nouveaux).

    Dfauts de LZ77

    Assume que les motifs gaux ou similaires sont proches. si un chane apparat souvent maisplus espace que | l.a.b. | on a mauvaise compression.

    Taille limite des buffers. Elle doit tre limite parce que les algorithmes de string mat-ching doivent vrifier caractre par caractre. L.a.b. plus grand donne meilleur compressionmais encodeur ralenti (doit chercher des concordances plus longues). de mme pour le s.b.Augmenter la taille des tampons produit aussi des tokens plus gros et donc rduit la com-pression.

    5.1.4 LZ78

    Pas de s.b., ni de l.a.b. ni de fentre. Mais un dictionnaire de chanes dj rencontres. Lataille du dictionnaire est limite seulement par la mmoire disponible.

    Lencodeur met des tokens deux champs : un pointeur une entre du dictionnaire et lecode dun symbole (la longueur nest plus ncessaire).

    Chaque token correspond une chane et est ajout au dictionnaire juste aprs que le tokena t mis. On nefface jamais rien du dictionnaire.

    Le dictionnaire est initialis avec la chane vide en position 0.Quand on lit un symbole x : si on le trouve pas, on met (0, x) et on ajoute la chaine x la premire place disponibledu dictionnaire.

    si on le trouve (par exemple en position 37), on lit le caractre suivant y

  • 5.1. LZ77 (FENTRE GLISSANTE) 33

    si xy nest pas dans le dictionnaire, on met le token (37, y) si xy est dans le dictionnaire, on lit le caractre suivant z et on cherche dans le dictionnairexyz ...

    En gnral, on lit des caractres jusqu ce que la chine lue w nest pas dans le dictionnaire,alors que w (avec w = wy pour un symbole y) est dans le dictionnaire. Alors on met le token(index(w), y).

    La taille du dictionnaire peut tre limit (on verra quoi faire sil se remplit), puisque undictionnaire plus grand signifie plus de chance dy trouver la chane, mais pointeurs plus longset recherche dans le dictionnaire plus lente.

    Structure de donnes pour le dictionnaire : un arbre lexicographique. Pour ajouter la chanewy on ajoute un nud (nouvel.index, y) comme fils du nud correspondant w.

    Une recherche dans le dictionnaire parcourt larbre de la racine vers une feuille (si trouv) ouun nud interne (si non trouv).

    Larbre doit tre dynamique c--d implement de manire ajouter un nombre arbitraire defil chaque nud.

    Quand larbre est plein, plusieurs solutions : Le fixer et continuer lutiliser comme un dictionnaire statique pour coder le reste. Leffacer entirement et recommencer nouveau. Conseill si on change de section dansle texte, susceptibles davoir distributions de motifs trs diffrentes.

    Effacer des nuds (entres du dictionnaire), idalement celles moins utilises rcemment(problme : pas dalgo efficace pour dcider cela).

    LZ78 est symtrique (le dcodeur est plus complexe que pour LZ77)

    5.1.5 LZW

    Peut-tre la variante la plus populaire de LZ78. On limine aussi le deuxime champ du token.Un token est simplement un pointeur une entre du au dictionnaire.

    Supposons pour linstant pour simplicit que le dictionnaire soit un tableau et pas un arbre .On initialise les premiers items du dictionnaire avec les symboles de lalphabet (pour ASCII,

    les 256 premires position).Donc un symbole est toujours prsent dans le dictionnaire.

    Pour le codage, on lit les symboles et on stocke la chane lue dans une chane I. Quand onrencontre un symbole x tel que I est dans le dictionnaire mais Ix ne lest pas, on met lindexde I, on ajoute Ix au dictionnaire et on change lancien I en x avant de continuer lire.

    Structure du dictionnaire de LZW et codage

    La meilleurs structure est un arbre lexicographique, o pour tout mot w et tout caractre x,le mot wx se trouve dans un nud fils du nud qui contient w.

    Cela permet de rechercher facilement un mot dans le dictionnaire (on parcourt une branche partir de la racine) et lorsque w est dans le dictionnaire mais wx ny est pas on sait o linsrer

  • 34 CHAPITRE 5. MTHODES DICTIONNAIRE

    (comme fils de w tiquet par x).

    Il faut quand mme utiliser une structure dynamique qui permet un nud davoir unnombre quelconque de fils sans leur rserver de place lavance.

    On implmente cet arbre comme un tableau de nuds.

    Chaque nud contient 2 champs : un pointeur vers le pre (lindex du nud pre) et unsymbole.

    Pour descendre dans larbre on utilise une fonction de hachage h qui associe un nouvel index une paire (index, symbole).

    Exemple. Supposons de lire abcd et quaprs lecture de abc on sache que abc est dansle dictionnaire avec a en position 97, ab en position 266 et abc en position 284. Les positionscorrespondantes du tableaux contiendront :

    284

    a

    97 266

    b c

    0 ...

    ...

    ...

    ...

    ...

    ...

    ...

    ...

    97 266

    Le prochain symbole est un d. On doit donc chercher si abcd est dans le dictionnaire, plusprcisment sil y a un nud avec symbole = d et pre = 284.

    On calcule alors h(284, 100) (puisque 100 est le code ASCII de d) qui retourne un index (p.ex 299). Il y a alors 3 possibilits :

    1. Le nud 299 est inutilis. Cela veut dire que abcd nappartient pas encore au dictionnaireet doit tre ajout cette place. On cre alors le nouveau nud 299 et le dictionnairedevient :

    299

    a

    97

    b c

    0 ...

    ...

    ...

    ...

    ...

    ...

    97 266 284

    ...

    ...

    284266

    d

    ...

    ...

    2. Le nud 299 a bien d dans le champ symbole et 284 (do on vient) dans le champ pre.Cela veut dire que abcd appartient ou dico. On passe lire le symbole qui suit le d.

    3. Le nud 299 contient autre chose. Cela veut dire quil y a une collision de la fonction dehachage. La manire plus simple de traiter les collisions est celle de consulter les nudssuivants (300, 301,...) jusqu ce quon tombe sur un nud inutilis (on est alors dans lepremier cas) ou bien sur un nud qui contient le couple (288, d) (on est alors dans ledeuxime cas)

    En fait on utilise aussi un troisime champ de type index qui servira au dcodeur. Ce champscontient la valeur retourn par la fonction de hachage sur le couple form par le deux autres

  • 5.1. LZ77 (FENTRE GLISSANTE) 35

    champs. Donc la valeur contenue dans ce champs concide avec la position du nud seulementsil ny a pas eu de collision.

    Dcodage

    Le dcodeur na pas besoin de fonction de hachage. Il initialise le dictionnaire comme lenco-deur, puis il lit les tokens et les utilise pour identifier un nud et donc une entre du dictionnaire.

  • 36 CHAPITRE 5. MTHODES DICTIONNAIRE

  • Chapitre 6

    Compression dimages

    Une image digitale est un tableau rectangulaire de points (dits picture elements ou pixels)disposs sur m lignes et n colonnes. Lexpression m n est dite rsolution de limage.

    Le terme rsolution dsigne parfois le nombre de pixels par unit de mesure (p. ex. parcentimtre ou par pouce).

    Il peut tre utile faire la distinction suivante :Images binaires ou monochromatiques. Chaque pixel peut avoir seulement deux valeurs, g-nralement nots blanc et noir et est reprsent par un bit.

    Images niveau de gris. Chaque pixel est reprsent par n bits (dans le cas prcdent, n = 1)et donc peut avoir seulement lun des 2n valeurs compris entre 0 et 2n 1, qui sont lesvaleurs reprsentables sur n bits et qui reprsentent une intensit de gris (ou dune autrecouleur). Gnralement n est 4, 8, 12, 16, 24, ou en gnral un multiple de 4 ou de 8.Lensemble de tous les k-mes bits des pixels forment le k-me bitplan (il y a donc exacte-ment n bitplans).

    Images tons continus Ces images prsentent un nombre trs grand de couleurs similaires(ou de niveaux de gris). Quand les valeurs deux pixels adjacent diffrent seulement duneunit, il est difficile ou mme impossible pour luil de les distinguer. La couleur paraitvarier avec continuit. Un pixel est reprsent par un nombre trs grand (pour images niveaux de gris) ou par trois composantes trs grandes (R, G, B, pour images en couleurs).Il sagit souvent dimages naturelles (et non artificielles) obtenues avec un appareil photodigital ou un scanner.

    Images tons discrets (appels aussi images graphiques ou images synthtiques). Normale-ment, ces images sont artificielles. Elles peuvent avoir peu ou beaucoup de couleurs, maisils nont pas les caractre continu qui caractrise les prcdentes. Des exemples : unepage de texte, une table, un dessin anim, ou les icnes sur un cran dordinateur. On notequon peut aussi avoir des images artificielles (gnres par un ordinateur) qui soient tonscontinus puisque elle doivent paraitre naturelles. Dans une image tons discrets, trssouvent deux pixels adjacents ont, soit des couleurs identiques (potentiellement, beaucoupde redondance !), soit des couleurs totalement diffrents. Les mthodes de compression quisappliquent aux images tons continus ne marchent pas bien pour ce type dimages parcequils estomperaient trop fortement les frontires entre une rgion dune couleur et unergion dune autre couleur.

    Images dessin anim Ces images prsentent plusieurs rgions uniformes, cest dire com-poses de pixel ayant tous la mme couleur. Cette proprit peut bien tre exploit pourobtenir de bons taux de compression.

    37

  • 38 CHAPITRE 6. COMPRESSION DIMAGES

    6.1 Introduction la compression dimages.

    Puisque la plupart des application aujourdhui prsentent des interfaces graphiques, on doittout le temps manipuler des images.

    Mais les images peuvent tre trs volumineuses ! ! Gnralement, pour images couleurs, chaquepixel est reprsent par un nombre sur 24 bits (3 fois 8, un octet pour chaque compostante R,G, B), ce qui permet de reprsenter 224, soit environ 16, 78 millions de couleurs. Donc une image(non compresse) de 512512 pixels fait 768.432 octets, alors quune image de 10241024 pixelsfait 3.145.728 octets.

    En consquence la compression dimages est extrmement importante.

    Une observation importante est que la compression dimage peut tre avec perte, en particulierperte de ces caractristiques de limages qui ne sont pas visible luil.

    Nous savons que linformation peut tre compresse seulement si elle prsente de la redon-dance. Dans le cas de compression avec perte (dimages) on pourra compresser limage mmesi elle ne prsente aucune redondance mais elle prsente de linformation non essentielle (en an-glais : irrelevant), cest dire des caractristiques qui peuvent tre limines sans que luil senaperoive. En consquence, une image peut tre compresse (avec perte) mme si il ny a pas deredondance.

    Il existe une mthode simple pour quantifier linformation perdue dans une compression avecperte. tant donne une image A, la compresser pour obtenir B. Ensuite dcompresser B pourobtenir C. Soit D = CA. Si A a t comprsse sans perte, alors C = A et D sera uniformmentblanche. Sinon, plus il y a eu la perte dans la compression et plus D sera loin dtre une imageblanche.

    Les mthodes vues jusquici (RLE, quantisation scalaire, mthodes statistiques et mthodes dictionnaire...) peuvent marcher, mais utilises toutes seules ne donnent pas de bons rsultats.

    RLE. On a dja vu dans le premier chapitre comme RLE peut tre utilis pour compresserdes images. Toute seule elle ne marche pas bien pour images, sauf celles en N/B. Et mmepour les images en N/B du fax, elle es utilise en combinaison avec la mthode de Huffman.On verra que le format JPEG pa exemple utilise RLE combine avec dautres mthodes.

    Les mthodes statistiques. Ces mthodes compressent bien quand les symboles ont desprobabilits trs diffrentes entre elles. Or, souvent ce nest pas le cas pour les diffrentescouleurs ou niveaux de gris dans les images tons continus. Les mthodes statistiquescompressent mieux les images qui prsentent des discontinuits de couleurs (pixels adjacentspeuvent avoir couleur trs diffrentes). Cependant, il nest pas facile de juger la vue siune image prsente assez de discontinuit de couleur pour que la compression soit bonne.

    Les mthodes dictionnaire. Ces mthodes ne compressent pas bien non plus les images tons continus. En fait, ces images prsentent des pixels adjacents ayant couleurs proches,mais pas de patterns qui se rptent. Mme des images qui paraissent prsenter des patternsqui se rptent (P. ex. une barre verticale noire sur fond blanc) peuvent les perdre si limage traiter est le rsultat dune scannerisation o la feuille na pas t place parfaitementverticale. Un autre problme des mthodes dictionnaire est quelles scannerisent limagehorizontalement, ainsi elles ngligent des rgularits verticales (et donc des corrlationsentre les pixels placs sur une mme colonne), qui donnent lieu aussi de la redondancequi ne sera pas limine. P. ex., GIF compresse beaucoup mieux une image avec des barresnoires horizontales que la mme image tourne de 90 degrs.

  • 6.1. INTRODUCTION LA COMPRESSION DIMAGES. 39

    6.1.1 Compression dimages et Correlation.

    La compression dimages est li au concept de correlation (ou redondance spatiale) entrepixels. Des lments dinformation qui sont co-relis peuvent tre compresss de manire impor-tante. Voyons cela avec deux exemples.

    Exemple 1. On considre la suite suivante de donnes :

    12, 17, 14, 19, 21, 26, 23, 29, 41, 38, 31, 44, 46, 57, 53, 50, 60, 58, 55, 54, 52, 51, 56, 60

    On note que seulement deux valeurs sont identiques et que la moyenne de ces valeurs est40, 3. On voit cependant quil y a une relation (correlation) entre chaque valeur et la suivante,ce qui est mis en vidence par la suite de leurs diffrences :

    12, 5,3, 5, 2, 4,3, 6, 11,3,7, 13, 4, 11,4,3, 10,2,3, 1,2,1, 5, 4

    Cette suite est susceptible dtre plus fortement compresse que la prcdente pour plusieursraisons :

    Ces diffrences ont des valeurs absolues plus petites que celles de la suite dorigine, ellespourront donc tre en principe codes sur un nombre plus petit de bits.

    Il y a des rptitions, ce qui rduit le nombre de valeurs diffrents et donc aussi le nombrede bits pour les reprsenter. Ici par exemple il ny a plus que 15 valeurs distinctes et donc4 bits pourraient suffire pour les reprsenter.

    De plus, valeurs rptes dterminent plus facilement la cration de runs.

    On peut donc utiliser la correlation pour compresser, et quand il ny a pas de correlationapparente, on peut la crer pour lexploiter comme illustrer par lexemple suivant.

    Exemple 2. Soit une image A de rsolution 32 32 dont les pixels ont une valeur entre 0 et 255choisie au hasard. Limage A sera donc une distribution totalement random de pixels de diffrentsniveaux de gris. Il ny a donc pas de correlation entre les pixels et limage sera difficilementcompressible. Dautre part, considrons la matrice B obtenue en inversant la matrice A. Onrappelle que le calcul dune valeur B[i, j] de la matrice inverse dpend de toutes les valeurs dela matrice A, puisque cette valeur est :

    B[i, j] = (1)i+jdet(Ai,j)

    det(A)

    o Ai,j est la matrice (de taille 31 31) obtnue en effaant la ligne i et la colonne j de lamatrice A.

    On voit donc que deux pixels adjacent de B auront des valeurs proches (les expressions pourB[i, j] et B[i + 1, j] par exemple seront trs similaires, puisque les matrices Ai,j et Ai+1,j ontbeaucoup dlments en commun), ils sont donc co-relis. La matrice B se compressera doncbeaucoup mieux que la matrice A. On aura donc intrt transformer dabord A en B et com-presser B au lieu de A. Le dcodeur dcompressera la version compresse de B et appliquera latransformation dans le sens oppos pour retrouver A.

    Ceci est le principe de lapproche des transformes. On transforme une image en une autre quiprsente plus de correlation et on compresse cette dernire. Dans cet exemple, la transformationconsiste simplement prendre la matrice inverse.

  • 40 CHAPITRE 6. COMPRESSION DIMAGES

    6.1.2 Compression dimages et Luminance.

    Par exprience, dans une image, la luminosit des pixels est aussi co-relie. Si un pixel estclair (lumineux) alors trs souvent ses voisins seront aussi clairs (lumineux) mme sils sont duneautre couleur. De plus, luil humain est beaucoup plus sensible aux variations de luminositquaux variations de couleurs. On peut voir lensemble de toutes le couleurs comme un espacevectoriel tridimensionnel gnr par la base constitu des trois vecteurs R = (1, 0, 0),G = (0, 1, 0)et B = (0, 0, 1) (p. ex, la couleur (78, 202, 113) est obtenue comme la combinaison linaire :78 R + 202 G + 113 B).Il convient en fait dexprimer les couleurs en fonction dune autre base que RGB. En effet, onpeut dfinir un vecteur Y , dit luminance, qui est une combinaison linaire de RGB et ayant laproprit que la composante dune couleur en direction mesure le degr de luminosit du pixel.Ce vecteur Y a une forte composante verte et une faible composante rouge et bleu, parce quecest surtout la couleur verte qui donne la sensation de luminosit. De plus, on peut bien entendutrouver deux vecteurs CR et CB ( une forte composante rouge et bleue, respectivement) quiforment avec Y une nouvelle base.

    Les composantes Y de pixels adjacents auront valeurs proches, elles seront donc co-rlies eton pourra exploiter cette proprit de correlation pour une meilleur compression.

    6.2 Prsentation des approches de la compression dimages.

    1. Pour images binaires (en N/B). Digitaliser limage dans lordre du rateau (ligne par ligne,de droite vers la gauche) et utiliser RLE. Les longueurs des runs peuvent ensuite tre codespar un code prfixe taille variable (mthode statistique la Huffman comme pour le fax).Variantes : digitaliser limages par dautres ordres qui pourraient savrer plus avantageux :par colonnes, en zig-zag...

    2. Pour images binaires (en N/B). Utiliser les quadtrees. Il sont dfinit rcursivement. Sup-posons davoir une image carre de taille 2k 2k (si ce nest pas le cas, on peut toujoursborder limage avec un nombre opportun de colonnes ou de lignes de zros pour la rendrecarre et ayant comme cot une puissance de 2). Si une image est entirement blanche(resp. noire) alors son quadtree est un arbre constitue dun seul nud (sa racine) ayantcouleur blanc (resp. noir). Sinon, le quadtree associ mimage est un arbre constituedune racine (nayant pas de couleur) ayant quatre sous-arbres, qui sont les quadtrees desimages obtenues en divisant limage en quatre (correspondants aux quadrants Nord-Ouest,Nord-Est, Sud-Ouest et Sud-Est).

    3. Pour images plusieurs niveaux de gris. Chaque bitplan dune telle image est en faitquivalent une image en N/B. On donc peut appliquer chaque bitplan les approchesvues pour les images N/B.Toutefois il est important de faire une considration. Le fait que pixels adjacents aienttonalit de gris proche, nimplique pas forcment quils ont composantes identiques surla plupart des bitplans. P. ex., si dans une image 4 bitplans deux pixels adjacents ontcouleur 7 (0111) et 8 (1000), alors sur chacun des quatre bitplans la valeur va changer (de0 a 1 sur le 1er bitpan, de 1 0 pour les autres. Ceci est d au fait que deux nombresconscutifs nont pas forcment des reprsentations similaire en binaire. Si on veut que pourdeux pixels adjacents de couleur proche, un maximum de bitplans prsentent valeurs gales(ce qui rsulte priori en runs de plus grande longueur), il faut utiliser pour les entiers uncodage ayant la proprit que le codes de deux entiers conscutif diffrent pour au plus unbit (les codes ordinaires de 7 et 8 diffrent sur 4 bits). Un tel code existe, il sappelle code

  • 6.2. PRSENTATION DES APPROCHES DE LA COMPRESSION DIMAGES. 41

    de Gray. Le code de Gray de rang n, not G(n), utilise des mots de longueur n (n bits)pour reprsenter les entiers entre 0 et 2n 1. Il est dfini rcursivement comme suit :

    G(1) = {0, 1}

    (on code lentier 0 par le mot 0 et lentier 1 par le mot 1)

    G(n) = 0 G(n 1) 1 G(n 1)

    o G(n 1) dnote bien entendu le code de Gary de rang n 1, loprateur dnote laconcatnation (ainsi 0G(n1) reprsente lensemble de tous le mots obtenus en concatnant

    un 0 avec tous les mots de G(n1), alors que loprateurdnote le renvers (ainsi G(n 1)est lensemble des mots G(n 1) parcouru de la fin au dbut)P. ex :

    G(2) = 0 G(1) 1 G(1) = 0 {0, 1} 1 {1, 0} = {00, 01, 11, 10}

    ce qui donne : 0 cod par 00, 1 cod par 01, 2 cod par 11, 3 cod par 10

    G(3) = 0 G(2) 1 G(2) (6.1)

    = 0 {00, 01, 11, 10} 1 {10, 11, 01, 00} (6.2)

    = {000, 001, 011, 010, 110, 111, 101, 100} (6.3)

    donc : 0 cod par 000, 1 cod par 001, 2 cod par 011, 3 cod par 010, 4 cod par 110, 5 codpar 111, 6 cod par 101, 7 cod par 100. Quand les entiers sont cods par le code de Gray,on voit tout de suite apparatre une plus grande rgularit sur les bitplans, notamment,moins de distribution random et plus de runs (voir figures 4.9, 4.10 et 4.11 dans le livre deDavid Salomon), ce qui permet de compresser davantage.

    4. Utiliser le contexte dun pixel pour prdire sa valeur.Soit une image P . On choisit un contexte pour chaque pixel P [i, j] (p. exemple les 4 pixelsayant un cot en commun avec lui, ou les 8 pixels ayant un cot ou on sommet en communavec lui) et on calcule la moyenne des valeurs pixels du contexte. Soit la matrice A tellequeA[i, j] est la moyenne des valeurs des pixels dans le contexte de P [i, j]Le principe de la compression dimage nous dit quen gnral la matrice A est presquepartout gale P (ou ses valeurs sont presque partout trs proches des valeurs de P ).Une fois calcul la matrice A, on peut calculer la matrice = P A. Cette matrice estcompose de beaucoup de zro et de beaucoup de valeur trs petites. En fait, la moyennereprsente la valeur quon peut prdire pour P , elle est donc une information redondantequi peut tre limine. Ma matrice se compresse donc bien par des mthodes standard(RLE, quantisation, ou mthodes statistique qui assignent des codes plus courtes aux petitesvaleurs qui seront plus frquentes). Lencodeur peut donc envoyer au lieu de P .Le contexte peut tre dfini de plusieurs manires, il peut mme tre constitu de un oudeux pixels seulement. On peut aussi attribuer des poids plus forts aux pixel du contexte quisont plus proches. On obtient ainsi une meilleure prdiction et une meilleure compression.Le dcodeur reoit lencode de , la dcode, et commence calculer A. Pour chaqueA[i, j], il pourra calculer P [i, j] = A[i, j] + [i, j] et reconstruire limage dorigine.Note. Pour que le calcul de A soit possible il faut que le premier pixel soit envoy sousforme brute et que le contexte utilise uniquement des pixels qui ont dj t dcod. Parexemple, le contexte du deuxime pixel cod ne pourra que contenir le premier.

  • 42 CHAPITRE 6. COMPRESSION DIMAGES

    5. Transformer limage et encoder la transforme. La mthode des transformes sera prsenteen dtail dans la prochaine section. En gnral il sagit dliminer la correlation et obtenirune version de limage o les pixels sont non correlis. En liminant la redondance on creaussi des valeurs beaucoup plus communes alors que dautres sont rare (petite entropie).La quantisation marche aussi bien sur les images transformes.

    Regardons maintenant les images en couleurs.

    6. Sparer limage en trois images niveaux de gris et appliquer lune des trois mthodes 3,4, ou 5. Prfrablement en utilisant une dcomposition, luminance, chrominance, couleurplutt que la reprsentation RGB.

    7. Les images tons discrets peuvent profiter dun traitement particulier. En gnral ellesont composes dun assemblage dlments de base (rectangles, lignes, courbes) qui sontrpts diffrentes positions, diffrentes chelles, tournes dangles diffrents. On codechacun des lments de base ainsi que les transformation quil a subi aux diffrents endroitde limage (translation, rotation...).

    6.3 Transformes.

    VENIR

  • Annexe A

    Titre

    43

  • 44 ANNEXE A. TITRE

  • Annexe B

    Titre

    45

  • 46 ANNEXE B. TITRE

  • Conclusion et discussion

    47