Vous êtes sur la page 1sur 54

Sans

Perte

Techniques de compression de donnes

Huff
RLE

Objectifs

LZ*

Optimiser les tailles de stockage

Avec
perte
TDC

Optimiser le temps de transmission

Ondelettes
Fractales

Optimiser le temps daccs

Par
Type

Professeur M.QBADOU

Critres de classification des techniques de compression :


Sans
Perte

Huff

Taux de compression (en %) :


.
=

.

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Vitesse de compression.
Vitesse de dcompression.
Usage des ressources (en moyenne et maximal).
Rapport qualit/taux (pour les mthodes avec pertes).
Scurit et robustesse.

Universalit, adaptabilit.
le cot dimplmentation/usage (Parfois le choix est dict par les
contraintes conomiques)

Professeur M.QBADOU

Data Compression- Entropy


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

1. Entropy is the measure of information content in a


message.
Messages with higher entropy carry more information than messages with lower
entropy.

2. How to determine the entropy


Find the probability p(x) of symbol x in the message
The entropy H(x) of the symbol x is :
H(x) = - p(x) * log2p(x)

3. The average entropy over the entire message is the sum of


the entropy of all n symbols in the message

Data Compression Methods


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

1. Data compression is about storing and sending a smaller


number of bits.
2. Therere two major categories for methods to compress
data: lossless and lossy methods

Plan du cours

Huffman
RLE

Sans
Perte

Sans perte

LZ*
TDC

Huff

Ondelettes
RLE

Avec perte

Fractales

LZ*
Avec
perte
TDC

Techniques de
compression

Ondelettes
Fractales

Type de donnes

Par
Type

Professeur M.QBADOU

Lossless Compression Methods


Sans
Perte

Huff

1. In lossless methods, original data and the data after


compression and decompression are exactly the same.

RLE
LZ*
Avec
perte

2. Redundant data is removed in compression and added


during decompression.

TDC

Ondelettes
Fractales
Par
Type

3. Lossless methods are used when we cant afford to lose any


data: legal and medical documents, computer programs.

I. compression sans perte - Huffman


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

1. Principe du codeur Huffman


Technique de compression sans perte par David Huffman, qui repose sur le
codage statistique d'un fichier octet par octet. Plus les octets apparaissent
souvent, plus les codes qui les remplacent sont courts.
Codeur utilis pour la compression du son MP3 et des images PNG et JPEG.
L'algorithme parcourt les donnes d'un fichier et dtermine le nombre de
rptition de chaque octet (frquence dapparition).
Ensuite, l'algorithme construit un arbre en commenant par ses feuilles
jusqu' sa racine. Les octets sont classs par ordre croissant de frquence.
Les nuds sont ensuite lies deux par deux pour former les nuds de larbre
jusqu' ce qu'il n'y ait plus qu'un seul nud, soit la racine. Les nuds sont
forms par la somme des frquences des nuds-descendants directs.
Attribuer aux branches gauches et droites de l'arbre les bits 0 et 1
respectivement.
En fin, les octets compresss sont cods par les bits attribus aux liens, qui
sont aligns en descendant du nud racine jusqu'aux feuilles terminales.
Professeur M.QBADOU

I. compression sans perte - Huffman


Sans
Perte

Huff

2. Lire le contenu original du fichier et calcul des frquences


Considrons le texte suivant :

RLE
LZ*

"Eeeir eesy eens eanr klae."

Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Compter les occurrences de tous les caractres dans le texte et


dterminer quels sont les caractres prsents :

Char
E
e
r
i
espace
Professeur M.QBADOU

Freq.
1
8
2
1
4

Char

Freq.

Char

y
s
n
a
l

1
2
2
2
1

k
.

Freq.
1
1

I. compression sans perte - Huffman


Sans
Perte

Huff
RLE
LZ*
Avec
perte

3. Crer les nuds de larbre binaire. Chaque nud contient


le caractre et sa frquence.
4. Placer les nuds dans une queue de priorit
La plus petite frquence a la plus grande priorit dans la queue.
On utilise le nud suivant :

TDC

Ondelettes
Fractales

public class NoeudHuffman


{
public char car;

Par
Type

public int Frequence;


public NoeudHuffman g, r;

}
PriorityQueue<NoeudHuffman> queue;
Professeur M.QBADOU

I. compression sans perte - Huffman


Sans
Perte

La queue aprs linsertion de tous les nuds

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

10

I. compression sans perte - Huffman


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes

5. Construction de larbre dhuffman


Tant que la queue contient 2 nuds ou plus faire :
Crer un nouveau nud
Dfiler un nud et le prendre fils gauche du nud

Dfiler un nud et le prendre fils droit du nud

Fractales

