You are on page 1of 26

Cours Compression

Master M2 Anne 2009-2010


Version 0.0
Universit de Montpellier
Place Eugne Bataillon
34095 Montpellier Cedex 5
RODOLPHE GIROUDEAU
161, RUE ADA
34392 MONTPELLIER CEDEX 5
MAIL : {rgirou}@LIRMM.FR
Table des matires
1 Compression de donnes 1
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Thorie de linformation . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Longueur moyenne dun code . . . . . . . . . . . . . . . 2
1.2.2 Lentropie comme mesure de la quantit dinformation . . 2
1.2.3 Thorme de Shannon . . . . . . . . . . . . . . . . . . . 3
1.3 Prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Dcoder sans ambigut . . . . . . . . . . . . . . . . . . 4
1.3.2 Prxe et proprits . . . . . . . . . . . . . . . . . . . . 5
1.3.3 Thormes de Kraft et McMillan . . . . . . . . . . . . . . 7
1.4 Codage statique . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.1 Algorithme de Huffman . . . . . . . . . . . . . . . . . . 11
1.4.2 Codage Arithmtique . . . . . . . . . . . . . . . . . . . . 15
1.4.3 Codes adaptatifs . . . . . . . . . . . . . . . . . . . . . . 15
1.5 Heurisitques de rduction dentropie . . . . . . . . . . . . . . . . 23
1.5.1 Run Length Encoding : RLE . . . . . . . . . . . . . . . . 23
1.5.2 Move-to-Front . . . . . . . . . . . . . . . . . . . . . . . 24
1.5.3 BWT : Transformation de Burrows-Wheeler . . . . . . . 25
1.6 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . . . . 27
1.6.1 Algorithme de Lempel-Ziv 77 . . . . . . . . . . . . . . . 27
1.6.2 Algorithme de Lempel-Ziv 78 . . . . . . . . . . . . . . . 32
1.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2 Compression dimages 35
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . . . . 36
2.2.1 Formats GIF et PNG . . . . . . . . . . . . . . . . . . . . 36
2.3 Compression avec perte . . . . . . . . . . . . . . . . . . . . . . . 36
2.3.1 Dgradation de linformation . . . . . . . . . . . . . . . . 36
i
TABLE DES MATIRES
2.3.2 Transformation des informations audiovisuelles . . . . . . 37
2.3.3 Le format JPEG . . . . . . . . . . . . . . . . . . . . . . . 38
2.3.4 Le format MPEG . . . . . . . . . . . . . . . . . . . . . . 40
2.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3 Compression du son 43
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
ii
Table des gures
1.1 Arbre dgnr . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Compltion de larbre . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 Exemple de cosntruction dun code de Huffman . . . . . . . . . . 12
1.4 Exemple dordre de Gallager sur un arbre . . . . . . . . . . . . . 17
1.5 Illustration de la mise jour de larbre . . . . . . . . . . . . . . . 20
1.6 Illustration de lajout dune feuille de caractre x . . . . . . . . . 21
2.1 Balayage en zigzag de JPEG . . . . . . . . . . . . . . . . . . . . 40
2.2 Compression JPEG . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Compression MPEG-1 . . . . . . . . . . . . . . . . . . . . . . . 41
2.4 Compression du son MP3 . . . . . . . . . . . . . . . . . . . . . . 42
iii
TABLE DES MATIRES
iv
Liste des Algorithmes
1.1 Description de lalgorithe de Huffman . . . . . . . . . . . . . . . 11
1.2 Algorihtme de compression Huffman dynamique . . . . . . . . . 16
1.3 Mise jour (x, T) . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4 Ajout dune feuille (x, T) . . . . . . . . . . . . . . . . . . . . . 21
1.5 Algorihtme de dcompression pour Huffman dynamique . . . . . 22
1.6 Mthode RLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.7 Rciproque de la BWT . . . . . . . . . . . . . . . . . . . . . . . 26
1.8 Algorithme de compression pour LZ77 . . . . . . . . . . . . . . . 28
1.9 Algorithme de dcompression pour LZ77 . . . . . . . . . . . . . 31
1.10 Algorihme de compression LZ78 . . . . . . . . . . . . . . . . . . 33
1.11 Algorihme de dcompression LZ78 . . . . . . . . . . . . . . . . 34
v
TABLE DES MATIRES
vi
CHAPITRE
1
Compression de don-
nes
Sommaire
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Thorie de linformation . . . . . . . . . . . . . . . . . . . 2
1.2.1 Longueur moyenne dun code . . . . . . . . . . . . . 2
1.2.2 Lentropie comme mesure de la quantit dinformation 2
1.2.3 Thorme de Shannon . . . . . . . . . . . . . . . . . 3
1.3 Prliminaires . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.1 Dcoder sans ambigut . . . . . . . . . . . . . . . . 4
1.3.2 Prxe et proprits . . . . . . . . . . . . . . . . . . 5
1.3.3 Thormes de Kraft et McMillan . . . . . . . . . . . . 7
1.4 Codage statique . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.1 Algorithme de Huffman . . . . . . . . . . . . . . . . 11
1.4.2 Codage Arithmtique . . . . . . . . . . . . . . . . . . 15
1.4.3 Codes adaptatifs . . . . . . . . . . . . . . . . . . . . 15
1.5 Heurisitques de rduction dentropie . . . . . . . . . . . . 23
1.5.1 Run Length Encoding : RLE . . . . . . . . . . . . . . 23
1.5.2 Move-to-Front . . . . . . . . . . . . . . . . . . . . . 24
1.5.3 BWT : Transformation de Burrows-Wheeler . . . . . 25
1.6 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . 27
1.6.1 Algorithme de Lempel-Ziv 77 . . . . . . . . . . . . . 27
1.6.2 Algorithme de Lempel-Ziv 78 . . . . . . . . . . . . . 32
1.7 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Rsum
Nous nous intressons au problme de la compression de donnes et
des 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 messages
qui coderont une source. On rappelle quune source dinformation est constitue
dun alphabet S et sune distribution de probabilits P sur S. Pour un symbole
si 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 de
codage est f (C est limage de S par f). La longueur moyenne du code C est :
l(C) =
n

i=1
l(f(si))P(si)
Exemple
S = {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 une
source S = (S, P). Nous ne connaissons de cette source quune distribution de
probabilit, 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) =
n

