cours compression

Upload: jhdmss

Post on 10-Oct-2015

47 views

Category:

Documents


0 download

TRANSCRIPT

  • Cours Compression

    Master M2 Anne 2009-2010

    Version 0.0

    Universit de MontpellierPlace Eugne Bataillon

    34095 Montpellier Cedex 5

    RODOLPHE GIROUDEAU161, RUE ADA

    34392 MONTPELLIER CEDEX 5MAIL : {rgirou}@LIRMM.FR

  • Table des matires

    1 Compression de donnes 11.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Thorie de linformation . . . . . . . . . . . . . . . . . . . . . . 2

    1.2.1 Longueur moyenne dun code . . . . . . . . . . . . . . . 21.2.2 Lentropie comme mesure de la quantit dinformation . . 21.2.3 Thorme de Shannon . . . . . . . . . . . . . . . . . . . 3

    1.3 Prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3.1 Dcoder sans ambigut . . . . . . . . . . . . . . . . . . 41.3.2 Prfixe et proprits . . . . . . . . . . . . . . . . . . . . 51.3.3 Thormes de Kraft et McMillan . . . . . . . . . . . . . . 7

    1.4 Codage statique . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.4.1 Algorithme de Huffman . . . . . . . . . . . . . . . . . . 111.4.2 Codage Arithmtique . . . . . . . . . . . . . . . . . . . . 151.4.3 Codes adaptatifs . . . . . . . . . . . . . . . . . . . . . . 15

    1.5 Heurisitques de rduction dentropie . . . . . . . . . . . . . . . . 231.5.1 Run Length Encoding : RLE . . . . . . . . . . . . . . . . 231.5.2 Move-to-Front . . . . . . . . . . . . . . . . . . . . . . . 241.5.3 BWT : Transformation de Burrows-Wheeler . . . . . . . 25

    1.6 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . . . . 271.6.1 Algorithme de Lempel-Ziv 77 . . . . . . . . . . . . . . . 271.6.2 Algorithme de Lempel-Ziv 78 . . . . . . . . . . . . . . . 32

    1.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    2 Compression dimages 352.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362.2 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . . . . 36

    2.2.1 Formats GIF et PNG . . . . . . . . . . . . . . . . . . . . 362.3 Compression avec perte . . . . . . . . . . . . . . . . . . . . . . . 36

    2.3.1 Dgradation de linformation . . . . . . . . . . . . . . . . 36

    i

    TABLE DES MATIRES

    2.3.2 Transformation des informations audiovisuelles . . . . . . 372.3.3 Le format JPEG . . . . . . . . . . . . . . . . . . . . . . . 382.3.4 Le format MPEG . . . . . . . . . . . . . . . . . . . . . . 40

    2.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3 Compression du son 433.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    ii

  • Table des figures

    1.1 Arbre dgnr . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2 Compltion de larbre . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Exemple de cosntruction dun code de Huffman . . . . . . . . . . 121.4 Exemple dordre de Gallager sur un arbre . . . . . . . . . . . . . 171.5 Illustration de la mise jour de larbre . . . . . . . . . . . . . . . 201.6 Illustration de lajout dune feuille de caractre x . . . . . . . . . 212.1 Balayage en zigzag de JPEG . . . . . . . . . . . . . . . . . . . . 402.2 Compression JPEG . . . . . . . . . . . . . . . . . . . . . . . . . 402.3 Compression MPEG-1 . . . . . . . . . . . . . . . . . . . . . . . 412.4 Compression du son MP3 . . . . . . . . . . . . . . . . . . . . . . 42

    iii

    TABLE DES MATIRES

    iv

  • Liste des Algorithmes

    1.1 Description de lalgorithe de Huffman . . . . . . . . . . . . . . . 111.2 Algorihtme de compression Huffman dynamique . . . . . . . . . 161.3 Mise jour (x, T ) . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4 Ajout dune feuille (x, T ) . . . . . . . . . . . . . . . . . . . . . 211.5 Algorihtme de dcompression pour Huffman dynamique . . . . . 221.6 Mthode RLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.7 Rciproque de la BWT . . . . . . . . . . . . . . . . . . . . . . . 261.8 Algorithme de compression pour LZ77 . . . . . . . . . . . . . . . 281.9 Algorithme de dcompression pour LZ77 . . . . . . . . . . . . . 311.10 Algorihme de compression LZ78 . . . . . . . . . . . . . . . . . . 331.11 Algorihme de dcompression LZ78 . . . . . . . . . . . . . . . . 34

    v

    TABLE DES MATIRES

    vi

  • CHAPITRE

    1 Compression de don-nes

    Sommaire1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Thorie de linformation . . . . . . . . . . . . . . . . . . . 2

    1.2.1 Longueur moyenne dun code . . . . . . . . . . . . . 21.2.2 Lentropie comme mesure de la quantit dinformation 21.2.3 Thorme de Shannon . . . . . . . . . . . . . . . . . 3

    1.3 Prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3.1 Dcoder sans ambigut . . . . . . . . . . . . . . . . 41.3.2 Prfixe et proprits . . . . . . . . . . . . . . . . . . 51.3.3 Thormes de Kraft et McMillan . . . . . . . . . . . . 7

    1.4 Codage statique . . . . . . . . . . . . . . . . . . . . . . . . 111.4.1 Algorithme de Huffman . . . . . . . . . . . . . . . . 111.4.2 Codage Arithmtique . . . . . . . . . . . . . . . . . . 151.4.3 Codes adaptatifs . . . . . . . . . . . . . . . . . . . . 15

    1.5 Heurisitques de rduction dentropie . . . . . . . . . . . . 231.5.1 Run Length Encoding : RLE . . . . . . . . . . . . . . 231.5.2 Move-to-Front . . . . . . . . . . . . . . . . . . . . . 241.5.3 BWT : Transformation de Burrows-Wheeler . . . . . 25

    1.6 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . 271.6.1 Algorithme de Lempel-Ziv 77 . . . . . . . . . . . . . 271.6.2 Algorithme de Lempel-Ziv 78 . . . . . . . . . . . . . 32

    1.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Rsum

    Nous nous intressons au problme de la compression de donnes etdes techniques pour rsoudre ce problme.

    1

    COMPRESSION DE DONNES

    1.1 Introduction

    1.2 Thorie de linformation

    1.2.1 Longueur moyenne dun code

    Tous le smots de code ntant pas toujours de la mme longueur, on utilsie une me-sure dpendant des frquences dapparition pour estimer la longueur des messagesqui coderont une source. On rappelle quune source dinformation est constituedun alphabet S et sune distribution de probabilits P sur S. Pour un symbolesi dune source S = (S,P ), P (si) est la probabilit doccurrence de si, et l(m)dsigne la longueur dun mot m (de source ou de code).Soient S = (S,P ) o S = {s1, . . . , sn}, et C un code de S dont la fonction decodage est f (C est limage de S par f ). La longueur moyenne du code C est :

    l(C) =

    ni=1

    l(f(si))P (si)

    ExempleS = {a, b, c, d}, P = (1/2; 1/4; 1/8; 1/8). Si C = {f(a) = 00, f(b) =01, f(c) = 10, f(d) = 11}, la longueur moyenne du schma est 2.

    1.2.2 Lentropie comme mesure de la quantit dinformation

    Nous arrivons aux notions fondamentales de la thoeir de linformation. Soit unesource S = (S,P ). Nous ne connaissons de cette source quune distribution deprobabilit, et nous cherchons mesurer quantitativement quel point nous igno-rons le comportement de S .Il est ainsi naturel de choisir lentropie pour esure, savoir, pour une source (S,P ),P = (p1, . . . , pn)

    H(S) =

    ni=1

    pi log2(1

    pi)

    Cest une mesure de lincertitude lie une loi de porbabilits, ce qui est tou-jours illustr par lexemple du d : on considre une variable alatoire (source)issue du jet dun d n faces. Il ya plus dincertitude dasn le rsultat de ce jetsi le d est normal que si le d est biais. Ce qui se traduit par : pour tous lesp1, . . . , pn,H(p1, . . . , pn) H(1/N, . . . , 1/n) = log2 n.

    2

  • 1.2.3 Thorme de Shannon

    Ce thorme fondamental de la thorie de linformation est connu sous le nom dethorme de Shannon ou thorme du codage sans bruit.Nous commenons par noncer le thorme dans le cas dune source sans mmoire.

    Thorme 1.2.1 Soit une source S sans mmoire dentropie H . Tout code uni-quement dchiffrable de Sk sur un alphabet de taille q, de longueur moyenne l,vrifie :

    l H

    log2 q

    De plus, il existe un code uniquement dchiffrable de Sk sur un alphabet de tailleq, de longueur moyenne lk, qui vrifie :

    l 2h, o h est lordre de cette feuille. Ceciserait contradictoire avec la dfinition d poids.

    2. le poids de la racine de larbre est gale la somme des poids de ses feuilles.La racine de larbre est un noeud dordre 0 et a donc un poids 1, ce qui nousdonne ligalit. recherche.

    Lemme 1.3.2 Soit un arbre binaire dont les K feuilles ont pour ordre n1, . . . , nKavec m = max(n1, . . . , nK). Alors

    (1

    Kk=1

    2nk > 0) (1

    Kk=1

    2nk 2m)

    chaque noeuda pour attribut la concatenation des attributs des branches reliant la racine cenoeud.

    7

    COMPRESSION DE DONNES

    Preuve En reprenant les notations de lnonc

    (1

    Kk=1

    2nk > 0) (2m

    Kk=1

    2mnk > 0)

    Puisque k,m nk, le terme de gauche de lingalit de droite est entier, donc

    (1

    Kk=1

    2nk > 0) (2m

    Kk=1

    2mnk 1) (1

    Kk=1

    2nk 2m).

    Thorme 1.3.7 Ingalit de Kraft Il existe un code prfixe de K mots de lon-gueurs n1, . . . nK si et seulement si lingalit

    Kk=1

    2nk 1

    est satisfaitePreuve

    1. Soit un code prfixe de K mots de longueur n1, . . . nK , les mots de ce codesont exactement les feuilles de son arbre. Dautre part, la longueur dun motest exactement gale lordre du noeud le reprsentant dans larbre. Doncen utilisant le Lemme 1.3.1, nous obtenons bein lingalit.

    2. Soient des entiers 1 n1 . . . nK1 nK vrifiant lingalit , montronspar rcurrence sur K quil existe un arbre binaire dont les K feuilles ontpour ordre n1, . . . , nK .

    (a) Si K = 1, larbre dgnr donn la figure 1.1 de profondeur n1convient

    0 1 n1 1 n1. . .

    FIG. 1.1 Arbre dgnr

    8

  • (b) En enlevant la dernire longueur nK , nous avons

    K1k=1

    2nk < 1

    donc daprs le Lemme 1.3.2,

    K1k=1

    2nk + 2nK1 =

    K2k=1

    2nk + 21nK1 1

    On en dduit par hypothse de rcurrence, quil existe un arbre dont lesfeuilles ont pour profondeurs n1, . . . , nK2, nK11. Nous dotons lafeuille profondeur nK1 1 de deux fils pour obtenir un arbre Kde profondeur n1, . . . , nK2, nK1, nK . Si nK > nK1, il suffit derallonger lun des fils. Daprs le Lemme 1.3.1

    nK1

    nK1 1nK. . .

    FIG. 1.2 Compltion de larbre

    Il existe un rsultat similaire plus fort d McMillan.

    Thorme 1.3.8 McMillan Il existe un code dchiffrable de K ots de longuersn1, . . . , nK sis et suelemnt si lingalit

    Kk=1

    2nk 1

    est satisfaite.Preuve

    1. Si lingalit est satiasfaite alors il existe un code prfixe donc un code d-chiffrable avec les bonnes longueurs.

    9

    COMPRESSION DE DONNES

    2. Rciproquement, soit V avec |V | = K , soit un code dchiffrable deV et soit son codage associ. Pour tout L-uplet (x1, . . . , xn) V L,nous avons (x1, . . . , xn) = (x1)|| . . . ||(xL) et donc |(x1, . . . , xn)| =|(x1)| || . . . || |(xL)|. Donc

    (x

    2|(x)|)L =x1

    . . .xL

    2|(x1)| . . . 2|(xL)|

    =

    (x1,...,xL)

    2|(x1,...,xn)|

    =

    mLi=1

    aL(i)2i

    o m = maxxV l(x) et aL(i) est le nombre de L-uplets de V L dont lecodage est de longueur i exactement. Le code est dchiffrable, donc pourtout i, nous avons aL(i) 2 (sinon il existerait au moins deux L-upletsayant la mme iamge par . Nous en dduisons que pour tout L

    x

    2|(x)| (mL)1/L

    Do lingalit recherche quand L tend vers linfini.

    IL est important de noter que les Thormes 1.3.7 et 1.3.8 ne sont pas constructifs.Ils nous donnent un rsultat sur lexsitence de codes dont les longueurs des mots decodes vrfient lingalit, mais ne prtendent pas que tout code dont les longueursvrifient lingalit est prfixe (ou dchiffrable).

    Corollaire 1.3.1 Sil existe un code uniquement dchiffrable, dont les mots sont delongueur l1, . . . , ln, alors il existe un code instantan de mmes longueurs de mots.

    Cest une consquence des thormes de Kraft et McMillan. Les codes dchiffrablequi ne possdent pas la proprit du prfixe ne produisent pas de code aux motsplus courts que le scodes instantans, auxquels on peut donc se restreindre pour lacompression dinformation (leurs proprits les rendent plus maniables).

    Dfinition 1.3.3 Un code est dit complet sil vrifie la relationx

    2|(x)| = 1

    10

  • Exemple

    Code A Code B code Cs1 00 0 0s2 01 100 10s3 10 110 110s4 11 111 114

    i=1 2ni 1 7/8 9/8

    Les codes A et B sont dhiffrables, le premier tant complet. Le code C nest pasdchiffrable.

    1.4 Codage statique

    Les codages statisitques utilisent la frquence de chaque caractre de la sourcepour la compression, et en codant les caractres le splus frquents par des motsplus courts, se positionneent proches de lentropie.

    1.4.1 Algorithme de Huffman

    1.4.1.1 Lalgorithme de Huffman est optimal

    Cette mthode permet de trouver le meilleur schma dencodage dune source sansmmoire S = (S,P ). Lalphabet de codage est V , de taille q. Il est ncessaire loptimalit du rsultat de vrifier que q 1||S| 1 (afin dobtenir un arbrelocalement complet). Dans le cas contraire, il est facile de rajouter des symboles S, de probabilits doccurrence nulle, jusqu ce que q 1||S| 1. Les mots decodes associs (les plus longs) ne seront pas utiliss.

    Algorithme 1.1 Description de lalgorithe de HuffmanOn construit avec lalphabet source S un ensemble de noued isol auxquel onassocie les probabilits de P . Soient pi1 , . . . , piq les q symboles de plus faiblesprobabilits. On construit un arbre dont la racine est un nouveau noeud et auquelon associe la probabilit pi1 + . . .+ piq , et dont les branches sont incidentes auxnoeuds pi1, . . . , piq .On recommence ensuite ave les q plus petites valeurs parmi les noeuds du plushaut niveau (les racines), jusqu nobtenir quun arbre ( chaque itration, il y aq 1 lments en moins parmi les noeuds de plus haut niveau), dont les mots deS sont ls feuilles, et dont les mots de code associs dans le schma ainsi construitsont les mots correspondant aux chemins de la racine aux feilles.

    Les tapes successives de lalgorithme sotn dcrites par la figure 1.3

    11

    COMPRESSION DE DONNES

    Tri dans lordre croissant

    Construction de larbre et tri du niveau le plus haut

    0, 05

    0, 05

    0, 05

    0, 05

    0, 05

    0, 06

    0, 06

    0, 06

    0, 06

    0, 06

    0, 10

    0, 10

    0, 10

    0, 19

    0, 19

    0, 19

    0, 25

    0, 25

    0, 25

    0, 25

    0, 25

    0, 35

    0, 35

    0, 35

    0, 35

    0, 35

    0, 11

    0, 11

    0, 11

    0, 11

    0, 21

    0, 21

    0, 21

    0, 40

    0, 40

    0, 60

    tape suivante

    tape suivante

    Arbre final

    a

    a

    a

    a

    a

    b

    b

    b

    b

    b

    c

    c

    c

    c

    c

    d

    d

    d

    d

    d

    e

    e

    e

    e

    e

    f

    f

    f

    f

    f

    0

    0

    00

    0

    1

    1

    11

    1

    FIG. 1.3 Exemple de cosntruction dun code de Huffman

    12

  • Symbole Probabilita 0, 35b 0, 1c 0, 19d 0, 25e 0, 06f 0, 05

    TAB. 1.1 Rsultat

    Symbole Mot de codea 11b 010c 00d 10e 0111f 0110

    TAB. 1.2 Rsultat

    Le code de Huffman construit est alors :

    Thorme 1.4.1 Le code issu de lalgorithme de Huffman est optimal parmi tousles codes instantans de S sur V .

    PreuvePrenons q = 2. Nos avons quun code instantat peut tre reprsent par un arbrede Huffman. Soit A larbre reprsentant un code optimal, et H larbre reprsentantle code issu de lalgorithme de Huffman.Remarquons que dans A, il nxiste pas de noeud avec un seul fils dont les feuillescontiennent des mots du code (en effet, on remplace un tel noeud par son fils et onobtient un meilleu code).Remarquons maintenant que dans A, si pour des mots c1 et c2 les probabilitsdapparitions respectives p1 et p2 satisfont p1 < p2, alors le sheuteurs respectivesdes feuilles reprsentant c1 et c2 : l1 et l2 satisfont l1 l2 (en efet, dans le cascontraire, on remplace c1 par c2 dans larbre et on obtient un code meilleur). Onpeut donc supposer que A reprsente un code optimal pour lequel les deux mots deplus faibles probabilits sont deux feuilles frres (admettnt le mme pre).On raisonne maintenant par rcurrence sur le nombre de feuilles n dans A. Pourn = 1, le rsultat est vident.Pour n 2 quelconque, on considre les deux feuilles frres correspondant aux

    13

    COMPRESSION DE DONNES

    mots c1, c2 de plus faibles probabilits dapparition p1, p2 dans A. Daprs le prin-cipe de construction de Huffman, c1 et c2 sont des feuilles frres dans H . On dfinitalors H = H\{c1, c2} {c}, c tant un mot de probabilit dapparition p1 + p2.H reprsente par le principe de rcurrence le meilleur code instantan sur C , doncde longueur moyenne infrieure A = A\{c1, c2}. Donc, et daprs les premiresremarques, la longueur moyenne de H est infrieure la longueur moyenne de A.

    Le thorme prcdent indique que lalgorithme de Huffman nest pas le meilleurpour coder une information dasn tous les cas : mais en fixant pour modle unesource S sans mmoire sur un alphabet V , il ny a pas de code plus efficace qui ala proprit du prfixe.On peut obtenir des codes plus efficace partir des extensions de la source, commeon peut le voir sur lexemple suivant :Soit S = (S,P ), S = (s1, s2), P = (1/4, 3/4). Un codage de Huffman pour Sdonne videmment s1 0 et s2 1, et sa longueur moyenne est 1.Un codage de Huffman pour S2 = (S2, P 2) donne

    s1s1 010

    s1s2 011

    s2s1 00

    s2s2 1

    et sa longueur moyenne est 3(1/16)+3(3/16)+2(3/16)+9/16 = 27/16 =1, 6875. La longueur moyenne de ce code est donc l1, 6875, et en comparaison avecle code de S (les mots de S2 sont de longueur 2), l = 1, 6875/2 = 0, 84375 cequi meilleur que le code sur la source originelle. Nous pouvons encore amliorerce codag en examinant la source S3. Il est aussi possible daffiner le codage parune meilleur modlisation de la source : souvent, loccurence dun symbole nestpas indpendante des symboles prcdemment mis par une source (dans le cas duntexte, par exemple). Dans ce cas, les probabilits doccurrence sotn conditionnelleset il existe des modles (lemodle de Markov, en particulier) qui permettent unmeilleur codage. Mais ces procds ne conduisnet pas des amliorations infinies.Lnetropie reste un seuil popur la longueur moyenne, en-de duquel on en peutpas trouver de code.

    14

  • 1.4.2 Codage Arithmtique

    1.4.3 Codes adaptatifs

    1.4.3.1 Algorithme de Huffman dynamique

    Lalgorithme de Huffman dynamique permet de compresser un flot la vole enfaisant une seule lecture de lentre ; la diffrence de lalgorithme statique dHuff-man, il vite de faire deux parcours dun fichier dentre (un pour le calcul desfrquences, lautre pour le codage). La table des frquences est labore au fur et mesure de la lecture du fichier ; ainsi larbre de Huffman est modifi chaque foisquon lit un nouveau caractre.La commande pack de Unix implmente de cet algorithme.

    1.4.3.2 Compression dynamique

    La compression est dcrite par lalgorithme 1.4.3.2. On suppose quon doit coderun fichier de symboles binaires lus la vole par blocs de k bits (k est souvent unparamtre) : on appelle donc caractre un tel bloc. A linitialisation, on dfinitun caractre symbolique (not @ par exemple) et cod intialement par un symboleprdfini (par exemple comme un 257 me caractre virtuel di code ASCII). lors ducodage, chaque fois que lon rencontre un nouveau caractre pas encore rencon-tr, on le code sur la sortie par le code de @ suivi de k bits du nouveau caractre. Lenouveau caractre est alors entr dasn larbre de Huffman. Pour construire larbrede Huffman et le mettre jour, on compte le nombre doccurrences de chaque ca-ractre et le nombre de caractres dj lus ; on connat donc, chaque nouvellelecture, la frquence de chaque caractre depuis le dbut du fichier jusquau carac-tre courant ; les frquences sont donc caclules dynamiquement. Aprs avoir critun code (soit celui de @, soit celui dun caractre dj rencontr, soit les k bits noncompresss dun nouveau caractre), on incrmente de un le nombre doccurrencesdu caractre crit. En prenant en compte les modifications de frquence, on met jour larbre de Huffman chaque itration.Larbre existe donc pour la compression (et la dcompression) mais na pas besoindtre envoy au dcodeur. Enfin, il ya plusieurs choix pour le nombre doccur-rences de @ ; dans lalgorithme 1.4.3.2 cest le nombre de caractres distincts (celapermet davoir peu de bits pour @ au dbut), il est aussi possible de lui attribuerpar exemple une valeur cosntante trs proche de zro (dans ce cas le nombre debits pour @ volue comme la profondeur de larbre de Huffman, en laissant auxcaractres trs frquents les codes les plus courts).

    15

    COMPRESSION DE DONNES

    Algorithme 1.2 Algorihtme de compression Huffman dynamiqueSoit nb(c), le nobre doccurrence dun caractre cInitialiser larbre de Huffman (AH) avec le caractre @while on nest pas la fin de la source do

    Lire le caractre c de la sourceif cest la premire occurrence de c thennb(c) := 0nb(@) := nb(@) + 1Afficher en sortie le code de @ dans AH suivi de c

    elseAfficher le code de c dans AH

    end ifnb(c) := nb(c) + 1Mettre jour AH avec les nouvelles frquences

    end while

    1.4.3.3 Mise en oeuvre de lalgorithme de Huffman adaptatif

    Nous identifions un code prfixe dune source discrte X un arbre binaire |X|feuilles tiquetes par les lettres de X. Le code est dit complet si chaque noeudspossde 0 ou 2 fils.

    Dfinition 1.4.1 Soit T un code prfixe dune source discrte X, le poids relative-ment (T,X) est dfini de la faon suivante : le poids dune feuille est la probabilit de sa lettre le poids dun noeud est la somme du poids de ses fils

    Dfinition 1.4.2 Un arbre de Huffman de X est un code prfixe de X qui peit treobtenu par lalgorithme de Huffman

    Dfinition 1.4.3 Sout T un code prfixe complet dune source discrte X de car-dinal K. Un ordre de Gallager sur T relativement X est un ordre u1, . . . , u2K1sur le snoeuds de T vrifiant

    1. les poids des ui relativement (T,X) sont dcroissants,2. u2i et u2i+1 sont frres dans T,1 i < K.

    Thorme 1.4.2 Gallager Un code prfixe T (i.e. un arbre) dune source X estun arbre de Huffman de X si et seulement si il existe un ordre de Gallager sur Trelativement X.

    16

  • Preuve Rappel un arbe binaire irrductible m feuilles admet 2m 1 noeuds. Nous

    savons que les mots de poids le plus faible sont jumeaux. Nous fusionnons lesdeux feuilles pour obtenir un arbre avec une feuille de moins, soit 2(m1)1 =2m 3 noeuds. Larbre obtenu est un arbre de Huffman, qui admet un ordre deGallager (induction) u1 . . . u2m3. Et le noeud fusionn est quelque partdasn la liste. On prend ses deux fils, et on les mets la fin, ce qui donne un ordrede Gallager. u1 . . . u2m3 u2m2 u2m1.

    Rciproquement, supposons que T admette u ordre de Gallager. Les noeuds sontordonns de la sorte

    u1 . . . u2m3 u2m2 u2m1

    o u2m2 et u2m1 sont les noeuds de poids minimal, qui sont des feuilles frres.Soit T larbre u1, . . . , u2m3 il admet lordre u1 . . . u2m3. Cestdonc u arbre de Huffman (induction). Par lalgorithme de Huffman, larbreu1, . . . , u2m2 est de Huffman.

    33

    555 6

    ri dans

    a

    b

    c

    d

    e f

    32

    11

    11 21

    10

    1

    23

    45

    6

    78

    9

    10

    11

    FIG. 1.4 Exemple dordre de Gallager sur un arbre

    Nous considrons un texte (x1, x2, . . . , xn, . . .) et une instance de lalgorithme deHuffman adaptatif sur ce texte. Nous notons Xn la source obtenue aprs lecture dela n-me lettre et Tn un arbre de Huffman de cette source.

    17

    COMPRESSION DE DONNES

    LA probabilit dune lettre de la source Xn est proportionnelle son nombre doc-currence dasn les n premires lettres du texte. Ainsi sans rien changer aux dfini-tions (en particulier pour un ordre de Gallager), nous pourrons utiliser pour le poidsle nombre doccurrence de chaque lettre (la lettre vide a un nombre doccurrencesgal 0). Notons que dans ce cas, le poids est entier et que le poids de la racinede Tn est n. Soit x la n + 1)-me lettre du texte. Soit u1, . . . , u2K1 est la feuillevide.

    Lemme 1.4.1 Si x Xn et si tous les noeuds uii , ui2 , . . . , uil du chemin entre xet la racine de Tn sont les premiers de leur poids dans lordre de Gallager sur Tnrelativement Xn, alors Tn est un arbre de Huffman de Xn+1, et u1, . . . , u2K1est un ordre de Gallager relativmeent Xn+1.

    Preuve Si lon pose Tn+1 = Tn, le poids des noeuds reste inchang, sauf pour lessommets uii , ui2 , . . . , uil du chemin de x la racine. Chacun de ces noeuds tant lepremier de son poids dans un ordre de Gallager sur Tn relativement Xn, lordrereste dcroissant aprs lincrmentation des poids. LA condition sur les frres esttoujours vrifie, car ni larbre ni lordre nont chang, et nous obtenons bien unordre de Gallager de Tn+1 relativement Xn+1. Le cas ci-dessus est idal et nest pas vrifi en gnral. Toutefois, quite fairequelques changes de noeuds dans larbre, on peut toujours sy ramener.Pour dcrire les algorithmes nous allons munir les noeuds de trois champs : pere un noeud poids et ordre des entiersInitialement, pour tout noeud de Tn le champ pere contient le pre de u dasn Tn (nil sil sagit de la racine) le champ poids contient le poids de u relativement (Tn,Xn) le champ ordre contient lindice de u dans un ordre de Gallager sur Tn relative-

    ment Xn

    Lemme 1.4.2 Si x Xn, alors lissue de la procdure mise jour (x, T ),larbre Tn+1 dfini par les champs pere est un code prfixe de Xn+1. Les poidssont relatifs (Tn+1,Xn+1) ( un coefficient multiplicatif prs), et les champsordre induisent un ordre de Gallager sur Tn+1 relativement Xn+1.

    Preuve Les proprits suivants sont des invariants de la boucle : deux noeuds partagent le mme pere ont des ordres conscutifs. lordre des noeuds est celui des poids dcroissants.De plus, puisque nous navons procd qu des changes de noeuds, la fin delexcution, les champs pere dfinissent un arbre binaire complet (que nous no-tons Tn+1 possdant autant de feuilles que le cardinal de Xn (gal celui de

    18

  • Algorithme 1.3 Mise jour (x, T )u := noeud(x, T ) ; la feuille de T dont la lettre associe est xwhile u 6= nil dou := min(v|v.poids = U.poids) ; le noeud de plus petit ordre ayant le poidsde uechanger(u.pere, u.pere)echanger(u.ordre, u.ordre)u.poids := u.poids + 1u := u.pere

    end while

    Xn+1). Il sagit donc dun code prfixe de Xn+1. La valeur des poids est relative (Tn+1,Xn+1), car une seule feuille a vu son poids augmenter, celle correspondant x, les autres noeuds dont le poids a t incrment lont t conformment ladfintion du poids (le chemin de x la racine).

    19

    COMPRESSION DE DONNES

    33

    33

    33

    4

    55

    55

    555

    66

    66

    6

    a

    a

    a

    b

    b

    b

    c

    c

    c

    d

    d

    d

    e

    e

    e

    f

    f

    f

    32

    32

    11

    11

    11

    11

    21

    21

    21

    10

    10

    10

    1

    1

    1

    2

    2

    2

    3

    3

    3

    4

    4

    4

    5

    5

    5

    6

    6

    6

    7

    7

    7

    8

    8

    8

    9

    9

    9

    10

    10

    10

    11

    11

    11

    +1

    +1

    +1

    12

    33

    FIG. 1.5 Illustration de la mise jour de larbre20

  • Si x Xn, larbre doit augmenter de taille et aura 2K+2 noeuds au lieu de 2K . Lanouvelle lettre va occuper la place de la lettre vide, puis nous ajoutons une feuillequi deviendra la nouvelle feuille vide.

    Algorithme 1.4 Ajout dune feuille (x, T )mise jour (x, T )z := noeud(, T ) (la feuille vide de T ) ; z devient un noeud interne, ses deuxfils u et v sont crs ci-aprsu := newfeuille(x, T ) (nouvelle feuille associ x dans T )u.pere := z ; u.poids := 1 ; u.ordre := 2Kv := newfeuille(, T ) (nouvelle feuille vide de T )v.pere := z ; v.poids := 1 ; v.ordre := 2K + 1

    Lemme 1.4.3 Si x / Xn, alors lissue de la procdure ajouter feuille (x, Tn),larbre Tn+1 dfini par les champs pere est un code prfixe de Xn+1. Les poidssont relatifs (Tn+1,Xn+1) ( un coefficient multiplicatif prs), et les champsordre induisent un ordre de Gallager sur Tn+1 relativement Xn+1.

    PreuveJuste aprs lappel mise jour(, T ), daprs les rsultats prcdents, les prorpi-ts sur les ordre et sur les frres dasn larbre sotn vrifies. Lajout des feuillesu et v ne change pas ces proprits, et les poids sont bien les poids relatifs (Tn+1,Xn+1).

    00 1

    1 u2K1

    u2K1 u2K+1u2K

    x

    . . .

    . . .

    devient

    FIG. 1.6 Illustration de lajout dune feuille de caractre x

    Lalgorithme de Huffman adatatif ne pourra tre optimal que si la source est sansmmoire. Dasn ce cas, conformment au but vis, les lemmes prcdents nouspermettent de montrer que localement , le code utilis est un code de Huffman classique , et donc est optimal par rapport ce qui est connu de la source cemoment l.

    21

    COMPRESSION DE DONNES

    1.4.3.4 Dcompression dynamique

    Lalgorithme 1.4.3.4 donne la dcompression. A linitialisation, le dcodeur conna-pit un seul code, celui de @ (par exemple 0). Il lit alors 0 qui est le code associ @. Il dduit que le sk bits suivants continnent un nouveau caractre/ Il recopie sursa sortie cesz k bits et met jour larbre de Huffman qui contient dj @, avec cenouveau caractre.Il faut bien noter que le codeur et le dcodeur maintiennent chacun leur proprearbre de Huffman, mais utilisent tous le sdeux le mme algorithme pour le mettre jour partir des occurrences (frquences) des caractres dj lus. Aussi, les arbresde Huffman calculs sparment par le codeur et le dcodeur sont les mmes.

    Algorithme 1.5 Algorihtme de dcompression pour Huffman dynamiqueSoit nb(c), le nobre doccurrence dun caractre cInitialiser larbre de Huffman (AH) avec le caractre @, nb(@) := 1while on nest pas la fin du message do

    Lire le mot de code c du message (jusqu une feuille de AH)if c = @ thennb(@) := nb(@) + 1Lire dasn c les k bits du message et les afficher ne soritenb(c) := 0

    elseAfficher le code de c dans AH

    end ifnb(c) := nb(c) + 1Mettre jour AH avec les nouvelles frquences

    end while

    Puis, le dcodeur lit le code suivant et le dcode via son arbre de Huffman. Silsagit du code de @, il lit les k bits correspondant un nouveau caractre, les critsur la sorite et ajoute le nouveau caractre son arbre de Huffman (le nouveaucaractre est dsormais associ un code). Sinon, il sagit du code dun caractredj rencontr ; via son arbre de Huffman, il trouve les k bits du caractre associau code, et crit sur la sortie. Il incrmente alors de un le nombre doccurencesdu caractre quil vient dcrire (et de @ si cest un nouvzau caractre) et met jour larbre de Huffman. Cette mthode dynamiue est peu moins efficace quela mthode statique pour estimer les frquences. Il est probable que le messagecod sera donc un peu long. Mais elle vite le stockage de larbre et de la tabledes frquences, ce qui rend le rsultat final souvent plus court. Ceci explique sonutilisation en pratique dasn les utilitaires courants.

    22

  • 1.5 Heurisitques de rduction dentropie

    En pratique, lalgorithme de Huffman (ou ses variantes) est utilis en conjonctionavec dautres procds de codage. Ces autres procds ne sont pas toujours opti-maux en thorie mais ils font des hypothses raisonnables sur la forme des fichiers compresser pour diminuer lentropie ou accepter une destruction dinformationsuppose sans consquence pour lutilisation des donnes.Nous prsenterons trois exemples de rduction dentropie. Le principe est de trans-former un message en un autre, pa rune tranformation rversible (fonction bijec-tive), de faon ce que le nouveau message ait une entropie plus faible, et soit donccompressible plus efficacement. Il sagit donc dun codage pralable la compres-sion, charg de rduire lentropie.

    1.5.1 Run Length Encoding : RLE

    Le codage statique tire parti des caractres apparaissant souvent, mais absolumentpas leur posotion dans le texte. Si un mme caractre apparat souvent rpt plu-sieurs fois daffil, il peut tre utile de coder simplement le nombre de fois o ilapparait. Par exemple, pour transmettre une page par fax, le codage statique coderale 0 par un petit mot de code, mais chaque 0 sera crit. Le codage RLE lit chaquecaractre la suite mais, lorsque au moins 3 caractres identiques successifs sontrencontres, il affiche plutt un code spcial de rptition suivi du caractre rp-ter et du nombre de rptitions. Par exemple, avec & comme caractre de rptition,la chane aabbbcddddd&ee est code par &a2&b3c&d5&&1&e2 (il est n-cessaire demployer une petite astuce si le caractre spcial est rencontr pour lerendre le code instantan).Pour ne pas avoir le problme du caractre spcial de rptition qui se code for-cment come une rptition de taille 1 les modems utilisent une variante de RLEappel MNP5. Lide est de que lorsque 3 ou plus caractres identiques sont ren-contrs, ces trois caractres sont affichs suivis dun compteur indiquant le nombredapparitions supplmentaires du caractre. Il faut bien sr convenir dun nombrede bits fixe attribuer ce compteur. Si le compteur dpasse son maximum, lasuite sera code par plusieurs blocs des 3 mmes caractres suivi dun compteur.Par exemple, la chane aabbbcddddd est code par aabbb0cddd2 . Dans cecas, si une chane de n octets contient m rptitions de longueur moyenne L, legain de compression est nm(L4)n si le compteur est sur un octet. Ce type de co-dage est donc trs utile par exemple pour des images noir et blanc ou des pixels demme couleur sont trs souvent accols. Enfin, il est clair quune compression sta-

    23

    COMPRESSION DE DONNES

    tisitque peut tre effectue ultrieurement sur le rsultat dun RLE. Nous obtenonslalgorithme 1.5.1.

    Algorithme 1.6 Mthode RLErepet := 0 ; compteur := 1RefCar := entre[compteur];CarCour := RefCar ;while compteur longueur(entre) do

    while RefCar = CarCour et compteur longueur(entre) doincrmente(compteur) ; incrmente(rpte) ;CarCour := entre[compteur] ;

    end whileif rpte < 4 then

    for i de 1 rpte docrire(RefCar) ;

    end forelse

    crire(&,rpte,RefCar) ;end ifrpte:= 0 ; RefCar:=CarCour

    end while

    La dcompression est immdiate : ds quon lit &nc, qui indique n rptition ducaractre c, on crit n fois c.

    1.5.2 Move-to-Front

    Il es tpossible de procder un pr-calcul lors de la transformation dun caractreASCII en sa valeur entre 0 et 255 : en modifiant la vole lordre de la table. Parexemple, ds quun caractre apparat dans la source, il est dabord cod par savaleur, puis il passe en dbut de list, et sera cod dornavant cod par un 0, tousles autres caractres tant dcal dune unit. CE move-to-front permet davoirplus de codes proches de 0 que de 255. Ainsi, lentropie est modifie.Par exemple, la chane aaaaffff peut tre modlise par une source dentropie 1,si la table est (a, b, c, d, e, f, ). Elle est alors code par 00005555 . Lentropie ducode est 1. Cest aussi lentropie de la source. Mais le code dun Move-To-Frontsera 00005000 , dentropie H = 7/8 log2(8/7) + log2(8)/8 = 0, 55. Le codelui-mme est alors compressible, cest ce quon appelle la rduction dentropie.Le dcodage est simple : partir du mme tableau initial, il suffit dmettre lecaractre correspondant lindice et de ranger le tableau en passant ce caractre enpremier. Le tableau volue exactement comme pendant la phase de codage.

    24

  • D0 c o m p r e s1 s2 e2D1 o m p r e1 s1 s2 e2 cD2 m p r e1 s1 s2 e2 c oD3 p r e1 s1 s2 e2 c o mD4 r e1 s1 s2 e2 c o m pD5 e1 s1 s2 e2 c o m p rD6 s1 s2 e2 c o m p r e1D7 s2 e2 c o m p r e1 s1D7 e2 c o m p r e1 s1 s2

    TAB. 1.3 BWT sur le mot compresse

    1.5.3 BWT : Transformation de Burrows-Wheeler

    Lide de lheuristique BWT est de trier les caractre dune chane afin que leMove-To-Front et le RLE soient les plus efficaces possibles. Le problme est biensr quil est impossible de retrouver la chane initiale partir dun tri de cette chaen !Lastuce est donc de trier la chane, mais denvoyer plutt une chaen intermdiaire,de meilleure entropie que la chane initiale, et qui permettent cependant de retrou-ver la chane initiale. Consdierons le mote compress . Il sagit de crer tousles dcalages possibles comme indiqu par la tableau 1.5.3, puis de trier les lignesdans lordre alphabtique et lexicographique. La premire colonne F de la nouvellematrice des dcalages est donc la chane trie de toutes les lettres du mot source. Ladernire colonne sappelle L. Seules la premire et la dernire colonne sont crites,car ce sont les seules importantes pour le code. Sur le tableau on diffrencie les oc-currence dun mm caractre afin de simplifier la vision de la transformation maisninterviennenet pas dans lalgorithme de dcodage : en effet lordre des caractresest forcment conserv entre L et F .Biens sr, pour calculer F (la premire olonne) et L (la dernire colonne), il nestpas ncessaire de stocker toute la matrice des dcalages, un simple pointeur se d-plaant dans la chane est suffisant. Cette prmeire phase est donc assez simple.Mais si seule la colonne F est envoe, comment effectuer la rciproque ? La so-lution est denvoyer la chane L au lieu de la chane F : si L nest pas trie, elleest cependant issue du tri dune chane quasiment semblable, simplement dcaledune lettre. On peut donc esprer quelle conserve des proprits issues du tri etque lentropie en sera rduite.Concernant le dcodage, la connaissance de la chane, conjugue celle dun indexprimaire (le numro de la ligne contenant la chane originel, dans lexemple prc-dent cest la ligne 4, en nurotant de 0 8) permet de rcuprer la chane initiale. Il

    25

    COMPRESSION DE DONNES

    F LD0 c e2D8 e2 s2D5 e1 rD2 m oD1 o cD3 p mD4 r pD7 s2 s1D! s1 e1

    TAB. 1.4 Les colonnes F et L aprs le tri

    suffit de trier L pour rcuprer F . Ensuite, on calcule un vecteur de transformationH contenant la correspondance des indices entre L et F .Pour lexemple, cela donne H = [4, 0, 8, 5, 3, 6, 2, 1, 7], car C est en position 4,lindex primaire dans L, puis E2 est en position 0 dans L puis E1 est en position8, . . . Ensuite, il faut se rendre compte en plaant l et F en colonnes, dans chaqueligne deux lettres se suivant doivent se suivre dans le chane initiale : en effet, pardcalage, la dernire lettre devient la prmeire et la prmeire devient la deuxime.Ceci se traduit galement par le fait que j, L[H[j]] = F [j]. IL ne reste plusqualors qu suivre cet enchaenement de lettres deux deux pour retrouver lachane initiale, comme da,s lalgorithme 1.5.3.

    Algorithme 1.7 Rciproque de la BWTSoit l une chane de caractre et soit indexF := tri de L ;Calculer le vecteur de transformation H tel que L[H[j]] = F [j],j ;for i de 0 Taille de L do

    Afficher L[index] ;index := H[index] ;

    end for

    En sortie de la transformation BWT, on obtient donc en gnral une chane den-tropie plus faible, bien adapte un Move-To-Front suivi dun RLE. Lutilitaire decompression bzip2 utilise cette suite de rductions dnetropie avant deffectuer uncodage de Huffman.

    26

  • 1.6 Codes compresseurs usuels

    Ces algorithmes de compression portent aussi le nom de substitution de facteurs.En effet, leur principe repose sur le remplacement de facteurs de lentre par descodes plus courts. Ces codes reprsentent les indices des facteurs dans u diction-naire qui est construit dynamiquement, au fur et mesure de la compression.La plupart des programmes de compression dynamique utilisent une des deux m-thodes proposes par Lempel et Ziv en 77 et en 78. Ces deux algorithmes par-courent lentre comprimer de la gauche vers la droite. Ils remplacent les facteursrptes par des pointeurs vers lendroit o ils sont dj apparus dans le texte. Bienque ces deux mthodes soient souvent confondues dasn la littrature, elles se dins-tinguent grandement par le construction du dictionnaire. Il existe un grand nombrede variantes de ces deux algorithmes. LZ77 est utilis dans lutilitaire gzip sousUNIX.

    1.6.1 Algorithme de Lempel-Ziv 77

    1.6.1.1 La compression

    Lide essentielle de cet algorithme est dutiliser une partie de la donne dentrecomme dictionnaire. Lalgorithme de compression fait glisser une fentre de N ca-ractre sur la chane dentre de la gauche ver sla droite. Cette fentre est composede deux parties : gauche le tampon de recherche de N F caractres qui constitue le diction-

    naire courant des lettres qui ont t lues et comprimes rcemment ; droite, le tampon de lecture de F caractres dans lequel se trouvent les lettres

    en attente de compression

    compres. . . .

    a ab bab abab ababb tampon de recherche

    aba bbb bab bbabb tampon de lecture . . .

    a` compres.

    A la lecture du a gauche du tampon de lecture, lalgorithme de compressionparcourt le tampon de recherche de la droite verts la gauche pour trouver un a. Il entrouve un une distance de 3 (dclage de 3). Il cherche ensuite faire correspondrele plus de symboles possibles entre le prfixe du tampon de lecture et le facteurdu tampon de recherche dbutant au a trouv prcdemment. Il peut mettre encorrepondance le facteur ab, de longueur 2 avec un dcalage de 3.

    27

    COMPRESSION DE DONNES

    compres. . . .

    a ab bab abab ababb tampon de recherche

    aba bbb bab bbabb tampon de lecture . . .

    a` compres.

    Il continue ensuite sa recherche pour essayer de faire correspondre le plus de sym-boles possibles entre le prfixe du tampon de lecture et un facteur du tampon derecherche.

    compres. . . .

    a ab bab abab ababb tampon de recherche

    aba bbb bab bbabb tampon de lecture . . .

    a` compres.

    La meilleur correspondance est faite entre le facteur aba et le prfixe aba, avec undcalage de 5, dune longueur de 3 caractres.

    compres. . . .

    a ab bab abab ababb tampon de recherche

    aba bbb bab bbabb tampon de lecture . . .

    a` compres.

    Une correspondance quivalente est trouve avec un dcalage de 10 et uen longueurde 3.Lalgorithme choisit la plus longue correspodnance et, sil y en a plusieurs qui-valents, celle qui est le plus gauche (la dernire trouve) dasn le tampon de re-cherche. Dans notre cas, il slectionne celle correspondant un dcalage de 10et une longueur de 3 et il crit le lxme correspondant (10, 3,). La dernirecomposante du triplet de sortie indique le premier caractre qui nest pas en cor-respondance dans le prfixe du tampon de lecture.

    Algorithme 1.8 Algorithme de compression pour LZ77Mettre un pointeur de codage au dbut de lentrewhile non vide (tampon de lecture) do

    Trouver la plus longue correspondance entre le tampon de lecture et celui derechercheEcrire (p, l, c) o

    p mesure la distance dcalage l longueur de la correspondance c premier caractre de lentre qui nest pas dans le dictionnaire

    Dplacer le pointeur de codge de l + 1 positions vers la droiteend while

    28

  • le ma ge dit abracadabra (0, 0, l)

    l e mag e dit abracadabra (0, 0, e)

    le mage dit abracadabra (3, 1,m)

    le m age d it abracadabra (0, 0, a)

    le ma ge di t abracadabra (0, 0, g)

    le mag e dit abracadabra (5, 2, d)

    le mage d it ab racadabra (0, 0, i)

    le m age di t abr acadabra (0, 0, t)

    le ma ge dit abra cadabra (4, 1, a)

    le mage dit a braca dabra (0, 0, b)

    le mage dit ab racad abra (0, 0, r)

    le mage d it abr acada bra (3, 1, c)

    le mage dit abrac adabr a (5, 1, d)

    le mage dit a a bracad abra (4, 1, b)

    le mage dit a abr acadab ra (0, 0, r)

    le mage dit a abra cadabr a (5, 1, )

    TAB. 1.5 Compression par LZ77

    A chaque instant, lalgorithme va recherche dans les N F premiers caractresdu tampon de recherche le plus long facteur qui se rpte au dbut du tampon delecture. Il doit tre de taille maximale F . Cette rptition sera code (p, l, c) o p est la distance entre le dbut du tampon de lecture et la position de rptition

    dans le dictionnaire ; l est la longueur de la rptition ; c est le premier caractre du tampon de lecture diffrent du caractre correspon-

    dant dans le tampon de recherche.La rptition peut chevaucher le dictionnaire et le tmapon de lecture, comme onle verra plus loin. Aprs avoir cod la rptition, la fentre glisse de l + 1 carac-tres vers la droite. Le codage du caractre c ayant provoqu cette diffrence estindispensable dans le cas o aucune rptition nest trouve dans le dictionnaire.On crira alors sur la sortie (0, 0, c).Exemple Nous considrons en entre le mage dit abracadabra et dunefentre de taille N = 11 dont le tampon de lecture est de F = 5 caractres. Nousobtenons la suite de triplets engendr par lalgorithme :Chacun des triplets est cod en binaire en associant un nombre fixe de bits pourchacune des valeurs. Choisir la dernire correspondance trouve au lieu de l apre-

    29

    COMPRESSION DE DONNES

    mire simplifie le programme. Il nest ps ncessaire de mmoriser la correspod-nantes prcdente. Cependant, le fait de choisir la premire correpondance, au prixdun accroissement de la complexit du programme , prsente un avanatage. Dansce cas, le dcalage est plus petit. Cela peut sembler inutile car le codage des lexmeest fait de telle sorte que la longueur (10, 3,) et de (5, 3,) est identique (les va-leurs numriques sont crites avec une taille fixe paramtre par la taille du tamponde recherche). Mais si on ajoute un codage de Huffman lissue de LZ77, on attri-buera aux dcalages le splus courts des codes plus courts. Cette mthode propospar B. Herd port ele nom de LZH et repose sur le principe suivant : si on disposedun grand nombre de petits dcalages, on amliore la compression en utilisantLZH.En pratique pour obtenir un codage efficace N F = 2e1 et F = 2e2 . On a doncbesoin de e1 bits pour coder p, la position dans le dictionnaire et de e2 bits pourcoder l, la longueur de rptition.Plus le rpt sera long, plus le codage sera efficace. Pour avoir des chances dob-tenir de longues rptitions, il est ncessaire que le dictionnaire soit de taille suffi-sante (quelques millliers de caractres).Lalgorithme effectue sa compression au fur et mesure du dplacement de lafentre. Il nutilise que le dictionnaire compris dans le tampon de recherche etsertains facteurs vus prcdemment sont de ce fait oublis. Si la fentre est tropgrande, il faudra trop de bits pour coder le triplet de sortie et lalgorithme nef-fectuera pas une bonne compression. De plus, la recherche de motifs deviendra deplus en plus coteuse en temps (de lordre de (N F ) F ) oprations). IL fautdonc trouver un compromis pour obtenir une bonne compression en fonction detous ces paramtres. En pratique, cette mthode fonctionne assez bien pour unetaille de fentre de lordre de N 8192 pour des raisons suiantes : Beaucoup de mots et de fragments de mots sont suffisament courants pour appa-

    ratre souvent dans une fentre. Cest le cas pour . . . sion , . . . que , la . . .

    les mots rares ou techniques ont tendance tre rpts des positions trsproches. Cest par exemple le cas le mot compression .

    Si un caractres ou une suite de caractres sont rpts un certain nombre defois conscutivement, le codage peut tre trs conome parce quil autorise larptition cheaucher les deux tampons.

    1.6.1.2 La dcompression

    Celle-ci est simple et rapide. A partir de la suite de triplets, le dcodage se faiten faisant coulisser la fentre de manire analogue au codage. Le dicitonnaire est

    30

  • l (0, 0, l)

    l e (0, 0, e)

    le m (3, 1,m)

    le m a (0, 0, a)

    le ma g (0, 0, g)

    le mag e d (5, 2, d)

    le mage d i (0, 0, i)

    le m age di t (0, 0, t)

    le ma ge dit a (4, 1, a)

    le mage dit a b (0, 0, b)

    le mage dit ab r (0, 0, r)

    le mage d it abr ac (3, 1, c)

    le mage dit abrac ad (5, 1, d)

    le mage dit a bracad ab (4, 1, b)

    le mage dit abr acadab r (0, 0, r)

    le mage dit abra cadabr a (5, 1, )

    TAB. 1.6 Dcompression par LZ77

    ainsi reconstruit de gauche droite, ce qui permet la reconstruction de la donneede dpart.

    Algorithme 1.9 Algorithme de dcompression pour LZ77lire un lexmechercher la correspondance dans le tampon de rechercheecrire le facteur trouv au dbut du tampon de lectureecrire la troisime composante du lxme la suitedcaler le contenu des tampons de l + 1 cases vers la gauche

    Exemple : On considre le dcodage de la suite de la suite des triplets de lexempleprcdent la fin des tapes 4 de lalgorithe de dcompression. Lentre est :

    (0, 0, l)(0, 0, e)(3, 1m)(0, 0, a)(0, 0, g)(5, 2, d)(0, 0, i)(0, 0, t) . . .

    . . . (4, 1, a)(0, 0, b)(0, 0, r)(3, 1, c)(5, 1, d)(4, 1, b)(0, 0, r)(5, 1, )

    31

    COMPRESSION DE DONNES

    1.6.1.3 Faiblesses de LZ77

    La principale faiblesse rside dans lhypothse que les motifs rpts sont prochesdans les donnes dentre. Les donnes qui ne satisfont pas cette hypothses serontmal comprimes.Un autre inconvnient est que la taille F du tampon de lecture est limite. De cefait, la taille de la plus longue correspondance ne peut excder F 1 F ne peutcrotre beaucoup, car le temps de compression crot proportionnellement F . Il enest de mme avec la taille du tampon de recherche.

    1.6.2 Algorithme de Lempel-Ziv 78

    LZ78 remdie partiellement aux faiblesses de LZ77. Le dictionnaire nest pluscompos dune fentre coulissante mais est constitu de lintgralit du texte djtrait.De manire analogue LZ77, le texte est comprim de la gauche ver sla droite.Au dpart, lalgorithme ne connat aucun facteur (i.e. le dictionnaire est vide) et vammoriser au cours du temps la totalit de facteurs rencontrs dasn le dictionnaireet leur attribuer un numro. Comme pour LZ77, cette mthode va rechercher leplus long facteur inscrit dans le dictionnaire qui concide avec le prfixe p du texterestant traiter. Deux cas peuvent se produire : On ne trouve pas dentre au dictionnaire ; le texte restant triter scrit alors

    comme C.m avec c le caractre inconnu au dictionnaire et m le reste du texte.Lalgorithme renvoie le couple (0, c) et ajoute lentre c au dictionnaire.

    On trouve une entre f dans le dictionnaire la position i > 0 ; le texte restant traiter scrit alors comme f.c..m avec f , le facteur trouv dans le dictionnaire,c le premier caractre qui diffre et m le reste du texte. Lalgorithme renvoie lecouple (i, c) et ajoute lentre (fc) au dictionnaire.

    1.6.2.1 Algorithme de compression

    Une implmentation rapide de cet algorithme donne lieu une complexit quadra-tique sur la longueur du texte comprimer. Cependant, en utilisant des structuresde donnes adquates, ce temps de calcul peut devenir liniare.Exemple : Soit la chane aabbabababbbbabbbabb compresser.Au dpart, le dictionnaire ne comporte aucune entre. Le premier caractre a est unfacteur. On le code (0, a), ce qui signifie le facteur vide suivi du mot a et on lajouteau dictionnaire en position 1. In lit ensuite ab dont la premire lettre correspond

    32

  • Algorithme 1.10 Algorihme de compression LZ78mot := ;dictionnaire[0] := indice := 1repeat

    lire S le premier caractre du texte T restant comprimmer (on retire gale-ment S de T )if mot.S dicitonnaire thenmot := mot.Semis := faux,

    elsemettre(indice de mot dans le dicionnaire, S)affecter(mot, S) lentre indice du dictionnaireindice := indice + 1mot := emis := vrai

    end ifuntil fin du texte compresserif emis = faux then

    metre(indice de mot dans le dictionnaire, S)end if

    Dictionnaire lexme0 null1 a (0, a)2 ab (1, b)3 b (0, b)4 aba (2, a)5 ba (3, a)6 bb (3, b)7 bba (6, a)8 bbb (6, b)9 abb (2, b)

    TAB. 1.7 Compression par lZ78

    33

    COMPRESSION DE DONNES

    lentre 1 du dictionnaire suivi de la lettre b. On code donc le facteur ab par (1, b)et on ajoute ab en position 2 du dictionnaire . . .

    1.6.2.2 Algorithme de dcompression

    La dcompression est simple : il suffit de reconstruire le dictionnaire au fur et mesure du dcodage. Les numros de facteur seront les mmes que pour le codageet les facteurs pourront tre interprts sans problme.

    Algorithme 1.11 Algorihme de dcompression LZ78mot := ;dictionnaire[0] := indice := 1repeat

    lire suivant (ind, S) dans le texte comprimif ind = 0 then

    mettre(S)dictionnaire[indice] := Sindice := indice+ 1

    elsefacteur := concatene(dictionnaire[ind], S)mettre(S)dictionnaire[indice] := facteurindice := indice+ 1

    end ifuntil fin du texte dcompresser

    Une proprit remarquable de cette mthode est que lalgorithme de compression etcelui de dcompression utilisent le mme dictionnaire sans que celui-ci soit trans-mis. Il est entirement reconstruit au cours de la dcompression.Exemple La donnes (0, a)(1, b)(0, b)(2, a)(3, a)(3, b)(6, a)(6, b)(2, b) dcom-presser. Nous obtenons la suite dmissions suivante :

    a ab b aba ba bb bba bbb abb

    1.7 Conclusion

    34

  • CHAPITRE

    2 Compression dimages

    Sommaire2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 362.2 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . 36

    2.2.1 Formats GIF et PNG . . . . . . . . . . . . . . . . . . 362.3 Compression avec perte . . . . . . . . . . . . . . . . . . . . 36

    2.3.1 Dgradation de linformation . . . . . . . . . . . . . . 362.3.2 Transformation des informations audiovisuelles . . . . 372.3.3 Le format JPEG . . . . . . . . . . . . . . . . . . . . . 382.3.4 Le format MPEG . . . . . . . . . . . . . . . . . . . . 40

    2.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    Rsum

    Nous nous intressons au problme de la compression dimages et lestechniques pour rsoudre ce problme.

    35

    COMPRESSION DIMAGES

    2.1 Introduction

    2.2 Codes compresseurs usuels

    2.2.1 Formats GIF et PNG

    Les formats de donnes compacts usuels tiennent compte de la nature des donnes coder. Il sosnt diffrents sil sagit dun son, dune image ou dun texte. Parmiles formats dimages, le format GIF (Graphic Interchange Format) est un formatde fichier graphique bitmap propos par la socit Compuserve. Cest un formatde compression pour des images pixellise, cest--dire dcrite comme une suitede points (pixels) contenus dasn un tableau ; chaque pixel a une valeur qui dcritsa couleur.Le principe de compression est en deux tapes : tout dabord, les couleurs pourles pixels (initialement, il ya 16, 8 millions de couleurs codes sur 24 bits RGB)sont limits une palette de 2 256 couleurs (2, 4, 8, 16, 32,64, 128 ou 256 quiest le dfaut). La couleur de chaque pixel est donc approche par la couleur la plusproche figurant dasn la palette. Tout en gardant un nombre important de couleursdiffrentes avec une palette de 256, ceci permet davoir un facteur trois de com-pression. Puis, la squence de couleurs des pixels est compress par lalgorithmede compression dynamique LZW (Lempel-Ziv-Welch). Il existe deux versions dece format dveloppes respectivement en 1987 et 1989 : GIF 87a permet un affichage progressif (par entrelacement) et la possibilit

    davoir des images anims (les GIFs anims) en stockant plusieurs images ausein du mme fichier.

    GIF 89a permet en plus de dfinir une couleur transparente dans la palette etde prciser le dlai pour les animations.

    Comme lalgorithme de dcompression LZW a t brevet par Unisys, tous lesditeurs de logiciel manipulabt des images GIF auraient pu payer une redevance Unisys. Cest une des raisons pour lesquelles le format PNG est de pus en plusplbiscit, au dtriment du format GIF . Le format PNG format analogue ; maislalgorithme de compression utilis est LZ77.

    2.3 Compression avec perte

    2.3.1 Dgradation de linformation

    La valeur de lentropie est une borne infrieure pour laquelle le taux de compres-sion ne peut descendre au dussous de ce seuil. De plus, les heuristiques de rduc-

    36

  • tion dentropie permettent dabaisser ce sueil en changeant de modle de la source.Cependant aucune de ces mthodes ne prenait en compte le type de fichier cpres-ser et son utilisation. Considrons une image numrique. Les compresseurs sansperte transmettront le fichier sans utiliser linformation quil sagit dune image,et le fichier pourra toujours tre restitu dans son intgralit. Mais il peut existerdes formats beaucoup plus efficaces pour lesquels, si une partie de linformationest perdue, la diffrence ne soit jamais visisble. Les fichiers ne pourront donc paster restitus dans leur tat initial, mais leur tat permettra de visualiser des imagesdauusi bonne qualit. Ce qui veut dire que la qualit qui tait code dans le fichierde dpart tait superflue puisquele ninduit aucune diffrence vsuelle.Les compresseurs avec perte sont donc spcifiques dy type de donnes trans-mettre ou stocker (images, son et vido pour la plupart), et utilisent cette infor-mation en codant le rsultat visuel du fichier plutt que le fichier lui-mme. Ce typede compression est obligatoire pour les formats vido, par exemple o la taille desdonnes et les calculs sont trs importants.Les compresseurs avec perte vont permettre de dpasser le seuil de lentropie etobtenir des taux de compression trs importants. Ils tiennent compte non plus sue-lement delinformation brute, mais aussi de la manire dont elle est peru par destres humains, ce qui ncessite une modlisation de la persistance rtienne ou au-ditive par exemple.On pourra mesurer lefficacit de ce comresseurs avec le taux de compression,mais la qualit des images produites nest value que grce lexprience desutilisateurs. Nous prsentons donc des formats standards, largement prouvs. Enoutre, pour les informations audiovisuelles, un autre critr important viendra segreffer au taux de compression : la rapidit de la dcompression. En particulier pourle son et la vido, la visualisation ncessite des calculs extrment rapides pour lireles fichiers compresss. La complexit algorithmique des dcompresseurs est doncun contrainte aussi importante que la taille des messages comprsss lorsquontriate des informations audiovisuelles.

    2.3.2 Transformation des informations audiovisuelles

    Les formats compacts de stockage dimages, de sons ou de vido utilisent toujoursdes sources tendus. Ils codent non pas pixel par pixel, mais prennent en compteu pixel et son entourage, pour observer des paramtres globaux, comme lappari-tion des ocntours, les rgularits, ou lintensit des variations. Ces donnes seronttraites sous la forme de signaux pseudo-priodiques. Par exemple, si un morceaudune image est un dgrad doux, la frquence du signal sera faible, tandis que lafrquence dune partie dont les couleurs, les textures varient beaucoup sera lve.

    37

    COMPRESSION DIMAGES

    Cela permettra un codage trs efficace des zones de base frquence sera souventinvisible ou inaudible, donc parfaitement acceptable.

    2.3.3 Le format JPEG

    Le codage au format JPEG (pour Joint Photographic Group) compresse des imagesfixes avec perte dinformation. Lalgorihtme de codage est complexe, et se drouleen plusieus tapes. Le principe de base est que les couleurs des pixels voisins dansune image diffrent peu en gnral. De plus, une image est un signal : plutt quedes valeurs des pixels, on alcule des frquences (transforme de Fourier DFT outransforme en cosinus dicrte DCT dans le cas JPEG). En effet, on peut consi-drer quune image est une matrice de couleurs des pixels ; et il se trouve que lesimages numriques sont principalement composes de basses frquences DDCTquand on regarde la luminance des couleurs (dans le codage dune image en modeluminance/Chrominance, YUV par exemple) plutt qune mode RGB. Il existeplusieurs formules pour passer du mode RGB au mode YUV selon les modlesphsiques de la lunire. Une formule classique pour toruver la luminance est celleci : Y = 0, 299 R+ 0, 587 G+ 0, 114 BLide est donc dappliquer la DCT va transformer cette matrice en une matricecontenant les hautes frquences en haut droite et les basses frquences en bas gauche.Considrons la matrice suivante donnant la luminance :

    L =

    76 76 76 255 255 255 255 255255 76 255 255 255 255 255 255255 76 255 150 150 255 255 255255 76 255 150 255 150 255 255255 255 255 150 255 150 29 29255 255 255 150 255 150 29 255255 255 255 255 255 255 29 255255 255 255 255 255 255 29 29

    D =

    1631 71 83 49 94 36 201 326 348 49 2 26 185 60 8639 81 123 27 28 0 43 13049 3 10 25 19 126 33 92101 43 111 55 4 3 120 5025 166 62 50 50 2 9 764 34 54 11 69 0 26 5448 73 48 28 27 33 23 29

    38

  • Enfin, loeil humain donne plus dimportance la luminosit quaux couleurs. Enne gardant que les premiers termes de la dcompression en luminance DCT (lesplus importants), on perd un peu dinformation mais limage reste visible. Cetteopration est appele quantification et cest la seule tape de tout codage JPEG quisoit avec perte dinformation. Lopration consiste arondir la valeur C(i, j) =DCT (i,j)Q(i,j) o Q est une matrice de quantification

    Q =

    16 11 10 16 24 40 51 6112 12 14 19 26 58 60 5514 13 16 24 40 57 69 5614 17 22 29 51 87 80 6218 22 37 56 68 150 29 7724 35 55 64 81 150 29 9249 64 78 87 103 121 120 10172 92 95 98 112 100 103 99

    C =

    102 6 8 3 4 1 41 11 29 4 0 1 3 1 23 6 8 1 1 0 1 24 0 0 1 0 1 0 16 2 3 1 0 0 1 11 5 1 1 1 0 0 01 1 1 0 1 0 0 11 1 1 0 0 0 0 0

    On peut remarquer sur lexemple, quaprs quantification, beaucoup de valeurssont identiques et proches de zro. Le choix de la matrice de quantification res-pectivement avec des valeurs proches de 1 ou loin de 1 permet daugmenter oudiminuer le niveau de dtails. Limage est finalement code comme une suite denombres (une valeur quantifie de DCT suivie du nombre de pixels ayant cette va-leur qui sont conscutifs selon le balayage en zigzag (voir figure 2.1). Les faiblesvaleurs obtenues permettent desprer que lentropie obtenue aprs ce RLE a tconsidrablement rduite. Lalgorithme JPEG se termine alors par un codage sta-tistique par exemple Huffman. Enfin, il est noter que le standard JPEG-2000 o latransformation en cosinus et la quantification sont remplaces par une transformeen ondelettes dasn laquelle ne sont conservs que certains niveaux. Le nombre deniveaux ou bandes conservs influe directement sur la taux de compression dsir.

    39

    COMPRESSION DIMAGES

    FIG. 2.1 Balayage en zigzag de JPEG

    Image Blocs8 8

    DCT Quantification RLEzigzagHuffmanou Arith.

    FIG. 2.2 Compression JPEG

    2.3.4 Le format MPEG

    Le format MPEG (pour Motion Picture Experts Group) dfinit la compressiondimages animes. Lalgorithme de codage utilise JPEG pour coder une image maisprend en compte le fait que deux images conscutives une squence vido sont trsvoisines. Une des particularits de snormes MPEG est de chercher compenser lemouvemet (zoom par exemple . . .) dune image la suivante. Une sortie MPEG-1contient quatre sortes dimages : des images au format I (JPEG), des images Pcodes par diffrences avec limage prcdente (par compensation du mouvementdeux images conscutives sont trs voisines), des images bidirectionnelles B co-des par diffrence avec limage prcdente et la suivante (en cas de diffrencesmoins importantes avec une image future quavec une image prcdente), enfindes images basse rsolution utilises pour lavance rapide sur un magntoscope.

    40

  • En pratique, avec les images P et B, il suffit dune nouvelle image complte Itoutes les 10 15 images. Un film vido tant compos dimages et de son, il fautgalement compresser le son. Le groupe MPEG a dfini trois formats : les MPEG-1 Audio Layer I , II et III , le troisime est le fameux MP3. Le MPEG-1 est lacombinaison de compressions dimages et de son, associes une synchronisationpar marquage temporel et une horloge de rfrence du systmes comme indiqusur la figure 2.3

    u

    Signal Audio

    Signal vido

    Horloge Multiplexage

    Codeur audio

    Codeur vido

    MPEG-1

    FIG. 2.3 Compression MPEG-1

    Depuis 1992, le format MPEG a volu passant de MPEG-1 (320 240 pixelset une dbit de 1, 5MBits/s), MPEG-2 en 1996 (avec quatre rsolutions de352288 19201152 pixels plus un flux de sous-titres et de langues multiplexs,celui-ci est lactuel format des DVD) ou encore MPEG-4 en 1999 (format desvidos confrences et du DivX o la vido est devenue une scne oriente objet).Enfin le son est dcompos en trois couches, MP1, MP2 et MP3, suivant les tauxde compression (et donc les pertes) dsirs. En pratique, les taux de compressionpar rapport lanlogique sont dun facteur 4 pour le MP1, de 6 8 pour le MP2,utilis par exemple dasn les vidos CD et de 10 12 pour le MP3. Nous donnonsune ide de la transformation MP3 sur la figure 2.4 : le son analogique est dabordfiltr et modifi par les transformes de Fourier (avec perte) et simultanment encosinus (DCT).

    41

    COMPRESSION DIMAGES

    QuantificationsonDCTFiltrage

    non uniformenon audible

    FFTModlepsycho-acoustique

    Huffman

    Infosuppl

    Form

    atage

    controle

    controle

    taux

    distorsion

    FIG. 2.4 Compression du son MP3

    Ensuite, la combinaison de ces deux transformations permet de faire une quanti-fication et de contrler le rsultat obtenu pour ne conserver que la partie aidibleprincipale. Au final, une compression statistique est bien sr applique, pour r-duire le fichier au niveau de son entropie finale.

    2.4 Conclusion

    Ce chapitre cls la partie sur la compression de donnes.

    42

  • CHAPITRE

    3 Compression du son

    Sommaire3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    Rsum

    Nous nous intressons au problme de la compression du son et lestechniques pour rsoudre ce problme.

    43

    COMPRESSION DU SON

    3.1 Introduction

    3.2 Conclusion

    44