Vous êtes sur la page 1sur 57

Université Virtuelle de Tunis

Cours : Compression de
données
Mastère Professionnel en Nouvelles Technologies
des Télécommunications et Réseaux (N2TR)

Chapitre 2 : Compression sans


pertes
présenté par :
Dr Mohamed Sahbi Bahroun
Année Universitaire 2017/2018 1
Plan du chapitre

1. Introduction
2. Méthodes de compression de base
3. Méthodes statiques
4. Méthodes avec dictionnaire

Master N2TR 2
1- Introduction

Master N2TR 3
Compression sans perte : définition

La compression est dite sans perte lorsqu'il n'y a aucune perte de


données sur l'information d'origine.
Il y a autant d'information après la compression qu'avant. Les
données sont réécrits de façon à minimiser les redondances de
données.
L'information à compresser est vue comme la sortie d'une source de
symboles qui produit des données finies selon certaines règles. Le but
est de réduire la taille moyenne des données obtenus après la
compression en minimisant les redondances et en ayant la possibilité
de retrouver exactement le message d'origine.

Master N2TR 4
Compression sans perte : définition

Il n'existe pas de technique de universelle de compression, qui


pourrait compresser n'importe quel fichier : si une technique sans
perte compresse au moins un fichier, alors elle en « grossit »
également au moins un autre.
La compression sans perte peut être effectuée avec 3 groupes de
méthodes différents :

méthodes de compression de base, on retrouve le RLE et MTF.

méthodes statistiques, on retrouve le Golomb Code, le Huffman coding,


Adaptive Huffman Coding, le Shannon-Fano Coding et bien d’autres.

méthodes avec dictionnaire : LZ77, LZSS, LZX, LZW et d’autres.

Master N2TR 5
2- Méthodes de compression
de base

Master N2TR 6
Codage RLE: Running Length Encoding

Le RLE consiste à reconnaître les répétitions et à réécrire le texte.


L’algorithme RLE est simple tant au niveau de la compression
comme la décompression.
Il peut de plus être utilisé sur n’importe quel type de fichier.
Le principe du RLE est le suivant :
1. Recherche des caractères répétés plus de n fois .
2. Remplacement de l'itération de caractères par :
Un caractère spécial identifiant une compression,
Le nombre de fois où le caractère est répété,

Master N2TR 7
Codage RLE : Exemple
"Exemple : prenons la chaîne de 14 caractères suivante :
· « ABCCCCCCDDEEEE ».

Dans cette exemple, on choisit le caractère spécial #.


1ère étape : on recherche les caractères répétés plusieurs fois :
-6C
-2D
-4E

2ème étape : on code ces caractères :


- les C seront codés #6C.
- Les D, eux, ne seront pas codés puisque le code « #2D » n’est pas un gain de compression.
- Les E seront codés #4E.

La chaîne sera donc codée sur 8 caractères :


- AB#6CDD#4E

Ce qui nous fait un taux de compression de 57%.

Master N2TR 8
RLE : Avantages et inconvénients
Avantages :
+ Algorithme de compression et décompression simples
+ Peut être utilisé sur n’importe quel type de fichier ou après
d’autres algorithmes de compression plus évolués pour gagner
quelques octets de plus.
Inconvénients :
- Le fichier ou texte à compresser doit contenir plusieurs chaînes
de caractères ou bits répétés sinon la taille du fichier compressé
peut être supérieure à la taille du fichier original

Master N2TR 9
2- Méthodes de compression
statiques

Master N2TR 10
Méthode de Shannon Fano
1. Détermination des probabilités de chacun des symboles soit
par mesure ou soit par estimation.
2. Ordonner les symboles selon leurs probabilité d’apparence
croissant ou décroissant.
3. Diviser l’ensemble des symboles en deux sous-groupes ayant
une différence de probabilité minimale.
4. Assigner un ‘0’ pour le premier sous-groupe et un ‘1’ pour le
second sous-groupes.
5. Réitérer à la 3ème étape en subdivisant les sous-groupes.
6. Condition d’arrêt: tous sous-groupes sont formés d’un
singleton.