La frquence du nouveau nud est la somme des frquences des nud


gauche et droit

Par
Type

Enfiler le nouveau nud dans la queue

Professeur M.QBADOU

11

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

12

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales

Par
Type

Professeur M.QBADOU

13

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

14

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

15

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

16

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

17

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

18

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

19

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte
TDC

sp
2

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

20

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte

sp

TDC

Ondelettes
Fractales
Par
Type

2
4

Professeur M.QBADOU

2
21

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte

sp

TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

22

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

sp

LZ*

Avec
perte

TDC

Ondelettes

Fractales

.
1

s
2

r
2

Par
Type

Professeur M.QBADOU

1
23

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

sp

LZ*

Avec
perte

TDC

Ondelettes

Fractales

Par
Type

Professeur M.QBADOU

24

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

LZ*

Avec
perte

8
6

TDC

Ondelettes

Fractales

sp
2

Par
Type

Professeur M.QBADOU

25

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

LZ*

Avec
perte

TDC

Ondelettes
Fractales

s
2

r
2

sp
2

Par
Type

Professeur M.QBADOU

26

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

LZ*

Avec
perte

TDC

sp

Ondelettes

Fractales

Par
Type

Professeur M.QBADOU

2
27

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

LZ*

Avec
perte

TDC

sp

Ondelettes

Fractales

Par
Type

Professeur M.QBADOU

.
1

28

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte

e
8

10

TDC

Ondelettes

Fractales
Par
Type

Professeur M.QBADOU

sp
2

1
29

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*
Avec
perte

e
8

10

TDC

Ondelettes

Fractales
Par
Type

Professeur M.QBADOU

6
sp

1
30

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*

10

Avec
perte

16

TDC

Ondelettes

Fractales

sp

Par
Type

Professeur M.QBADOU

31

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE
LZ*

16

10

Avec
perte
TDC

Ondelettes

Fractales

sp

Par
Type

Professeur M.QBADOU

32

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

26
LZ*
Avec
perte

10

16

TDC

Ondelettes

Fractales

Par
Type

sp
2

Professeur M.QBADOU

33

I. compression sans perte - Huffman


Sans
Perte

5. Construction de larbre dHuffman - Simulation

Huff
RLE

26
LZ*
Avec
perte

10

16

Aprs enfilement de ce
nud, il ne reste quun seul
nud gauche dans la
queue de priorit

TDC

Ondelettes

Fractales

Par
Type

sp
2

Professeur M.QBADOU

34

I. compression sans perte - Huffman


Sans
Perte

6. Implmentation : Classe PriorityQueue :

Huff

Description

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

35

I. compression sans perte - Huffman


Sans
Perte

6. Implmentation : Classe PriorityQueue :

Huff

Constructeurs :

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

36

I. compression sans perte - Huffman


Sans
Perte

6. Implmentation :

Huff

Classe PriorityQueue

RLE

Mthodes

LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

37

I. compression sans perte - Huffman


Sans
Perte

Huff

Implmentation : Calcul de la table des codes binaires-Classe HashTable<K,V>

Utiliser linterface Map<K,V> implmente par la classe HashTable<K,V> :


Les mthode de linterface Map<K,V> :

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

38

I. compression sans perte - Huffman


Sans
Perte

Les Constructeurs de la classe HashTable<K,V> :

Huff
RLE
LZ*
Avec
perte

Les mthodes de la classe Hashtable<K,V>

TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

39

I. compression sans perte - Huffman


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Implmentation : Gestion des fichiers :

Classes utiliser :
FileWriter :
FileWriter fw=new FileWriter(new File(nomFichier));
fw.write(objString);
BufferedReader, FileReader :
BufferedReader in=new Bufferedreader(new FileReader(new File(nomFichier)));
objString =in.readline();
FileInputStream :
FileInputStream in=new FileInputStream(new File(NomFichier));
byte b=(byte)in.read();
FileOuputStream :
FileOutputStream out=new FileOutputStream(new File(NomFichier));
out.write(Short.parseShort(codes.substring(i,i+8),2))

Professeur M.QBADOU

40

I. compression sans perte - Huffman


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Implmentation : Ossature du code :


Classe NoeudHuffman :

package compression;
import java.util.Comparator;
public class NoeudHuff implements Comparable<NoeudHuff>, Comparator<NoeudHuff>{
char x; int f;
NoeudHuff g,d;
NoeudHuff(){}
NoeudHuff(char x,int f){this.x=x;
this.f=f;
g=d=null;}
NoeudHuff(NoeudHuff g,NoeudHuff d){ f=g.f+d.f;
this.g=g;
this.d=d;
}
public int compareTo(NoeudHuff n) {
if(f==n.f)return x==n.x?0:(x<n.x?1:-1);
if(f<n.f)return -1;return 1;
}
public static String prefixe(NoeudHuff r){
if(r==null)return null;
return "[("+r.x+","+r.f+"),"+prefixe(r.g)+","+prefixe(r.d)+"]";
}
public String toString() {
return prefixe(this); }
public int compare(NoeudHuff o1, NoeudHuff o2) {
return o1.compareTo(o2);
}
}
Professeur M.QBADOU

