Vous êtes sur la page 1sur 56

Compression des

données
Master STIC - M2
Multimédia

Denis Payet
1. Introduction

diapo 2
Rappel : Intérêt de la compression
• Image :
– Taille 640x480
– Codage : RVB, 3x1 octet (16 millions de couleur)
640x480x3 = 921 600 octet = 900 ko

• Vidéo :
– Taille 640x480
– 25 images par seconde
 25 x 900 = 22 500 ko/s ≈ 22 Mo/s  1,3 Go/min
diapo 3
Les 2 approches de la compression

Avec ou sans perte

diapo 4
La 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, elle est seulement
réécrite d'une manière plus concise.

diapo 5
La compression avec perte
Définition :
Il y a moins d'information après la compression
qu'avant, l'information retranchée étant
sélectionnée d'après des critères fixés selon le
type de données traitées.

Ex: l'œil ne perçoit pas nécessairement tous les


détails d'une image , l’oreille ne capte pas
certaines fréquences,…

diapo 6
2. La compression sans perte

diapo 7
Définition
• Probabilité d’apparition d’un caractère dans un
message :
ni
p (ci ) 
m
– ni = le nombre d’occurrence du caractère ci
– m = le nombre de caractère total dans le message

diapo 8
Numérisation
La plupart du temps on n’est pas en mesure de déterminer
les propriétés statistiques d’une source au moment de
sa numérisation (flux non prévisible). C’est pourquoi,
faute de mieux, elle est considérée comme une source
ayant des symboles équiprobables, ce qui explique
qu’on utilise généralement des codes binaires à longueur
constante quand on réalise une numérisation.

 Codage à taille fixe

diapo 9
Codage à taille fixe (ctf)
• Pour un message m composé d’un alphabet de
n caractères distincts, la taille (nombre de digit
nécessaire) d’un caractère pour un codage
binaire à taille fixe est :

Ent[ log (n) ] + 1


2

ln( x)
Rappel : log 2 ( x) 
ln(2)
diapo 10
Codage à taille fixe
• Exemple :
Soit un message de 36 caractères, composé
des caractères A,B,C,D et E

• Exercice :
– Calculer la taille totale du message pour un
codage binaire à taille fixe.

diapo 11
3 types de méthodes de compression
• Méthodes canoniques
 2.1
• Méthodes statistiques
 2.2
• Méthodes à dictionnaire
 2.3

Rappel :
Taux de compression

taille après codage


T= taille initiale (en ctf)

diapo 12
2.1. Méthodes canoniques

diapo 13
Principe

- Ce sont des méthodes simples qui compactent


les mots d’une source en se basant sur les
propriétés structurelles du message.
- La compression s’effectue à la volée (sans
lecture préalable de la source).
- Pour pouvoir décompresser il suffit de connaitre
le protocole générique choisi pour la
compression ( ce protocole n’a pas besoin
d’être codé dans le message compressé).
diapo 14
2.1. Méthodes canoniques

a) Codage topologique

diapo 15
Codage Topologique
• Le codage topologique :
– Fonctionne sur les octets (8 bits).
– Pour être efficace il est nécessaire qu’un des
octets source soit sensiblement dominant (par
exemple 0).
– Le taux de compression maximal est de 1/8

diapo 16
Codage Topologique
Principe :

 Le caractère le plus fréquent de la source va jouer un


rôle particulier, on nommera ce caractère : l’octet
dominant.

 On lit les données sources par bloc de 8 octets, et on


code chaque bloc de la façon suivante :
– On génère un octet topologique dans lequel les bits à 1
désignent la position de l’octet dominant dans le bloc lu.

– Puis, on génère à la suite les caractères du bloc lu en


supprimant l’octet dominant. Cette suite constitue le sous-mot
de l’octet topologique précédent.
diapo 17
Codage Topologique
• Exemple
Soit un message source dont A est le symbole de l’octet
dominant (les symboles sont ici représentés par des
lettres, mais leur code binaire a une longueur de 8 bits).
Considérons le bloc de 8 octets sources suivants :
AABDEACA
L’octet topologique sera alors : 11000101
Et son sous-mot sera la suite de symboles : BDEC
Si T est le symbole de l’octet topologique ci-dessus, alors le
bloc compacté sera la suite de symbole : TBDEC
diapo 18
Codage Topologique
• Exercice :

Calculer le taux de compression du codage topologique


en fonction de : longueur du message, notée m ; et le
nombre d’occurrence du caractère dominant, noté |D|.