i=1
pi log
2
(
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 jet
si le d est normal que si le d est biais. Ce qui se traduit par : pour tous les
p1, . . . , pn, H(p1, . . . , pn) H(1/N, . . . , 1/n) = log
2
n.
2
1.2.3 Thorme de Shannon
Ce thorme fondamental de la thorie de linformation est connu sous le nom de
thorme 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 S
k
sur un alphabet de taille q, de longueur moyenne l,
vrie :
l
H
log
2
q
De plus, il existe un code uniquement dchiffrable de S
k
sur un alphabet de taille
q, de longueur moyenne lk, qui vrie :
l <
H
log
2
q
+ 1
On en dduit pour la k
ieme
extnesion de S.
Thorme 1.2.2 Soit une source S sans mmoire dentropie H. Tout code uni-
quement dchiffrables de S
k
sur un alphabet de taille q, de longueur moyenne lk,
vrie :
lk
k

H
log
2
q
De plus, il existe un code uniquement dchiffrable de S
k
sur un alphabet de taille
q, de longueur moyenne lk, qui vrie :
lk
k
<
H
log
2
q
+
1
k
Preuve
Sachant que H(S
k
) = k H(S).
Pour une source stationnaire quelconque, le thorme peut snoncer :
Thorme 1.2.3 Pour toute source stationnaire dentropie H, il existe un procd
de codage uniquement dchiffrable sur un alphabet de taille q, et de longueur
moyenne l, aussi proch que lin veut de sa borne infrieure H/ log
2
(q).
3
COMPRESSION DE DONNES
En thorie, il est donc possible de trouver un code sapprochant indnement de
lentropie. En pratique pourtant, si le procd de codage consiste coder des mots
dun extension de la source, on est limit videmment par le nombre de ces mots
(|S
k
| = |S|
k
), ce qui peut reprsenter un trs grand nombre de mots).
1.3 Prliminaires
1.3.1 Dcoder sans ambigut
La premire des qualit que doit avoir un code est de pouvoir tre dcod. Cest
une vidence, mais par forcment un problme triviale. Supposons que le code
est une fonction bijective, qui transforme le message compos par lmetteur en
message qui est transmis par le canal. Pour un message source a1 . . . an, chane
surn un alphabet source quelconque, et pour un alphabet de code V , appelons f la
fonction de codage. On a laors le message cod c1 . . . cn = f(a1) . . . f(an), avec
ci V
+
, i. Le code, en tant quensemble des mots de codes, est alors limage
de la fonction de codage f. Le fait que f soit bijective ne suft cependant pas
pour que le message puisse tre dcod sans ambigut par le rcepteur. Prenons
lexemple du codage des lettres de lalphabet S = {A, . . . , Z} par les entiers C =
{0, . . . , 25} crits en base 10.
f(A) = 0, f(B) = 1, . . . , f(J) = 9, f(K) = 10, f(L) = 11, . . . , f(Z) = 25
Le mot de code 1209 peut alors correspondre diffrents messages : par exemple,
BUJ ou MAJ ou BCAJ.
Il est donc fondamental dajouter des contraintes sur le code pour quun message
quelconque puisse tre dchiffr sans ambigut. Un code C sur un alphabet V est
dit non ambigu (on dit parfois uniquement dchiffrable ), si x = x1 . . . xn V
+
,
il existe au plus une squence c = c1 . . . cm C
+
telle que
c1 . . . cm = x1 . . . xn
Thorme 1.3.1 Un code C sur un alphabet V est non ambigu si et seulement si
pour toutes squences c = c1 . . . cn et d = d1 . . . dm de C
+
.
c = d (n = m et ci = di, i = 1 . . . n
Exemple : Sur lalphabet V = {0, 1}
le code C = {0, 01, 001} nest pas uniquement dchiffrable.
4
le code C = {01, 10} est uniquement dchiffrable.
le code C = {0, 10, 110} est uniquement dchiffrable.
La contrainte de dchiffrabilit implique une longueur minimale aux mots de code
.Le thorme de Kraft donne une condition ncessaire et sufsante sur la ongueur
des mots de code pour assurer lexsitence dun code uniquement dchiffrable.
1.3.2 Prxe et proprits
Dnition 1.3.1 On dit quun code code C sur un alphabet V a la proprit du
prxe (on dit aussi instantan, ou irrductible) si et seulement si pour tout couple
de mots distincts (c1, c2), c2 nest pas un prxe de c1.
Exemple : a = 1011000, b = 01 et c = 1010, b nest pas un prxe de a mais c
est un prxe de a.
En utilisant la prorit du prxe, nous pouvons dchiffrer les mots dun tel code
ds la n de la rception du mot (instantanit), ce qui nest toujours possible pour
des codes uniquement dchiffrables : par exemple, si V = 0, 01, 11 et si on reoit
le message m = 0011111111 . . . il faut attendre loccurrence suivante dun 0 pour
pouvoir dchiffrer le second mot 0 ou 01 ?).
Thorme 1.3.2 Tout code possdant la proprit du prxe est uniquement d-
chiffrable.
Preuve
Soit un code C sur V qui nest pas uniquement dchiffrable. Alors il existe une
chane a V
n
telle que a = c1 . . . cl = d1 . . . dk, les ci et di tant des mots de C
et ci = di pour au moins un i. Choississons le plus petit i tel que ci = di (our tout
j < i, cj = dj). Alors l(ci) = l(di), sinon vu le choix de i, on aurait ci = di, ce
qui est en contradiction avec la dnition de i. Si l(ci) < l(di), ci est un prxe
de di et dasn le cas contriare di est un prxe de ci. C n donc pas la proprit du
prxe.

La rciproque est fausse : le code C = {0, 01} est uniquement dchiffrabe, mais
en possde pas la proprit du prxe. Le thorme suivant est vident, mais assure
la la dchiffrabilit dune catgorie de code trs usit.
Thorme 1.3.3 Tout code dont les mots sont de mme longueur possde la pro-
prit du prxe.
Larbre de huffmn est un objet permettant de reprsenter facilement tous les codes
5
COMPRESSION DE DONNES
qui ont la proprit du prxe, et cette reprsentation facilite grandement leur ma-
nipulation.
Dnition 1.3.2 On appelle arbre de Huffman un arbre binaire (il peut tre faci-
lement tendu un arbre q-naire) tel que tout sous-arbre a soit 0 soit 2 ls (il est
localement complet). Dans ce dernier cas, on assigne le symbole 1 larte reliant
la racine locale au ls gauche et 0 au ls droit. A chaque feuille dun arbre de Huff-
man, on peut associer un mot de {0, 1}
+
, cest la hane des symboles marquant les
artes dun chemin depuis la racine jusqu la feuille. Le maximum sur lensemble
des longueurs des mots dun arbre de Huffman est appel hauteur de cet arbre.
On appelle code de Huffman lensemble des mots correspondant aux chemins dun
arbre de Huffman ; la hauteur de cet arbre est appele aussi hauteur du code C.
Lintroduction des arbres de Huffman est justie par les deux thormes suivants,
qui assurent que tous les codes instantans pourront tre manipuls avec de tels
arbres.
Thorme 1.3.4 Un code de Huffman possde la proprit du prxe.
Preuve Si un mot de code c1 est un prxe de c2, alors le chemin reprsentant c1
dans larbre de Huffman est inclus dasn le chemin reprsentant c2. Comme c1 et
c2 sont, par dnition associs des feuilles de larbre c1 = c2. Il nexiste donc
pas deux mots diffrents dont lun est le prxe de lautre, et le code de Huffman
admet le proprit du prxe.
Thorme 1.3.5 Tout code qui possde la proprit du prxe est contenu dans un
code de Huffman.
Preuve Soit un arbre de Huffman complet (toutes les feuilles sont distance
constante de la racine) de hauteur l, la longueur du plus long mot de C. Chaque mot
ci de C est associ un chemin depuis la racine jusqu un noeud. On peut laguer
le sous-arbre dont ce nieud est racine (tous les mots pouvant tre reprsents dans
les noeuds de ce sous-arbre ont ci pour prxe). Tous les mots de C sont toujours
dans les noeuds de larbre rsultant. On peut effectuer la mme opration pour tous
les mots. On a nalement un arbre de Huffman contenant tous les mots de C.
Lemme 1.3.1 Un code est prxe si et seulement si les feuilles de son arbre
1
sont
exactement ses mots de code.
1
Les codes peuvent tres reprsents par des arbres tel que :
chaque branche a pour attribut un des symboles binaires 0 ou 1,
deux branches partant du mme noeud ont des attributs diffrents,
6
Preuve Dire quun mot de code est une feuille est quivalent dire quil nest pas
le prxe dun autre mot de code
1.3.3 Thormes de Kraft et McMillan
Il existe des conditions ncessaires et sufsantes pour lexistence de codes pr-
xes et dchiffrables. Pour les codes prxes, il sagit dune proprit classique
des arbres (ingalit de Kraft). Le rsultat reste vrai pour un code dchiffrable
(Thorme de McMillan).
Thorme 1.3.6 Soit un abre binaire dont les K feuilles ont pour ordre
n1, . . . , nK (lordre dun noeud oiu dune feuille correpsond au nombre de
branches le sparant de la racine). Alors,
K