Master N2TR 11
Méthode de Shannon Fano

Master N2TR 12
Méthode de Shannon Fano

Master N2TR 13
Méthode de Shannon Fano

Master N2TR 14
Méthode de Shannon Fano

Master N2TR 15
Méthode de Shannon Fano

Master N2TR 16
Méthode de Shannon Fano

Master N2TR 17
Méthode de Shannon Fano

Master N2TR 18
Méthode de Shannon Fano

Master N2TR 19
Code de Huffman
Le code de Shannon-Fano ne permette pas d’obtenir un code
optimale.
Le code de Huffman est code presque aussi simple que le code de
Shannon-Fano.
Le code permet d’avoir un code à préfixe aussi.
Le code de Huffman est optimal et il est basé sur deux observations:
• Dans un code optimal, on assigne moins de bits aux symboles
les plus fréquents et plus de bits au symboles les moins
fréquents.
• Dans un code optimal, les deux moins fréquents symboles ont la
même longueur.

Master N2TR 20
Huffman : codage
Phase 1 : construction de l’arbre
1. Trier les différentes valeurs par ordre décroissant des fréquences
d’apparition
2. Fusionner les deux poids minimaux dans un arbre binaire et affecter leur
somme à la racine
3. Réordonner la table de poids par ordre décroissant
4. Recommencer l’étape 2 jusqu’à obtenir un arbre complet

Phase 2 : construction du code


à partir de l’arbre obtenu dans la phase 1 attribuer des 0 aux sous arbres de
gauche et des 1 à droite

Master N2TR 21
Codage de Huffmann

• L’objectif est la compression de mot :


• recherchechatchatain

Master N2TR 22
Codage de Huffmann

Master N2TR 23
Codage de Huffmann

Master N2TR 24
Codage de Huffmann

Master N2TR 25
Codage de Huffmann

Master N2TR 26
Codage de Huffmann

Master N2TR 27
Codage de Huffmann

Master N2TR 28
Codage de Huffmann

Master N2TR 29
Codage de Huffmann

Master N2TR 30
Codage de Huffmann

Phrase original : recherchechatchatain


Après compression:
010110111001100101110011011100101011111001010111
0110001001
La phrase recherchechatchatain contient 20 caractères
chacun étant code sur 8 bits, cad 160 bits

Après compression on a 58 bits.

Ainsi le taux de compression est : 58/160=0,3625

Master N2TR 31
Codage de Huffmann : décodage
Avec cela on ne sait pas si le code de la lettre est en 3,4,5 ou
même 6 bits mais ce n'est pas un problème.

On regarde bit par bit et on se dirige ainsi dans toutes les


branches de l'arbre :

Le premier bit est 0, donc on se dirige vers la gauche, le second


est 1, donc on se dirige vers la droite.

Ensuite, le bit est 0 donc on se dirige vers la gauche. On arrive


alors a une feuille de l'arbre :celle qui correspond au caractère r.
Master N2TR 32
4- Méthodes à base de
dictionnaire

Master N2TR 33
Compression par dictionnaire

Exploitation de la structure des données.


Stockage des motifs redondants dans un dictionnaire.
Le stockage peut être statique: pas d’effacement de motifs
connaissance à priori.
Ou dynamique: mise à jour du dictionnaire en fonction des
données.