diapo 19
2.1. Méthodes canoniques

b) L’algorithme RLE

diapo 20
Algorithme RLE
• L’algorithme RLE :
Run-Length Encoding
– Un des premiers algorithmes de compression
– Fonctionne sur les octets ou caractères.
– Utilisé par la plupart des fichier bimaps (TIFF,
BMP et PCX).
– Simple à implémenter et rapide d’exécution.
– Efficace sur les messages comportant un
grand nombre de symboles consécutifs.
diapo 21
Algorithme RLE
Principe :
Dans le message source les suites de caractère consécutif sont
remplacées par un codage composé du nombre d’occurrences du
caractère suivi du caractère.

Vocabulaire :
• Dans le message source, une suite de caractères consécutifs est
appelé un passage (ou une course, « run »).
• Le code compressé qui lui correspond est appelé paquet RLE,
dans celui-ci :
- le nombre d’occurrences du caractère est appelé le compteur de
passage (« run count »).
- et le caractère associé est appelé valeur de passage (run
value).

diapo 22
Algorithme RLE
• Exemple
Soit un message
AAAAAAbbbXXXXXt

Son codage RLE sera la chaîne de 4 paquets


suivante : 6A3b5X1t

diapo 23
Algorithme RLE
• Exercice :

Considérons un message de longueur m comportant n


symboles différents. A quelle condition peut-on être sûr
que le codage RLE ne sera pas rentable quelque soit
l’agencement des symboles dans le message ?

diapo 24
2.2. Méthodes statistiques

diapo 25
Principe

- Lorsqu’on connaît les occurrences des caractères


d’un message, on peut adopter un code à longueur
variable : on affectera le moins de bits aux symboles
les plus courants, et on réservera les codes les plus
longs aux moins probables.
- Ces méthodes nécessitent une pré-analyse du
message à compresser (calcul des occurrences).
- Pour pouvoir être décodé, le message compressé
doit être accompagné de l’alphabet utilisé pour la
compression.
diapo 26
2.2. Méthodes statistiques

a) L’agorithme de Huffman

diapo 27
Algorithme de Huffman
• L’algorithme de Huffman :
– Décrit la première fois en 1952
– Préconisé par de nombreuses normes :
JPEG, MPEG,…
– Crée des codes de longueurs variables en
fonction de la répartition du nombre
d’occurrences des symboles.

diapo 28
Algorithme de Huffman
Principe :
Les caractères sont d’abord triés et classés en fonction de leur
fréquence (occurrence). Un graphe est alors construit de la manière
suivante :
• A partir des deux symboles présentant la fréquence la plus faible,
un noeud est créé. Il lui est affecté un poids égal à la somme des
fréquences des deux symboles.
• Le noeud créé remplace désormais les deux symboles dans la suite
du processus. A ces derniers sont affectés respectivement les
chiffres binaires 0 pour le plus fréquent et 1 pour le plus rare, (ou
l’inverse, il s’agit d’une convention totalement arbitraire).
• La même démarche est reprise en considérant les deux symboles
ou noeuds de poids le plus faible. Elle est renouvelée tant qu’il reste
au moins deux symboles ou nœuds libres.

diapo 29
Algorithme de Huffman
• Exemple :
Soit un message de 36 caractères, composé
des caractères A,B,C,D et E, dont les
occurrences sont :
– A : 7 fois
– B : 6 fois
– C : 5 fois
– D : 14 fois
– E : 4 fois
diapo 30
Algorithme de Huffman

diapo 31
Algorithme de Huffman

diapo 32
Algorithme de Huffman

diapo 33
Algorithme de Huffman

diapo 34
Algorithme de Huffman

diapo 35
Algorithme de Huffman

diapo 36
Algorithme de Huffman
• Codage obtenu :
– D (14) : 0
– A ( 7) : 111
– B ( 6) : 110
– C ( 5) : 101
– E ( 4) : 100

diapo 37
Algorithme de Huffman
• Exercices :
– Calculer la taille totale du message après codage.
– Calculer le taux de compression obtenu.

• Rappel :

Le message avait 36 caractères :


A (7)[111], B (6)[110], C (5)[101], D (14) [0], E (4)[100]

diapo 38
3.2. Méthodes statistiques

b) Algorithme de Shannon-Fano