k=1
2
nk
1
Preuve
Nous dnissons le poids de chaque noeud de larbre de la faon suivante :
le poids dune feuille dordre i est gale 2
i
,
le poids dun noeud qui nest pas une feuille est la somme des poids de ses ls.
1. Le poids dun noeud dordre i est infrieur ou gal 2
i
. Sinon, lun de ses
ls (dordre i + 1) aurait un poids > 2
(i+1)
, et par rcurrence, il existerait
au moins une feuille de poids > 2
h
, o h est lordre de cette feuille. Ceci
serait contradictoire avec la dnition 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 nous
donne ligalit. recherche.
Lemme 1.3.2 Soit un arbre binaire dont les K feuilles ont pour ordre n1, . . . , nK
avec m = max(n1, . . . , nK). Alors
(1
K

k=1
2
nk
> 0) (1
K

k=1
2
nk
2
m
)
chaque noeuda pour attribut la concatenation des attributs des branches reliant la racine ce
noeud.
7
COMPRESSION DE DONNES
Preuve En reprenant les notations de lnonc
(1
K

k=1
2
nk
> 0) (2
m

k=1
2
mnk
> 0)
Puisque k, m nk, le terme de gauche de lingalit de droite est entier, donc
(1
K

k=1
2
nk
> 0) (2
m

k=1
2
mnk
1) (1
K

k=1
2
nk
2
m
).

Thorme 1.3.7 Ingalit de Kraft Il existe un code prxe de K mots de lon-


gueurs n1, . . . nK si et seulement si lingalit
K

k=1
2
nk
1
est satisfaite
Preuve
1. Soit un code prxe de K mots de longueur n1, . . . nK , les mots de ce code
sont exactement les feuilles de son arbre. Dautre part, la longueur dun mot
est exactement gale lordre du noeud le reprsentant dans larbre. Donc
en utilisant le Lemme 1.3.1, nous obtenons bein lingalit.
2. Soient des entiers 1 n1 . . . nK1 nK vriant lingalit , montrons
par rcurrence sur K quil existe un arbre binaire dont les K feuilles ont
pour ordre n1, . . . , nK.
(a) Si K = 1, larbre dgnr donn la gure 1.1 de profondeur n1
convient
0 1 n1 1 n1
. . .
FIG. 1.1 Arbre dgnr
8
(b) En enlevant la dernire longueur nK, nous avons
K1

k=1
2
nk
< 1
donc daprs le Lemme 1.3.2,
K1

k=1
2
nk
+ 2
nK1
=
K2

k=1
2
nk
+ 2
1nK1
1
On en dduit par hypothse de rcurrence, quil existe un arbre dont les
feuilles ont pour profondeurs n1, . . . , nK2, nK1 1. Nous dotons la
feuille profondeur nK1 1 de deux ls pour obtenir un arbre K
de profondeur n1, . . . , nK2, nK1, nK. Si nK > nK1, il suft de
rallonger lun des ls. Daprs le Lemme 1.3.1
nK1
nK1 1
nK
. . .
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 longuers
n1, . . . , nK sis et suelemnt si lingalit
K

k=1
2
nk
1
est satisfaite.
Preuve
1. Si lingalit est satiasfaite alors il existe un code prxe donc un code d-
chiffrable avec les bonnes longueurs.
9
COMPRESSION DE DONNES
2. Rciproquement, soit V avec |V | = K, soit un code dchiffrable de
V 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)|
=
mL

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

x
2
|(x)|
(mL)
1/L
Do lingalit recherche quand L tend vers linni.

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 de
codes vrent lingalit, mais ne prtendent pas que tout code dont les longueurs
vrient lingalit est prxe (ou dchiffrable).
Corollaire 1.3.1 Sil existe un code uniquement dchiffrable, dont les mots sont de
longueur l1, . . . , ln, alors il existe un code instantan de mmes longueurs de mots.
Cest une consquence des thormes de Kraft et McMillan. Les codes dchiffrable
qui ne possdent pas la proprit du prxe ne produisent pas de code aux mots
plus courts que le scodes instantans, auxquels on peut donc se restreindre pour la
compression dinformation (leurs proprits les rendent plus maniables).
Dnition 1.3.3 Un code est dit complet sil vrie la relation

x
2
|(x)|
= 1
10
Exemple
Code A Code B code C
s1 00 0 0
s2 01 100 10
s3 10 110 110
s4 11 111 11

