II - Méthodes de compression

publicité
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
1
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Bien des gens ne comprennent rien à la compression de données -- comment peut-on
rendre quelque chose plus petit ? D'une certaine façon, on ne peut pas -- tout ce qu'on peut
faire c'est d'encoder les données de manière plus efficace. Nous allons essayer d’expliquer
quelques fondements et concepts entourant l'emmagasinage et la compression de données.
Ces concepts sont beaucoup plus simples que ce que les gens ont tendance à imaginer -- seuls
les détails d'implémentation sont complexes.
Fondamentalement, la compression de données sur ordinateur repose sur la recherche
de ressemblances (dans la forme ou dans le motif), afin d'enregistrer la description de la forme
ou du motif (en utilisant des tables ou des algorithmes mathématiques) plutôt que d'enregistrer
la donnée complète.
Nous allons voir dans un premier temps le but et les principes de la compression. Puis
nous présenterons les différentes méthodes de compression. Enfin nous exposerons quelques
problèmes liés à la compression.
I. But et principes de la compression
1-But
Le but de la compression est de mettre les informations sous un format tel qu’elles
occupent beaucoup moins de volume ( notamment pour accélérer le transfert sur les réseaux et
diminuer la taille occupée sur le disque). Les données, une fois compressées, ne sont plus
directement accessibles en tant que données cohérentes. Pour les récupérer, il suffit de les
décompresser, par l’algorithme inverse de compression, ce qui se fait généralement plus
rapidement que la compression. En fait, il n’existe pas un compresseur de données mais
plusieurs types de compresseurs qui correspondent à autant d’algorithmes différents.
Mais, on se rend compte rapidement que seulement quelques types de compressions sont
utilisés.
L’archivage des données a été un véritable problème du temps ou la capacité d’un
disque se comptait encore en quelques dizaines de Méga ( voire des kilos) . C’est à cette
époque que la compression est devenue un outil indispensable pour augmenter la capacité de
stockage et réduire les coûts de celle-ci. Aujourd’hui, nous pouvons stocker des Giga nos
disques et mis à part la sauvegarde de fichiers la compression n’est plus beaucoup utilisé pour
le stockage.
2-Principe
Le principe général est de supprimer ou du moins de réduire les redondances
d’informations par des formules mathématiques complexes pour rechercher les motifs qui se
reproduisent dans les données et les remplacer par des codes plus courts..Ainsi des méthodes
2
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
ont été créé, comme la compression demi-octet ou encore la représentation topographique
binaire. Il s’agit là de vieilles méthodes qui n’existent plus de nos jours.
Pour utiliser un fichier compressé : il faut le décompresser avec un logiciel de
décompression compatible qui le reconvertit dans sa forme d'origine.
II - Méthodes de compression
1- RLE
RLE signifie Run Length Encoding, cette méthode est également appelée RLC pour
Run Length Coding, comme son nom l’indique le principe est de compacter les symboles
identiques consécutifs en utilisant un compteur. Cela nécessite un caractère d’identification
pour le compteur, le compteur et le caractère, soit 3 caractères. Bien évidemment, le caractère
d’identification ne doit pas apparaître dans le fichier source, sinon cela générerait des erreurs.
Cette méthode présente donc un gain de place seulement à partir du moment ou l’on trouve
plus de trois caractères identiques consécutifs. Cependant il existe des variantes a cette
méthode permettant de coder sur deux caractères seulement, comme dans le format d’image
PCX.
Exemple :
Soit une suite de caractère : AAAAABBCDDDEEEEEFFFFFFFFFF
La version compressée est : #5ABBC#3D#5E#10F
Ici le gain est de 11 caractères pour 26.
2-Huffman
Cet algorithme a pour but de repérer les suite de valeurs répétitives. A chaque suite
sera attribué un identifiant. Suivant la probabilité du motif, l'identitifiant sera plus ou moins
long (les motifs les plus courants auront un motif plus court)
On présente maintenant l'algorithme de Huffman sous une forme plus formelle en un
langage non informatique, en en faisant complètement abstraction des problèmes
d'implantation.
Les notations utilisées sont les suivantes :
n : nombre de motifs étudiées.
f(i) : fréquence du motif numéro i
T : Table des fréquences f(i)
p, s, k variables locales
3
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Exemple d’application :
La chaîne que nous allons traiter est :
BACFGABDDACEACG
Les motifs que nous allons étudier sont les octets, donc les lettres :
A, B, C, D, E, F, G
La table des fréquences est donnée ci-dessous: on constate que les motifs ont été écrits dans la
table par ordre décroissant de fréquence d'apparition.
4
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Ensuite commence la première étape de l'algorithme de Huffman. Son déroulement est
résumé ci-dessous dans la figure suivante. Il s'agit de regrouper les motifs de plus faible
fréquence comme suit : on additionne leurs fréquences et on place le nombre ainsi calculé
dans une nouvelle table où les deux fréquences ont été enlevé. On obtient une arboresence
dite "arborescence de Huffman".
5
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Par suite on utilise l'arborescence de Huffman pour construire les codes binaires associés aux
motifs. On attribue à la plus haute fréquence de la dernière table la valeur 0, 1 à l'autre
fréquence. Ensuite on code par retour arrière de la manière suivante : à chaque bifurcation
dans une table on attribue à l'antécédant de plus haute fréquence la valeur 0, à l'antécédant de
plus faible fréquence la valeur 1. On obtient ainsi l'arbre "décoré" de la figure suivante.
6
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Pour obtenir les codes, il suffit de parcourir l'arbre depuis le motif étudié jusqu'à la fin du
chemin en empilant les symboles binaires rencontrés sur le chemin. Les résultats de la
recherche sont aussi donnés dans la figure ci dessus.
On remarque que le fichier compacté sans en-tête comporte 40 bits contre 120 bits pour le
fichier original.
3-Codage de Shanon-Fado
L'algorithme de Shanon-Fado est, au même titre que l'algorithme de Huffman, une
solution au problème de l'élaboration des codes comme il a été posé pour les algorithmes de
codage statistique. Les résultats sont équivalent à ceux de Huffman mais la méthode est
radicalement différente : alors que Huffman construit un arbre en partant des feuilles pour
trouver une racine, Shanon-Fado opère par divisions successives de la table des fréquences.
L'écriture de l'algorithme de Shanon-Fado étant fastidieuse on commence par le
donner sous une forme résumée et informelle.
n : nombre de motifs étudiés.
f(i) : fréquence du motif numéro i
T : Table des fréquences f(i)
7
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Un exemple d'application :
La chaîne que nous allons traiter est :
ACBBCDECECBCEEECCCCABCECBDBDBD
Les motifs que nous allons étudier sont les octets donc les lettres :
A, B, C, D, E.
On commence comme pour Huffman à classer les motifs par ordre décroissant de fréquence,
puis le processus de scission de la table commence. Ici les scissions de tables sont toujours
réalisées de la même manière : on choisit dans la table à scinder le motif de plus haute
fréquence qui forme à lui seul une table. L'autre table est formée par les autres fréquences de
la table initiale.
Par la suite comme on écrit en face de chaque table la somme des fréquences de la table, on
associe à la transition vers la table singleton le bit 0, à la transition vers l'autre table le bit 1.
Le cheminement est assez naturel et ne nécessite aucun retour en arrière. Sur le schéma cidessous la transition de C vers C est affecté par 0.
8
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Pour construire les codes il suffit de parcourir l'arbre par le chemin qui va du motif choisi vers
lui-même. Ainsi, dans la figure ci-dessus, on retrouve les codes élaborés dans la dernière
colonne.
On remarque que le fichier compacté sans en-tête comporte 64 bits contre 196 bits pour le
fichier original et ce pour un cas défavorable à l'algorithme.
4- LZW
L'algorithme LZW est un algorithme de compression de type dictionnaire résolvant très
efficacement les problèmes clefs tel que le stockage et la gestion du dictionnaire. Il porte le
nom de ses trois inventeurs : Lempel et Ziv qui l'ont conçu en 1977, et Welch qui l'a finalisé
en 1984.
Les caractéristiques essentielles de LZW sont :
Il n'existe pas de table d'en-tête : le dictionnaire est construit au fur et à mesure de la
lecture du fichier tant au compactage qu'au décompactage.
On ne traitera ici que d'une version très simple de LZW. En effet il existe de multiple
variantes de l'algorithme.
9
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
On présente maintenant l'algorithme LZW. Les algorithmes de compression et
décompression sont mis en regard pour être mieux comparés. On remarquera la symétrie des
deux algorithmes.
Les notations utilisées sont les suivantes :
+
opérateur de concaténation
D
dictionnaire des symboles rencontrés
s, t, u, b
variables locales
Algorithme LZW :
Un exemple d'application.
Nous allons traiter une chaîne par l'algorithme LZW, pour nous familiariser avec celui-ci.
La chaîne considérée est :
"AIDE TOI LE CIEL T AIDERA"
L'objectif de l'algorithme LZW est de construire un dictionnaire qui sera désignée par une
adresse dans le dictionnaire. Le dictionnaire résultant de la chaîne est donné dans la figure cidessous. On ne s'interresse pas pour l'instant à la façon dont il est construit mais seulement à
sa forme.
10
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Sont considérées comme faisant implicitement partie du dictionnaire les motifs unitaires : les
octects dont l'adresse correspond aux codes ascii de 0 à 255. Au delà
de 255 commencent les motifs complexes qui sont les séquences originales rencontrées dans
le texte. On y retrouve nottament "AI" présent deux fois dans le texte.
Intéressons nous maintenant à la construction du dictionnaire et à la création du fichier
compacté. Cette construction est résumé dans la figure ci-dessous. On y précise
chronologiquement dans quatre colonnes différentes :
- Les octets sont lus séquentiellement dans le fichier original.
- La chaîne tampon à deux caractères permet de mémoriser les chaînes rencontrées
dans le texte et d'apprendre de nouveaux motifs.
- Le dictionnaire : on y trouve les ajouts séquentiels qui surviennent à chaque nouveau
motif rencontré.
11
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Les premières étapes du compactage sont les suivantes : le premier octet lu est "A".
l'algorithme n'effectue que cette action à la première étape."A" est mémorisé dans un tampon
T. Puis l'octet "I" est lu. On le place dans le tampon T qui contient alors "AI". On regarde si la
chaine de T existe dans le dictionnaire. Elle n'existe pas, donc on ajoute la chaîne de T ("AI")
dans le dictionnaire et on émet le code de "A" a défaut d'une chaîne plus longue. Ensuite on
retire "A" de T et on recommence le processus.
Si la chaîne dans T existe dans le dictionnaire, on n'emet rien dans le fichier de sortie mais on
lit le caractère suivant pour rechercher une chaîne plus longue. C'est ce qui se passe à l'étape
12 dans la figure ci-dessus : "E blanc" est déjà dans le dictionnaire, on tente de chercher "E
blanc C" à l'étape suivante. La recherche de "E blanc C" échoue et on emet le code de "E
blanc C" puis on garde seulement "C" dans T (le dernier caractère lu) : On se retrouve comme
en phase d'initialisation.
Le processus complet est décrit dans la figure ci-dessus. On peut remarquer qu'à l'étape 12, au
lieu de ne rien faire on a émis un code "SP" = 11111111. Ce code signifie qu'à partir de ce
point les adresses ne seront plus émises sur 8 bits mais sur 9 bits, ceci pour permettre de gérer
des adresses de tailles variables.
12
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
On tombe ici sur une caractéristique importante de l'algorithme LZW : le code "SP" est inutile
au compacteur mais est indispensable au décompacteur pour décoder les adresses. Cela
signifie que l'algorithme de compactage et de décompactage communiquent, l'un donnant à
l'autre les informations dont il a besoin. Ce système est l'origine de très nombreuses variantes.
Lors de la décompression le dictionnaire est reformé au fur et à mesure selon le même
principe que la compression. Lorsque l'algorithme rencontre une adresse
supérieure à 255, celle-ci est obligatoirement déjà présente dans le dictionnaire ce qui assure
du bon fonctionnement de l'algorithme.
III-Problèmes liés à la compression.
Tout les algorithmes présentés précédemment sont dits "conservatifs", c’est à dire que le
compression s’effectue sans perte de données. Mais il existe d’autres méthodes dites "non
conservatives".
1-Le JPEG
Cette méthode de compression d'image est sans doute la plus célèbre en raison de son
rapport qualité/poids de l'image. Le procédé du JPEG est assez complexe : l'image RVB est
d'abord traduite dans une norme propre à la vidéo où le signal est défini selon trois autres
composantes : l'intensité de la lumière et deux composantes associés à la couleur.
Puis l'image est ré-échantillonnée : chaque pixel garde sa composante relative à la
luminosité, mais les pixels sont regroupés par quatre (groupe de deux pixels horizontaux sur
deux pixels verticaux) pour fusionner leurs composantes relatives à la couleur (la composante
du groupe est calculée à partir d'une valeur moyenne des quatre valeurs initiales).
Il est enfin possible d'augmenter le taux de compression grâce à une fonction
mathématique qui transforme les variations de luminosité en fréquence : il est possible, via les
boîtes de dialogues des logiciels, de diminuer cette fréquence.
A la fin de cette manipulation, l'image possède encore de nombreuses valeurs
identiques. Le JPEG utilise à ce moment l'algorithme RLE (sans perte de qualité). L'ensemble
est encore comprimé par l'algorithme de Huffman. Après ces quatre compressions
consécutives, on obtient enfin une image JPEG d'un bon niveau de qualité pour un poids
particulièrement réduit.
13
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Le tableau ci-après nous présente le rapport entre taux de compression (ou
dégradation) et qualité de l'image. Dans la première colonne est mentionné le facteur de
qualité
2-Les fractales
Cette méthode de compression est basée sur la constatation qu'une image contient des
portions identiques (qui sont modifiées par translations, rotations, effets miroirs ...). L'image
est donc découpée en différentes portions, il s'agit donc d'identifier les secteurs qui
permettront d'en générer d'autres. Le fichier final contient alors les blocs élémentaires ainsi
que les fonctions permettant de reproduire l'image. Cette méthode de compression a pour
principal avantage d'éviter l'effet de pixelisation (puisqu'il recalcule mathématiquement
l'image lorsque l'on effectue un zoom). L'inconvénient de cette méthode est qu'elle est très
lente lors de la phase de compression.
3-La compression par ondelettes
14
CORITON Matthieu
BONNAUD Philippe
BONNET Jérémy
JOURDAN Etienne
TROCHERIE Yvonic
BARBE Laurent
14.06.00
Projet tutoré de maths
La compression de données
Cette méthode devrait connaître un grand succès car elle permet d'obtenir des taux de
compression encore plus élevés pour une qualité similaire. Cette méthode consiste à réduire la
dimension de l'image en cascade.
L'image originale se transforme en quatre images : la première est l'image initiale en
petite taille, les trois autres apportent des informations pour reconstruire l'image avec une
bonne qualité. La compression, alors appliquée sur l'image réduite, consiste à ne prendre en
compte que les éléments les plus importants. Ainsi, on obtient des vitesses de décodage très
rapides (cela correspond à des variantes du JPEG que l'on peut voir sur le Net : l'image est
dans un premier temps très grossière puis s'affine au fur et à mesure du téléchargement)
15
Téléchargement