41

I. Compression sans perte - Huffman


Sans
Perte

Classe Huffman :

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

42

II . Compression sans perte - RLE


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

1. Principe
RLE/RLC(Run-Length Encoding/Coding) est un mode de
compression simple et rapide bas sur la rptition d'lments.
RLE Consiste identifier et supprimer des redondances
d'informations en les codant sous une forme plus compacte.
Chaque chane rpte (suite caractres ou de bits identiques)
est remplace par un couple cod en 2 octets.
Le premier reprsente le nombre de caractres/bits de la chaine et

le second est la valeur du caractre de la chaine.

utilis par la plupart des formats de fichiers bitmaps tels que


TIFF, BMP et PCX

Professeur M.QBADOU

43

II . Compression sans perte - RLE


Sans
Perte

Huff

2. Exemples :
Le codage de "AAAAAAAAZZEEEEEEEEEEER" par RLE donne :

RLE

"8A2Z11E1R"

LZ*

ce qui est beaucoup plus court fc=9/23=39% gain=61%

Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Les parties 8A, 2Z, sont appeles paquets RLE


Par contre pour la chane "REELLEMENT", le rsultat de la compression
donne :
"1R2E2L1E1M1E1N1T"
ce qui est trs couteux fc=16/10=160% Perte=60%
Le couple (NombreDeRptitions, Valeur) nest appliqu que lorsque
le nombre de rptitions atteint un seuil
Mthode conventionnelle qui fixe des rgles pour le codeur RLE

Professeur M.QBADOU

44

II . Compression sans perte - RLE


Sans
Perte

3.

Mthode conventionnelle

RLE

En ralit la compression RLE est rgie par des rgles particulires permettant
de compresser lorsque cela induit un gain et de laisser la chane telle quelle
lorsque la compression induit une perte.

LZ*

Ces rgles sont les suivantes :

Huff

Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Lorsque trois lments ou plus se rptent conscutivement alors la


mthode de compression RLE est utilise.
Sinon un caractre de contrle (00) est insr, suivi du nombre dlments
de la chane non compresse puis de cette dernire.
Si le nombre dlments de la chane est impair, le caractre de contrle
(00) est ajout la fin de la chane.
Enfin des caractres de contrles spcifiques sont dfinis afin de coder :

une fin de ligne (00 01)

la fin dune image (00 00)

un dplacement du pointeur dans limage de XX colonnes et de YY lignes


dans le sens de la lecture (00 02 XX YY).

Professeur M.QBADOU

45

II . Compression sans perte - RLE


Sans
Perte

Mthode conventionnelle Exemple

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales

4. Variantes de RLE
Codage horizontal

Codage Vertical

Par
Type

Professeur M.QBADOU

46

II . Compression sans perte - RLE


Sans
Perte

Codage 4x4
Codage en zigzag

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

5. Applications
Application 1 :
Implmenter lalgorithme RLE pour les cas des fichiers texte
Implmenter les variantes de RLE pour le cas des images bitmap(bmp,
TIFF, PCX).

Professeur M.QBADOU

47

II . Compression sans perte - RLE


Sans
Perte

Huff

Applications2 : dcompression RLE d'un image


Voici une image bitmap compresse :

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Cette image a t compresse avec la mthode suivante :


les deux premier pixels et tous les pixels impaires sont des faux pixels :
le premier pixels est en fait un entier qui reprsente le nombre total de pixels
couleurs qui doivent tre rpts pour construire l'image dcompresse;