4
i=1
2
ni
1 7/8 9/8
Les codes A et B sont dhiffrables, le premier tant complet. Le code C nest pas
dchiffrable.
1.4 Codage statique
Les codages statisitques utilisent la frquence de chaque caractre de la source
pour la compression, et en codant les caractres le splus frquents par des mots
plus 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 sans
mmoire S = (S, P). Lalphabet de codage est V , de taille q. Il est ncessaire
loptimalit du rsultat de vrier que q 1||S| 1 (an dobtenir un arbre
localement 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 de
codes associs (les plus longs) ne seront pas utiliss.
Algorithme 1.1 Description de lalgorithe de Huffman
On construit avec lalphabet source S un ensemble de noued isol auxquel on
associe les probabilits de P. Soient pi1
, . . . , piq
les q symboles de plus faibles
probabilits. On construit un arbre dont la racine est un nouveau noeud et auquel
on associe la probabilit pi1
+. . . +piq
, et dont les branches sont incidentes aux
noeuds pi1
, . . . , piq
.
On recommence ensuite ave les q plus petites valeurs parmi les noeuds du plus
haut niveau (les racines), jusqu nobtenir quun arbre ( chaque itration, il y a
q 1 lments en moins parmi les noeuds de plus haut niveau), dont les mots de
S sont ls feuilles, et dont les mots de code associs dans le schma ainsi construit
sont les mots correspondant aux chemins de la racine aux feilles.
Les tapes successives de lalgorithme sotn dcrites par la gure 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 nal
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
0
0
0
1
1
1
1
1
FIG. 1.3 Exemple de cosntruction dun code de Huffman
12
Symbole Probabilit
a 0, 35
b 0, 1
c 0, 19
d 0, 25
e 0, 06
f 0, 05
TAB. 1.1 Rsultat
Symbole Mot de code
a 11
b 010
c 00
d 10
e 0111
f 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 tous
les codes instantans de S sur V .
Preuve
Prenons q = 2. Nos avons quun code instantat peut tre reprsent par un arbre
de Huffman. Soit A larbre reprsentant un code optimal, et H larbre reprsentant
le code issu de lalgorithme de Huffman.
Remarquons que dans A, il nxiste pas de noeud avec un seul ls dont les feuilles
contiennent des mots du code (en effet, on remplace un tel noeud par son ls et on
obtient un meilleu code).
Remarquons maintenant que dans A, si pour des mots c1 et c2 les probabilits
dapparitions respectives p1 et p2 satisfont p1 < p2, alors le sheuteurs respectives
des feuilles reprsentant c1 et c2 : l1 et l2 satisfont l1 l2 (en efet, dans le cas
contraire, on remplace c1 par c2 dans larbre et on obtient un code meilleur). On
peut donc supposer que A reprsente un code optimal pour lequel les deux mots de
plus faibles probabilits sont deux feuilles frres (admettnt le mme pre).
On raisonne maintenant par rcurrence sur le nombre de feuilles n dans A. Pour
n = 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 dnit
alors 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

, donc
de longueur moyenne infrieure A

= A\{c1, c2}. Donc, et daprs les premires


remarques, la longueur moyenne de H est infrieure la longueur moyenne de A.

Le thorme prcdent indique que lalgorithme de Huffman nest pas le meilleur


pour coder une information dasn tous les cas : mais en xant pour modle une
source S sans mmoire sur un alphabet V , il ny a pas de code plus efcace qui a
la proprit du prxe.
On peut obtenir des codes plus efcace partir des extensions de la source, comme
on peut le voir sur lexemple suivant :
Soit S = (S, P), S = (s1, s2), P = (1/4, 3/4). Un codage de Huffman pour S
donne videmment s1 0 et s2 1, et sa longueur moyenne est 1.
Un codage de Huffman pour S
2
= (S
2
, 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 avec
le code de S (les mots de S
2
sont de longueur 2), l = 1, 6875/2 = 0, 84375 ce
qui meilleur que le code sur la source originelle. Nous pouvons encore amliorer
ce codag en examinant la source S
3
. Il est aussi possible dafner le codage par
une meilleur modlisation de la source : souvent, loccurence dun symbole nest
pas indpendante des symboles prcdemment mis par une source (dans le cas dun
texte, par exemple). Dans ce cas, les probabilits doccurrence sotn conditionnelles
et il existe des modles (lemodle de Markov, en particulier) qui permettent un
meilleur codage. Mais ces procds ne conduisnet pas des amliorations innies.
Lnetropie reste un seuil popur la longueur moyenne, en-de duquel on en peut
pas 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 ot la vole en
faisant une seule lecture de lentre ; la diffrence de lalgorithme statique dHuff-
man, il vite de faire deux parcours dun chier dentre (un pour le calcul des
frquences, lautre pour le codage). La table des frquences est labore au fur et
mesure de la lecture du chier ; ainsi larbre de Huffman est modi chaque fois
quon 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 coder
un chier de symboles binaires lus la vole par blocs de k bits (k est souvent un
paramtre) : on appelle donc caractre un tel bloc. A linitialisation, on dnit
un caractre symbolique (not @ par exemple) et cod intialement par un symbole
prdni (par exemple comme un 257 me caractre virtuel di code ASCII). lors du
codage, 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. Le
nouveau caractre est alors entr dasn larbre de Huffman. Pour construire larbre
de 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 nouvelle
lecture, la frquence de chaque caractre depuis le dbut du chier jusquau carac-
tre courant ; les frquences sont donc caclules dynamiquement. Aprs avoir crit
un code (soit celui de @, soit celui dun caractre dj rencontr, soit les k bits non
compresss dun nouveau caractre), on incrmente de un le nombre doccurrences
du caractre crit. En prenant en compte les modications de frquence, on met
jour larbre de Huffman chaque itration.
Larbre existe donc pour la compression (et la dcompression) mais na pas besoin
dtre envoy au dcodeur. Enn, il ya plusieurs choix pour le nombre doccur-
rences de @; dans lalgorithme 1.4.3.2 cest le nombre de caractres distincts (cela
permet davoir peu de bits pour @ au dbut), il est aussi possible de lui attribuer
par exemple une valeur cosntante trs proche de zro (dans ce cas le nombre de
bits pour @ volue comme la profondeur de larbre de Huffman, en laissant aux
caractres trs frquents les codes les plus courts).
15
COMPRESSION DE DONNES
Algorithme 1.2 Algorihtme de compression Huffman dynamique
Soit nb(c), le nobre doccurrence dun caractre c
Initialiser larbre de Huffman (AH) avec le caractre @
while on nest pas la n de la source do
Lire le caractre c de la source
if cest la premire occurrence de c then
nb(c) := 0
nb(@) := nb(@) + 1
Afcher en sortie le code de @ dans AH suivi de c
else
Afcher le code de c dans AH
end if
nb(c) := nb(c) + 1
Mettre jour AH avec les nouvelles frquences
end while
1.4.3.3 Mise en oeuvre de lalgorithme de Huffman adaptatif
Nous identions un code prxe dune source discrte X un arbre binaire |X|
feuilles tiquetes par les lettres de X. Le code est dit complet si chaque noeuds
possde 0 ou 2 ls.
Dnition 1.4.1 Soit T un code prxe dune source discrte X, le poids relative-
ment (T, X) est dni 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 ls
Dnition 1.4.2 Un arbre de Huffman de X est un code prxe de X qui peit tre
obtenu par lalgorithme de Huffman
Dnition 1.4.3 Sout T un code prxe complet dune source discrte X de car-
dinal K. Un ordre de Gallager sur T relativement X est un ordre u1, . . . , u2K1
sur le snoeuds de T vriant
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 prxe T (i.e. un arbre) dune source X est
un arbre de Huffman de X si et seulement si il existe un ordre de Gallager sur T
relativement 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 les
deux feuilles pour obtenir un arbre avec une feuille de moins, soit 2(m1)1 =
2m3 noeuds. Larbre obtenu est un arbre de Huffman, qui admet un ordre de
Gallager (induction) u

1
. . . u

2m3
. Et le noeud fusionn est quelque part
dasn la liste. On prend ses deux ls, et on les mets la n, ce qui donne un ordre
de Gallager. u

1
. . . u

2m3
u2m2 u2m1.
Rciproquement, supposons que T admette u ordre de Gallager. Les noeuds sont
ordonns 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. Cest


donc u arbre de Huffman (induction). Par lalgorithme de Huffman, larbre
u1, . . . , u2m2 est de Huffman.

3
3
5
5
5 6
ri dans
a
b
c
d
e
f
32
11
11 21
10
1
2
3
4 5
6
7
8
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 de
Huffman adaptatif sur ce texte. Nous notons Xn la source obtenue aprs lecture de
la 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 dni-
tions (en particulier pour un ordre de Gallager), nous pourrons utiliser pour le poids
le nombre doccurrence de chaque lettre (la lettre vide a un nombre doccurrences
gal 0). Notons que dans ce cas, le poids est entier et que le poids de la racine
de Tn est n. Soit x la n + 1)-me lettre du texte. Soit u1, . . . , u2K1 est la feuille
vide.
Lemme 1.4.1 Si x Xn et si tous les noeuds uii
, ui2
, . . . , uil
du chemin entre x
et la racine de Tn sont les premiers de leur poids dans lordre de Gallager sur Tn
relativement Xn, alors Tn est un arbre de Huffman de Xn+1, et u1, . . . , u2K1
est un ordre de Gallager relativmeent Xn+1.
Preuve Si lon pose Tn+1 = Tn, le poids des noeuds reste inchang, sauf pour les
sommets uii
, ui2
, . . . , uil
du chemin de x la racine. Chacun de ces noeuds tant le
premier de son poids dans un ordre de Gallager sur Tn relativement Xn, lordre
reste dcroissant aprs lincrmentation des poids. LA condition sur les frres est
toujours vrie, car ni larbre ni lordre nont chang, et nous obtenons bien un
ordre de Gallager de Tn+1 relativement Xn+1.
Le cas ci-dessus est idal et nest pas vri en gnral. Toutefois, quite faire
quelques 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 entiers
Initialement, 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 dni par les champs pere est un code prxe de Xn+1. Les poids
sont relatifs (Tn+1, Xn+1) ( un coefcient multiplicatif prs), et les champs
ordre 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 n de
lexcution, les champs pere dnissent 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 x
while u = nil do
u := min(v|v.poids = U.poids) ; le noeud de plus petit ordre ayant le poids
de u
echanger(u.pere, u.pere)
echanger(u.ordre, u.ordre)
u.poids := u.poids + 1
u := u.pere
end while
Xn+1). Il sagit donc dun code prxe 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 la
dntion du poids (le chemin de x la racine).
19
COMPRESSION DE DONNES
3
3
3
3
3
3
4
5
5
5
5
5
5
5
6
6
6
6
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 larbre
20
Si x Xn, larbre doit augmenter de taille et aura 2K+2 noeuds au lieu de 2K. La
nouvelle lettre va occuper la place de la lettre vide, puis nous ajoutons une feuille
qui 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 deux
ls u et v sont crs ci-aprs
u := newfeuille(x, T) (nouvelle feuille associ x dans T)
u.pere := z ; u.poids := 1 ; u.ordre := 2K
v := 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 dni par les champs pere est un code prxe de Xn+1. Les poids
sont relatifs (Tn+1, Xn+1) ( un coefcient multiplicatif prs), et les champs
ordre induisent un ordre de Gallager sur Tn+1 relativement Xn+1.
Preuve
Juste aprs lappel mise jour(, T), daprs les rsultats prcdents, les prorpi-
ts sur les ordre et sur les frres dasn larbre sotn vries. Lajout des feuilles
u et v ne change pas ces proprits, et les poids sont bien les poids relatifs
(Tn+1, Xn+1).
0
0
1
1
u2K1
u2K1
u2K+1
u2K
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 sans
mmoire. Dasn ce cas, conformment au but vis, les lemmes prcdents nous
permettent 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 ce
moment 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 sur
sa sortie cesz k bits et met jour larbre de Huffman qui contient dj @, avec ce
nouveau caractre.
Il faut bien noter que le codeur et le dcodeur maintiennent chacun leur propre
arbre de Huffman, mais utilisent tous le sdeux le mme algorithme pour le mettre
jour partir des occurrences (frquences) des caractres dj lus. Aussi, les arbres
de Huffman calculs sparment par le codeur et le dcodeur sont les mmes.
Algorithme 1.5 Algorihtme de dcompression pour Huffman dynamique
Soit nb(c), le nobre doccurrence dun caractre c
Initialiser larbre de Huffman (AH) avec le caractre @, nb(@) := 1
while on nest pas la n du message do
Lire le mot de code c du message (jusqu une feuille de AH)
if c = @ then
nb(@) := nb(@) + 1
Lire dasn c les k bits du message et les afcher ne sorite
nb(c) := 0
else
Afcher le code de c dans AH
end if
nb(c) := nb(c) + 1
Mettre jour AH avec les nouvelles frquences
end while
Puis, le dcodeur lit le code suivant et le dcode via son arbre de Huffman. Sil
sagit du code de @, il lit les k bits correspondant un nouveau caractre, les crit
sur la sorite et ajoute le nouveau caractre son arbre de Huffman (le nouveau
caractre est dsormais associ un code). Sinon, il sagit du code dun caractre
dj rencontr ; via son arbre de Huffman, il trouve les k bits du caractre associ
au code, et crit sur la sortie. Il incrmente alors de un le nombre doccurences
du caractre quil vient dcrire (et de @ si cest un nouvzau caractre) et met
jour larbre de Huffman. Cette mthode dynamiue est peu moins efcace que
la mthode statique pour estimer les frquences. Il est probable que le message
cod sera donc un peu long. Mais elle vite le stockage de larbre et de la table
des frquences, ce qui rend le rsultat nal souvent plus court. Ceci explique son
utilisation en pratique dasn les utilitaires courants.
22
1.5 Heurisitques de rduction dentropie
En pratique, lalgorithme de Huffman (ou ses variantes) est utilis en conjonction
avec 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 chiers
compresser pour diminuer lentropie ou accepter une destruction dinformation
suppose 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 donc
compressible plus efcacement. 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 absolument
pas leur posotion dans le texte. Si un mme caractre apparat souvent rpt plu-
sieurs fois dafl, il peut tre utile de coder simplement le nombre de fois o il
apparait. Par exemple, pour transmettre une page par fax, le codage statique codera
le 0 par un petit mot de code, mais chaque 0 sera crit. Le codage RLE lit chaque
caractre la suite mais, lorsque au moins 3 caractres identiques successifs sont
rencontres, il afche 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 le
rendre 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 RLE
appel MNP5. Lide est de que lorsque 3 ou plus caractres identiques sont ren-
contrs, ces trois caractres sont afchs suivis dun compteur indiquant le nombre
dapparitions supplmentaires du caractre. Il faut bien sr convenir dun nombre
de bits xe attribuer ce compteur. Si le compteur dpasse son maximum, la
suite sera code par plusieurs blocs des 3 mmes caractres suivi dun compteur.
Par exemple, la chane aabbbcddddd est code par aabbb0cddd2 . Dans ce
cas, si une chane de n octets contient m rptitions de longueur moyenne L, le
gain 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 de
mme couleur sont trs souvent accols. Enn, il est clair quune compression sta-
23
COMPRESSION DE DONNES
tisitque peut tre effectue ultrieurement sur le rsultat dun RLE. Nous obtenons
lalgorithme 1.5.1.
Algorithme 1.6 Mthode RLE
repet := 0 ; compteur := 1
RefCar := entre[compteur]; CarCour := RefCar ;
while compteur longueur(entre) do
while RefCar = CarCour et compteur longueur(entre) do
incrmente(compteur) ; incrmente(rpte) ;
CarCour := entre[compteur] ;
end while
if rpte < 4 then
for i de 1 rpte do
crire(RefCar) ;
end for
else
crire(&,rpte,RefCar) ;
end if
rpte:= 0 ; RefCar:=CarCour
end while
La dcompression est immdiate : ds quon lit &nc, qui indique n rptition du
caractre 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 caractre
ASCII en sa valeur entre 0 et 255 : en modiant la vole lordre de la table. Par
exemple, ds quun caractre apparat dans la source, il est dabord cod par sa
valeur, puis il passe en dbut de list, et sera cod dornavant cod par un 0, tous
les autres caractres tant dcal dune unit. CE move-to-front permet davoir
plus de codes proches de 0 que de 255. Ainsi, lentropie est modie.
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 du
code est 1. Cest aussi lentropie de la source. Mais le code dun Move-To-Front
sera 00005000 , dentropie H = 7/8 log
2
(8/7) + log
2
(8)/8 = 0, 55. Le code
lui-mme est alors compressible, cest ce quon appelle la rduction dentropie.
Le dcodage est simple : partir du mme tableau initial, il suft dmettre le
caractre correspondant lindice et de ranger le tableau en passant ce caractre en
premier. Le tableau volue exactement comme pendant la phase de codage.
24
D0 c o m p r e s1 s2 e2
D1 o m p r e1 s1 s2 e2 c
D2 m p r e1 s1 s2 e2 c o
D3 p r e1 s1 s2 e2 c o m
D4 r e1 s1 s2 e2 c o m p
D5 e1 s1 s2 e2 c o m p r
D6 s1 s2 e2 c o m p r e1
D7 s2 e2 c o m p r e1 s1
D7 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 an que le
Move-To-Front et le RLE soient les plus efcaces possibles. Le problme est bien
sr 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 tous
les dcalages possibles comme indiqu par la tableau 1.5.3, puis de trier les lignes
dans lordre alphabtique et lexicographique. La premire colonne F de la nouvelle
matrice des dcalages est donc la chane trie de toutes les lettres du mot source. La
dernire 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 an de simplier la vision de la transformation mais
ninterviennenet pas dans lalgorithme de dcodage : en effet lordre des caractres
est forcment conserv entre L et F.
Biens sr, pour calculer F (la premire olonne) et L (la dernire colonne), il nest
pas ncessaire de stocker toute la matrice des dcalages, un simple pointeur se d-
plaant dans la chane est sufsant. 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, elle
est cependant issue du tri dune chane quasiment semblable, simplement dcale
dune lettre. On peut donc esprer quelle conserve des proprits issues du tri et
que lentropie en sera rduite.
Concernant le dcodage, la connaissance de la chane, conjugue celle dun index
primaire (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 L
D0 c e2
D8 e2 s2
D5 e1 r
D2 m o
D1 o c
D3 p m
D4 r p
D7 s2 s1
D! s1 e1
TAB. 1.4 Les colonnes F et L aprs le tri
suft de trier L pour rcuprer F. Ensuite, on calcule un vecteur de transformation
H 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 position
8, . . . Ensuite, il faut se rendre compte en plaant l et F en colonnes, dans chaque
ligne deux lettres se suivant doivent se suivre dans le chane initiale : en effet, par
dcalage, 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 plus
qualors qu suivre cet enchaenement de lettres deux deux pour retrouver la
chane initiale, comme da,s lalgorithme 1.5.3.
Algorithme 1.7 Rciproque de la BWT
Soit l une chane de caractre et soit index
F := 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
Afcher 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 de
compression bzip2 utilise cette suite de rductions dnetropie avant deffectuer un
codage 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 des
codes 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 facteurs
rptes par des pointeurs vers lendroit o ils sont dj apparus dans le texte. Bien
que ces deux mthodes soient souvent confondues dasn la littrature, elles se dins-
tinguent grandement par le construction du dictionnaire. Il existe un grand nombre
de variantes de ces deux algorithmes. LZ77 est utilis dans lutilitaire gzip sous
UNIX.
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 dentre
comme 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 compose
de 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 compression


parcourt le tampon de recherche de la droite verts la gauche pour trouver un a. Il en
trouve un une distance de 3 (dclage de 3). Il cherche ensuite faire correspondre
le plus de symboles possibles entre le prxe du tampon de lecture et le facteur
du tampon de recherche dbutant au a trouv prcdemment. Il peut mettre en
correpondance 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 prxe du tampon de lecture et un facteur du tampon de
recherche.
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 prxe aba, avec un
dcalage 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 longueur


de 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 10
et une longueur de 3 et il crit le lxme correspondant (10, 3, ). La dernire
composante du triplet de sortie indique le premier caractre qui nest pas en cor-
respondance dans le prxe du tampon de lecture.
Algorithme 1.8 Algorithme de compression pour LZ77
Mettre un pointeur de codage au dbut de lentre
while non vide (tampon de lecture) do
Trouver la plus longue correspondance entre le tampon de lecture et celui de
recherche
Ecrire (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 droite
end 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 caractres
du tampon de recherche le plus long facteur qui se rpte au dbut du tampon de
lecture. 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 on
le 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 est
indispensable 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 dune
fentre de taille N = 11 dont le tampon de lecture est de F = 5 caractres. Nous
obtenons la suite de triplets engendr par lalgorithme :
Chacun des triplets est cod en binaire en associant un nombre xe de bits pour
chacune des valeurs. Choisir la dernire correspondance trouve au lieu de l apre-
29
COMPRESSION DE DONNES
mire simplie le programme. Il nest ps ncessaire de mmoriser la correspod-
nantes prcdente. Cependant, le fait de choisir la premire correpondance, au prix
dun accroissement de la complexit du programme , prsente un avanatage. Dans
ce cas, le dcalage est plus petit. Cela peut sembler inutile car le codage des lexme
est fait de telle sorte que la longueur (10, 3, ) et de (5, 3, ) est identique (les va-
leurs numriques sont crites avec une taille xe paramtre par la taille du tampon
de 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 propos
par B. Herd port ele nom de LZH et repose sur le principe suivant : si on dispose
dun grand nombre de petits dcalages, on amliore la compression en utilisant
LZH.
En pratique pour obtenir un codage efcace N F = 2
e1
et F = 2
e2
. On a donc
besoin de e1 bits pour coder p, la position dans le dictionnaire et de e2 bits pour
coder l, la longueur de rptition.
Plus le rpt sera long, plus le codage sera efcace. Pour avoir des chances dob-
tenir de longues rptitions, il est ncessaire que le dictionnaire soit de taille suf-
sante (quelques millliers de caractres).
Lalgorithme effectue sa compression au fur et mesure du dplacement de la
fentre. Il nutilise que le dictionnaire compris dans le tampon de recherche et
sertains facteurs vus prcdemment sont de ce fait oublis. Si la fentre est trop
grande, 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 de
plus en plus coteuse en temps (de lordre de (N F) F) oprations). IL faut
donc trouver un compromis pour obtenir une bonne compression en fonction de
tous ces paramtres. En pratique, cette mthode fonctionne assez bien pour une
taille de fentre de lordre de N 8192 pour des raisons suiantes :
Beaucoup de mots et de fragments de mots sont sufsament 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 trs
proches. Cest par exemple le cas le mot compression .
Si un caractres ou une suite de caractres sont rpts un certain nombre de
fois conscutivement, le codage peut tre trs conome parce quil autorise la
rptition 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 fait
en 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 donnee
de dpart.
Algorithme 1.9 Algorithme de dcompression pour LZ77
lire un lexme
chercher la correspondance dans le tampon de recherche
ecrire le facteur trouv au dbut du tampon de lecture
ecrire la troisime composante du lxme la suite
dcaler 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 lexemple
prcdent la n 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 proches
dans les donnes dentre. Les donnes qui ne satisfont pas cette hypothses seront
mal comprimes.
Un autre inconvnient est que la taille F du tampon de lecture est limite. De ce
fait, la taille de la plus longue correspondance ne peut excder F 1 F ne peut
crotre beaucoup, car le temps de compression crot proportionnellement F. Il en
est 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 plus
compos dune fentre coulissante mais est constitu de lintgralit du texte dj
trait.
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 va
mmoriser au cours du temps la totalit de facteurs rencontrs dasn le dictionnaire
et leur attribuer un numro. Comme pour LZ77, cette mthode va rechercher le
plus long facteur inscrit dans le dictionnaire qui concide avec le prxe p du texte
restant 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 le
couple (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 structures
de 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 un
facteur. On le code (0, a), ce qui signie le facteur vide suivi du mot a et on lajoute
au dictionnaire en position 1. In lit ensuite ab dont la premire lettre correspond
32
Algorithme 1.10 Algorihme de compression LZ78
mot := ;
dictionnaire[0] :=
indice := 1
repeat
lire S le premier caractre du texte T restant comprimmer (on retire gale-
ment S de T)
if mot.S dicitonnaire then
mot := mot.S
emis := faux,
else
mettre(indice de mot dans le dicionnaire, S)
affecter(mot, S) lentre indice du dictionnaire
indice := indice + 1
mot :=
emis := vrai
end if
until n du texte compresser
if emis = faux then
metre(indice de mot dans le dictionnaire, S)
end if
Dictionnaire lexme
0 null
1 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 suft de reconstruire le dictionnaire au fur et
mesure du dcodage. Les numros de facteur seront les mmes que pour le codage
et les facteurs pourront tre interprts sans problme.
Algorithme 1.11 Algorihme de dcompression LZ78
mot := ;
dictionnaire[0] :=
indice := 1
repeat
lire suivant (ind, S) dans le texte comprim
if ind = 0 then
mettre(S)
dictionnaire[indice] := S
indice := indice + 1
else
facteur := concatene(dictionnaire[ind], S)
mettre(S)
dictionnaire[indice] := facteur
indice := indice + 1
end if
until n du texte dcompresser
Une proprit remarquable de cette mthode est que lalgorithme de compression et
celui 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
Sommaire
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2 Codes compresseurs usuels . . . . . . . . . . . . . . . . . . 36
2.2.1 Formats GIF et PNG . . . . . . . . . . . . . . . . . . 36
2.3 Compression avec perte . . . . . . . . . . . . . . . . . . . . 36
2.3.1 Dgradation de linformation . . . . . . . . . . . . . . 36
2.3.2 Transformation des informations audiovisuelles . . . . 37
2.3.3 Le format JPEG . . . . . . . . . . . . . . . . . . . . . 38
2.3.4 Le format MPEG . . . . . . . . . . . . . . . . . . . . 40
2.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Rsum
Nous nous intressons au problme de la compression dimages et les
techniques 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. Parmi
les formats dimages, le format GIF (Graphic Interchange Format) est un format
de chier graphique bitmap propos par la socit Compuserve. Cest un format
de compression pour des images pixellise, cest--dire dcrite comme une suite
de points (pixels) contenus dasn un tableau ; chaque pixel a une valeur qui dcrit
sa couleur.
Le principe de compression est en deux tapes : tout dabord, les couleurs pour
les 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 qui
est le dfaut). La couleur de chaque pixel est donc approche par la couleur la plus
proche gurant dasn la palette. Tout en gardant un nombre important de couleurs
diffrentes avec une palette de 256, ceci permet davoir un facteur trois de com-
pression. Puis, la squence de couleurs des pixels est compress par lalgorithme
de compression dynamique LZW (Lempel-Ziv-Welch). Il existe deux versions de
ce format dveloppes respectivement en 1987 et 1989 :
GIF 87a permet un afchage progressif (par entrelacement) et la possibilit
davoir des images anims (les GIFs anims) en stockant plusieurs images au
sein du mme chier.
GIF 89a permet en plus de dnir une couleur transparente dans la palette et
de prciser le dlai pour les animations.
Comme lalgorithme de dcompression LZW a t brevet par Unisys, tous les
diteurs 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 plus
plbiscit, au dtriment du format GIF. Le format PNG format analogue ; mais
lalgorithme 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 chier cpres-
ser et son utilisation. Considrons une image numrique. Les compresseurs sans
perte transmettront le chier sans utiliser linformation quil sagit dune image,
et le chier pourra toujours tre restitu dans son intgralit. Mais il peut exister
des formats beaucoup plus efcaces pour lesquels, si une partie de linformation
est perdue, la diffrence ne soit jamais visisble. Les chiers ne pourront donc pas
ter restitus dans leur tat initial, mais leur tat permettra de visualiser des images
dauusi bonne qualit. Ce qui veut dire que la qualit qui tait code dans le chier
de dpart tait superue puisquele ninduit aucune diffrence vsuelle.
Les compresseurs avec perte sont donc spciques 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 chier plutt que le chier lui-mme. Ce type
de compression est obligatoire pour les formats vido, par exemple o la taille des
donnes et les calculs sont trs importants.
Les compresseurs avec perte vont permettre de dpasser le seuil de lentropie et
obtenir 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 des
tres humains, ce qui ncessite une modlisation de la persistance rtienne ou au-
ditive par exemple.
On pourra mesurer lefcacit de ce comresseurs avec le taux de compression,
mais la qualit des images produites nest value que grce lexprience des
utilisateurs. Nous prsentons donc des formats standards, largement prouvs. En
outre, pour les informations audiovisuelles, un autre critr important viendra se
greffer au taux de compression : la rapidit de la dcompression. En particulier pour
le son et la vido, la visualisation ncessite des calculs extrment rapides pour lire
les chiers compresss. La complexit algorithmique des dcompresseurs est donc
un contrainte aussi importante que la taille des messages comprsss lorsquon
triate des informations audiovisuelles.
2.3.2 Transformation des informations audiovisuelles
Les formats compacts de stockage dimages, de sons ou de vido utilisent toujours
des sources tendus. Ils codent non pas pixel par pixel, mais prennent en compte
u pixel et son entourage, pour observer des paramtres globaux, comme lappari-
tion des ocntours, les rgularits, ou lintensit des variations. Ces donnes seront
traites sous la forme de signaux pseudo-priodiques. Par exemple, si un morceau
dune image est un dgrad doux, la frquence du signal sera faible, tandis que la
frquence dune partie dont les couleurs, les textures varient beaucoup sera lve.
37
COMPRESSION DIMAGES
Cela permettra un codage trs efcace des zones de base frquence sera souvent
invisible ou inaudible, donc parfaitement acceptable.
2.3.3 Le format JPEG
Le codage au format JPEG (pour Joint Photographic Group) compresse des images
xes avec perte dinformation. Lalgorihtme de codage est complexe, et se droule
en plusieus tapes. Le principe de base est que les couleurs des pixels voisins dans
une image diffrent peu en gnral. De plus, une image est un signal : plutt que
des valeurs des pixels, on alcule des frquences (transforme de Fourier DFT ou
transforme 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 le
simages numriques sont principalement composes de basses frquences DDCT
quand on regarde la luminance des couleurs (dans le codage dune image en mode
luminance/Chrominance, YUV par exemple) plutt qune mode RGB. Il existe
plusieurs formules pour passer du mode RGB au mode YUV selon les modles
phsiques de la lunire. Une formule classique pour toruver la luminance est celle
ci : Y = 0, 299 R + 0, 587 G+ 0, 114 B
Lide est donc dappliquer la DCT va transformer cette matrice en une matrice
contenant 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 255


255 76 255 255 255 255 255 255
255 76 255 150 150 255 255 255
255 76 255 150 255 150 255 255
255 255 255 150 255 150 29 29
255 255 255 150 255 150 29 255
255 255 255 255 255 255 29 255
255 255 255 255 255 255 29 29

D =

1631 71 83 49 94 36 201 32
6 348 49 2 26 185 60 86
39 81 123 27 28 0 43 130
49 3 10 25 19 126 33 92
101 43 111 55 4 3 120 50
25 166 62 50 50 2 9 7
64 34 54 11 69 0 26 54
48 73 48 28 27 33 23 29

38
Enn, loeil humain donne plus dimportance la luminosit quaux couleurs. En
ne gardant que les premiers termes de la dcompression en luminance DCT (les
plus importants), on perd un peu dinformation mais limage reste visible. Cette
opration est appele quantication et cest la seule tape de tout codage JPEG qui
soit avec perte dinformation. Lopration consiste arondir la valeur C(i, j) =
DCT(i,j)
Q(i,j)
o Q est une matrice de quantication
Q =

16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 150 29 77
24 35 55 64 81 150 29 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99

C =

102 6 8 3 4 1 41 1
1 29 4 0 1 3 1 2
3 6 8 1 1 0 1 2
4 0 0 1 0 1 0 1
6 2 3 1 0 0 1 1
1 5 1 1 1 0 0 0
1 1 1 0 1 0 0 1
1 1 1 0 0 0 0 0

On peut remarquer sur lexemple, quaprs quantication, beaucoup de valeurs


sont identiques et proches de zro. Le choix de la matrice de quantication res-
pectivement avec des valeurs proches de 1 ou loin de 1 permet daugmenter ou
diminuer le niveau de dtails. Limage est nalement code comme une suite de
nombres (une valeur quantie de DCT suivie du nombre de pixels ayant cette va-
leur qui sont conscutifs selon le balayage en zigzag (voir gure 2.1). Les faibles
valeurs obtenues permettent desprer que lentropie obtenue aprs ce RLE a t
considrablement rduite. Lalgorithme JPEG se termine alors par un codage sta-
tistique par exemple Huffman. Enn, il est noter que le standard JPEG-2000 o la
transformation en cosinus et la quantication sont remplaces par une transforme
en ondelettes dasn laquelle ne sont conservs que certains niveaux. Le nombre de
niveaux ou bandes conservs inue directement sur la taux de compression dsir.
39
COMPRESSION DIMAGES
FIG. 2.1 Balayage en zigzag de JPEG
Image
Blocs
8 8
DCT
Quantication
RLE
zigzag
Huffman
ou Arith.
FIG. 2.2 Compression JPEG
2.3.4 Le format MPEG
Le format MPEG (pour Motion Picture Experts Group) dnit la compression
dimages animes. Lalgorithme de codage utilise JPEGpour coder une image mais
prend en compte le fait que deux images conscutives une squence vido sont trs
voisines. Une des particularits de snormes MPEG est de chercher compenser le
mouvemet (zoom par exemple . . .) dune image la suivante. Une sortie MPEG-1
contient quatre sortes dimages : des images au format I (JPEG), des images P
codes par diffrences avec limage prcdente (par compensation du mouvement
deux images conscutives sont trs voisines), des images bidirectionnelles B co-
des par diffrence avec limage prcdente et la suivante (en cas de diffrences
moins importantes avec une image future quavec une image prcdente), enn
des images basse rsolution utilises pour lavance rapide sur un magntoscope.
40
En pratique, avec les images P et B, il suft dune nouvelle image complte I
toutes les 10 15 images. Un lm vido tant compos dimages et de son, il faut
galement compresser le son. Le groupe MPEG a dni trois formats : les MPEG-
1 Audio Layer I, II et III, le troisime est le fameux MP3. Le MPEG-1 est la
combinaison de compressions dimages et de son, associes une synchronisation
par marquage temporel et une horloge de rfrence du systmes comme indiqu
sur la gure 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 pixels
et une dbit de 1, 5MBits/s), MPEG-2 en 1996 (avec quatre rsolutions de
352288 19201152 pixels plus un ux de sous-titres et de langues multiplexs,
celui-ci est lactuel format des DVD) ou encore MPEG-4 en 1999 (format des
vidos confrences et du DivX o la vido est devenue une scne oriente objet).
Enn le son est dcompos en trois couches, MP1, MP2 et MP3, suivant les taux
de compression (et donc les pertes) dsirs. En pratique, les taux de compression
par 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 donnons
une ide de la transformation MP3 sur la gure 2.4 : le son analogique est dabord
ltr et modi par les transformes de Fourier (avec perte) et simultanment en
cosinus (DCT).
41
COMPRESSION DIMAGES
Quantication
son
DCT Filtrage
non uniforme
non audible
FFT
Modle
psycho-
acoustique
Huffman
Info
suppl
F
o
r
m
a
t
a
g
e
controle
controle
taux
distorsion
FIG. 2.4 Compression du son MP3
Ensuite, la combinaison de ces deux transformations permet de faire une quanti-
cation et de contrler le rsultat obtenu pour ne conserver que la partie aidible
principale. Au nal, une compression statistique est bien sr applique, pour r-
duire le chier au niveau de son entropie nale.
2.4 Conclusion
Ce chapitre cls la partie sur la compression de donnes.
42
CHAPITRE
3
Compression du son
Sommaire
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Rsum
Nous nous intressons au problme de la compression du son et les
techniques pour rsoudre ce problme.
43
COMPRESSION DU SON
3.1 Introduction
3.2 Conclusion
44

You might also like