Master N2TR 34
Principe
Identifier les motifs de symboles les plus fréquents.
Encodage efficace des motifs fréquents: assignation de code
court.
Encodage par défaut pour le reste.
Exemple
Alphabet: 26 lettres + 6 points de ponctuation 32.
Texte à mots de 4 lettres x 5 bits R1=20 bits/mots
324 =220=1,048,576 possibilités de mots.
On regroupe les 256 mots les plus fréquents dans un
dictionnaire 8 bits + un bit ‘1’ pour indiquer que c’est un
mot du dictionnaire.
Le reste des mots code: 20 bits + un bit ‘0’.
Débit: R2=9p+21(1-p)=21-12p ≤ R1=20 p≥0.084.
Master N2TR 35
Compression par dictionnaire statique

Connaissance à priori de la source d’information.


Design d’un dictionnaire basé sur les motifs récurrents.
Technique fonctionne pour des applications spécifiques
seulement.
Sinon ça peut résulter en expansion des données.
Codage diagramme :
Dictionnaire statique=alphabet original + un nombre de paires de
lettres ou digrammes les plus fréquents.
Exemple: dictionnaire de taille = 256 pour les 95 caractères ASCII
imprimables. 161 entrées restantes.
161 entrées pour les digrammes les plus fréquents.

Master N2TR 36
Codage diagramme
Exemple de la chaine abracadabra :
Alphabet de 5 lettres: A={a, b, c, d, r}.
Connaissance à priori de la source dictionnaire :

Codage :
On lit d’abord une paire et on vérifie si ça se trouve dans le
dictionnaire. Sinon on encode la lettre toute seule.

Master N2TR 37
Codage diagramme

Master N2TR 38
Diagramme adaptatif
Les bases des dictionnaires adaptatif remontent à deux articles
historiques de Jacob Ziv et Abraham Lempel publiés en 1977 et
1978.
2 approches différentes pour la construction adaptative des
dictionnaires:
 LZ77 ou LZ1
 LZ78 ou LZ2
Chaque approche a conduit à un nombre de variations.
 LZW en 1984 par Terry Welch.

Master N2TR 39
Approche LZ77
Le dictionnaire est une portion de la séquence précédemment
encodée.
Utilisation d’une fenêtre glissante.
Fenêtre comporte deux parties:
Bus de recherche : portion précédemment encodé.
Bus d’inspection avenir : une portion à encodé.
Repérer la correspondance maximale entre la séquence à venir et
la séquence passée.

Master N2TR 40
Approche LZ77
(O)ffset=Pointeur de début – pointeur de corresp. =7
(L)ongueur= nombre maximale de symboles consécutifs et
similaires =4.
(C)ode= mot code de la lettre suivante dans le bus d’inspection= r
Le code est envoyé au cas où il n y a aucune correspondance
<O=0, L=0, C(r)>.

Master N2TR 41
Approche LZ77

Master N2TR 42
Approche LZ77

Master N2TR 43
Approche LZ77

Master N2TR 44
Approche LZ77

Master N2TR 45
Approche LZ77

Master N2TR 46
Approche LZW
LZW est un algorithme de compression sans perte. Il s'agit d'une
amélioration de l'algorithme LZ278 inventé en 1977 par Lempel & Ziven .
LZW fut créé en 1984 par terry Welch , d'où son nom.

Master N2TR 47
Approche LZW : principe
Construction d’une table de chaînes de caractères à partir du texte à compresser
Cette table associe des codes de taille fixée à des chaînes de caractères (en général
12 bits)
La table est initialisée avec tous les caractères (256 entrées dans le cas de
caractères codés sur 8 bits)
Le compresseur examine le texte à compresser et ajoute chaque chaîne de 2
caractères dans la table comme concaténation de code et de caractères avec le
code correspondant au premier caractère de la chaine.
Au fur et à mesure en lisant les chaînes, le premier caractère est envoyé en sortie
Chaque fois qu’une chaîne déjà rencontrée est lue, la chaîne la plus longue déjà
rencontrée est déterminée, et le code correspondant à cette chaîne avec le
caractère concaténé (le caractère suivant du flux entrant) est enregistré dans la
table
Le code pour la partie la plus longue de la chaîne de caractères rencontré est
envoyé en sortie et le dernier caractère est utilisé comme base pour la chaîne
suivante.
Master N2TR 48
Algorithme LZW : algorithme
FONCTION LZW_Compresser(Texte, dictionnaire)
w ← ""
TANT QUE (il reste des caractères à lire dans Texte) FAIRE
p ← Concaténer(w, Lire(Texte))
SI Existe(p, dictionnaire) ALORS
w←p
SINON
Ajouter(p, dictionnaire)
Écrire dictionnaire[p]
w←c
FIN SI
FIN TANT QUE