le second pixel est un entier qui dtermine la hauteur de l'image une fois
dcompresse (sa largeur est la mme que celle de l'image compresse);
le troisime pixel et tous les pixels impairs suivants (pixels[2n+1] avec n>=1), sont
des entiers qui reprsentent le nombre de rptition effectuer sur les pixels
suivants (pixels[2n+2] avec n>=1) .

Ecrire un programme qui dcompressera et affichera cette image.


Professeur M.QBADOU

48

III . Compression sans perte - LZ*


Sans
Perte

1.

Historique
Les mthodes de compression LZ* de Abraham Lempel et Jacob Ziv, sont
dites de type dictionnaire aussi appeles algorithmes substitution de
facteurs.

Huff
RLE

Les diffrentes variantes sont dans lordre :

LZ*
Avec
perte

Lalgorithme LZ77,

TDC

Lalgorithme LZSS, version amlior de LZ77 par Storer et Szymanski (la recherche
des squences dans le dictionnaire est rduite logarithmique ment)

Ondelettes

Enfin vient lalgorithme LZ78, plus connu sous le nom LZW, amlioration faite par
Terry Welch en 1984 de LZSS par le fait que les squences sont ranges dans une
arborescence.

Fractales
Par
Type

2.

Principe
Le principe est fond sur le fait quune squence de caractres peut
apparatre plusieurs fois dans un fichier.
Lalgorithme LZW de compression consiste mettre la place des
squences, les adresses de ces squences dans un dictionnaire gnr la
vole.

Professeur M.QBADOU

49

III . Compression sans perte - LZ*


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

3. Avantages par rapport aux mthodes statistiques


Le fichier comprim ne stocke pas le dictionnaire, ce dernier est
automatiquement gnr lors de la dcompression.
Contrairement aux mthodes statistiques qui utilisent la probabilit de
prsence sur un ensemble de taille fixe de symboles, lalgorithme LZW
reprsente un algorithme dapprentissage, puisque les squences
rptitives de symboles sont dans un premier temps dtectes puis
compresses seulement lors de leurs prochaines occurrences.
Le taux de compression est dpendant de la taille du fichier. Plus la taille
est importante, et plus le taux de compression lest aussi.
Il permet le compactage la vole, puisquil ny a pas lire le fichier au
pralable, il compresse les squences de symboles au fur et mesure.

Professeur M.QBADOU

50

III . Compression sans perte - LZ*


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

4. Lalgorithme de compression LZW


Principe :
Lobjectif de lalgorithme de compression LZW est de construire un
dictionnaire o chaque squence sera dsigne par une adresse dans celui ci.
Chaque squence ne sy trouvant pas y est rajoute. Au final, on se retrouve
avec une suite dentiers, des adresses pointant vers une squence contenue
dans le dictionnaire.
Le dictionnaire est donc un tableau dans lequel sont ranges des squences
de symboles de taille variable, repres par leurs adresses (leur position dans
le tableau).
La taille de ce dictionnaire nest pas fixe et les premires adresses de 0 255
du dictionnaire contiennent les codes ASCII. Les squences ont donc des
adresses suprieures 255.

Professeur M.QBADOU

51

III . Compression sans perte - LZ*


Sans
Perte

4. Lalgorithme de compression LZW


Algorithme LZW_Compression

Huff

Donnes :
Type_Dictionnaire Dico
TypeFichier
FichierSr
Rsultat :
TypeFichier
FichierCpr
Dbut
s = LireOctetFichier(FichierSr)
Tant Que Non FinFichier(FichierSr)
t=LireOctetFichier(FichierSr)
u=Concantner(s,t)
Si EstDansDicto(Dico,u) Alors
s=u
Sinon
AjouterDansDico(Dico,u)
EcrireFichier(FichierCpr,Adresse(Dico,s))
s=t
Fin Si
Fin Tant Que
EcrireFichier(FichierCpr, Adresse(Dico,s))
Fin

RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

Professeur M.QBADOU

52

III . Compression sans perte - LZ*


Sans
Perte

Huff
RLE
LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

5. Exemple dutilisation de lalgorithme de compression LZW


A laide de lalgorithme LZW, nous voulons compresser la squence
suivante : "SISI-ET-ISIS"
On lit donc le premier caractre soit S. Puis on lit le suivant : I. On
forme la squence u=S+I soit SI, puisque celle ci nest pas prsente
dans le dictionnaire, on lajoute dans le dictionnaire. Cette squence
aura ladresse 256, premire squence situe dans le dictionnaire aprs
la table ASCII. Enfin on attribue ladresse de s (valeur ASCII de S) dans
le fichier soit 83 ou (1010011 en binaire). On continue ensuite avec le
caractre suivant.
La compression effective a lieu lorsque quon rencontrera pour la
seconde fois une paire (SI par exemple) dj prsente dans le
dictionnaire. Dans ce cas on mettra ladresse de la squence SI et non
ladresse de la squence S et de la squence I, on ajoutera par la suite
dans le dictionnaire la squence de 3 caractres (soit SIS dans notre
exemple).
Professeur M.QBADOU

53

III . Compression sans perte - LZ*


Sans
Perte

Huff
RLE

5. Exemple dutilisation de lalgorithme de compression LZW


tableau rsumant les oprations effectues sur lexemple lors du
droulement de lalgorithme LZW de compression :

LZ*
Avec
perte
TDC

Ondelettes
Fractales
Par
Type

le dictionnaire rsultant
de lalgorithme :

Professeur M.QBADOU

54