diapo 39
Algorithme de Shannon-Fano
Principe :
1) on classe les symboles par ordre de probabilités
décroissantes
2) on partage l’ensemble des symboles en deux sous-
ensembles, les 2 sous-ensembles devant être de
probabilité aussi proche que possible
3) on attribue à chaque sous-ensemble l’état 0 ou 1
4) on re-partage chaque sous-ensemble en deux sous-
ensembles de probabilité aussi proche que possible, on
attribue à chaque nouveau sous-ensemble l’état 0 ou 1,
etc.
diapo 40
Algorithme de Shannon-Fano
• Exemple :
Soit un message de 36 caractères, composé des
caractères A,B,C,D et E, dont les occurrences
sont:
– A : 7 fois
– B : 6 fois
– C : 5 fois
– D : 14 fois
– E : 4 fois

diapo 41
Algorithme de Shannon-Fano

diapo 42
Algorithme de Shannon-Fano

diapo 43
Algorithme de Shannon-Fano

diapo 44
Algorithme de Shannon-Fano

diapo 45
Algorithme de Shannon-Fano

diapo 46
Algorithme de Shannon-Fano
• Codage obtenu :
– D (14) : 00
– A ( 7) : 01
– B ( 6) : 11
– C ( 5) : 100
– E ( 4) : 101

diapo 47
Algorithme de Shannon-Fano
• Exercice :
– Calculer la taille totale du message après codage.
– Calculer le taux de compression obtenu.

• Rappel :

Le message avait 36 caractères :

A (7)[01], B (6)[11], C (5)[100], D (14) [00], E (4)[101]

diapo 48
2.3. Méthode avec Dictionnaires

L’algorithme LZ77

diapo 49
Algorithme LZ77
Principe : L'idée est de garder une trace des nouvelles données, et de
supprimer les phrases déjà rencontrées pour ne conserver que la
position de leur première occurrence.

- Une donnée conservée comme 1ère occurrence est dite chaîne de


référence et est copiée telle quelle dans le fichier compressé
- Les occurrences suivantes sont remplacées par l’adresse de leur
chaîne de référence et la longueur de l’occurrence (qui peut être
plus petite).
- Pour pouvoir faire la différence entre les chaînes de référence et
l'adresse d'une séquence répétée, on place "0" devant l'adresse
d'une séquence répétée.
=> Tous les 0 existants dans les données doivent donc être remplacés
par une combinaison choisie pour ne pas être confondue avec une
adresse de séquence répétée (par exemple "0FFF").

diapo 50
Algorithme LZ77
Exemple : traitement par octet (8 bits)
Format d’une séquence répétée sur 4 octets :
00 XX XX XX (représentation hexadécimale)
Indicateur
d’occurrences Longueur de la
Adresse de la chaîne
chaîne de référence
de référence

Code de l’octet zéro : 00 FF FF FF


 Taille maximale du fichier source : (2^16) = ~65 Ko
 Longueur maximale d’une chaîne de référence: 255 oct.
 Longueur minimale d’une chaîne (de référence ou
d’occurrence): 4 oct.
diapo 51
Algorithme LZ77
Fonctionnement :
1) Remplacer tous les 0 dans le fichier source par le code associé.

2) Lecture de la chaîne de longueur correspondante à la longueur


minimale d’une chaîne. Puis rechercher dans la suite du fichier
source les prochaines occurrences de cette chaîne.

3) Pour chaque occurrence trouvée, on remplace l’occurrence par


l’adresse de la chaîne de référence et par la plus grande longueur
possible si les caractères suivants sont identiques à ceux qui
suivent la chaîne de référence.

4) On recommence au point 2) en décalant la position de lecture d’un


octet.

diapo 52
Algorithme LZ77
 Pour le décodage il faut commencer depuis la fin du
fichier compressé
 Voir un exemple détaillé sur le site :
http://nicolas.delerue.org/lz77.php

L’algorithme LZ77 est utilisé pour la compression


des fichiers dans le système Windows NTFS

diapo 53
3. Quelques Exemples

diapo 54
Le format ZIP
• inventé par Phil Katz
• Utilise l'algorithme deflate
compression sans perte qui couple l'algorithme
LZ77 et le codage de Huffman
deflate est aussi utilisé dans les formats Gzip et PNG

• NB: ce format est identique au fichier JAR

diapo 55
Le format GIF
• mis au point par CompuServe en 1986

• Utilise l'algorithme LZW


 Amélioration de l'algorithme LZ78 qui
reprend le principe de l’algorithme LZ77 mais
en utilisant cette fois un dictionnaire.

(Les répétitions ne sont plus remplacées par l’adresse de


référence mais par l’indice de la chaîne de référence dans le
dictionnaire).

diapo 56

Vous aimerez peut-être aussi