Master N2TR 49
Approche LZW : exemple
La table suivante montre le résultat de l'exécution de l'algorithme de
compression sur la chaîne suivante :
TOBEORNOTTOBEORTOBEORNOT
On suppose qu'on utilise un code ASCII de 256 caractères (8-bits)
comme dictionnaire de base. La longueur de cette chaîne est de 24
caractères. Elle nécessite donc 24 * 8 = 192 bits d'espace de stockage.

Master N2TR 50
Approche LZW : exemple
w c wc sortie dictionnaire
T T
T O TO T TO = <256>
O B OB O OB = <257>
B E BE B BE = <258>
E O EO E EO = <259>
O R OR O OR = <260>
R N RN R RN = <261>
N O NO N NO = <262>
O T OT O OT = <263>
T T TT T TT = <264>
T O TO
TO B TOB <256> TOB = <265>
B E BE

Master N2TR 51
Approche LZW : exemple
w c wc sortie dictionnaire
BE O BEO <258> BEO = <266>
O R OR
OR T ORT <260> ORT = <267>
T O TO
TO B TOB
TOB E TOBE <265> TOBE = <268>
E O EO
EO R EOR <259> EOR = <269>
R N RN
RN O RNO <261> RNO = <270>
O T OT
OT <263>

Master N2TR 52
Approche LZW : exemple
Après la compression, nous obtenons une séquence de codes de
9 bits sur la sortie :
TOBEORNOT<256><258><260><265><259><261><263>
Elle nécessite 16 × 9 = 144 bits d'espace de stockage, au lieu
des 192 bits de la chaine originale.

Master N2TR 53
Approche LZW : décompression
FONCTION LZW_Décompresser(Code, dictionnaire)
n ← |Code|
v ← Lire(Code)
Écrire dictionnaire[v]
w ← chr(v)
POUR i ALLANT DE 2 à n FAIRE
v ← Lire(Code)
SI Existe(v, dictionnaire) ALORS
entrée ← dictionnaire[v]
SINON
entrée ← Concaténer(w, w[0])
FIN SI
Écrire entrée
Ajouter(Concaténer(w,entrée[0]), dictionnaire)
w ← entrée
FIN POUR
Master N2TR 54
Approche LZW : exemple
Le résultat de l'algorithme de décompression, sur la séquence
compressée de codes de 9 bits, est présenté dans ce tableau :
TOBEORNOT<256><258><260><265><259><261><263>

Master N2TR 55
Approche LZW : exemple
c w entrée w+entrée[0] sortie dictionnaire

T T T

O T O TO O TO = <256>

B O B OB B OB = <257>

E B E BE E BE = <258>

O E O EO O EO = <259>

R O R OR R OR = <260>

N R N RN N RN = <261>

O N O NO O NO = <262>

Master N2TR 56
Approche LZW : exemple
c w entrée w+entrée[0] sortie dictionnaire

T O T OT T OT = <263>

<256> T TO TT TO TT = <264>

<258> TO BE TOB BE TOB = <265>

<260> BE OR BEO OR BEO = <266>

<265> OR TOB ORT TOB ORT = <267>

<259> TOB EO TOBE EO TOBE = <268>

<261> EO RN EOR RN EOR = <269>

<263> RN OT RNO OT RNO = <270>

Master N2TR 57

Vous aimerez peut-être aussi