La compression d'images numériques - Méthodes statistiques
TPE 2002
Site optimisé pour Internet Explorer 5 et pour une résolution de 1024 x 768

HOMEPAGE
Sommaire
Introduction

Les images

Binaire, hexadécimale et ascii
Image numérique
Le canon à électrons
Images et couleurs


Compression
Introduction

Sans pertes
Méthodes basées sur les répétitions
Méthodes de type dictionnaire
Méthodes statistiques

Avec pertes
La compression JPEG
La compression fractale
La compression par ondelettes

CONCLUSION
Conclusion
Bibliographie

 

 

D.A. Huffman a inventé en 1952, un algorithme de compression capable, à partir d'une analyse statistique des données, d'associer à celles les plus souvent présentes les codes les plus courts. Inversement, les données les plus rares se verront attribuer les codes les plus longs.

Cet algorithme permet d'obtenir de bons résultats, mais il faut conserver entre la compression et la décompression, le dictionnaire des codes utilisés.

La méthode

Reprenons l'exemple précédant:

 

 

Cette image contient 30 pixels. Si l'on considère qu'ils sont codés sur 3 octet, la taille de ce texte est de 30 x 3= 90 octet soit 720 bits. La table ci-dessous indique les fréquences des valeurs du pixel de notre exemple. Nous pouvons remarquer que certaines valeurs définissant un pixel apparaissent plus fréquemment que d'autres.
L'algorithme va associer aux valeurs les plus fréquentes le code le plus compact possible.

Valeurs
Fréquences
134
34
234
12
150
12
227
6
153
6
221
3
204
3
192
3
231
2
214
2
160
2
164
1

 

Réalisation de l'algorithme suivant une méthode manuelle

 

Pour réaliser cet algorithme, on commence avec une nouvelle table, similaire à la précédente, on place les valeurs dans une première colonne et leur fréquence dans la seconde. Les données sont triées par ordre de fréquence décroissante.

On construit ensuite le tableau, colonne par colonne, de gauche à droite. On effectue d'abord la somme des 2 fréquences les plus faibles. On reporte dans la colonne suivante toutes les fréquences en supprimant les deux plus faibles. Et en les remplaçant par leur somme. Ce nombre doit être positionné dans la colonne de sorte à respecter l'ordre décroissant. Chaque paire de l'ancienne colonne est annotée avec 0 pour la valeur la plus élevée et 1 pour la plus faible. On procède ainsi jusqu'à ce qu'il ait plus qu'un élément dans la colonne.

Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
134
34
134
34
234
12
234
12
150
12
150
12
227
6
227
6
153
6
153
6
221
3
221
3
204
3
204
3
192
3
192
3
231
2
160
3
214
2
231
2
0
4
160
2
0
3
214
2
1
164
1
1

 

Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
134
34
134
34
234
12
234
12
150
12
150
12
227
6
227
6
153
6
192
6
231
4
153
6
221
3
231
3
204
3
221
3
0
6
192
3
0
6
204
3
1
160
3
1

 

Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
134
34
134
34
134
34
234
12
234
12
234
12
150
12
150
12
221
12
227
6
153
9
150
12
221
6
227
6
153
9
0
15
192
6
221
6
0
12
227
6
1
153
6
0
9
192
6
1
231
3
1

 

Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
Valeurs
Fréq
Bin
Nv Fréq
134
34
134
34
134
34
153
15
221
24
153
27
0
51
234
12
153
15
0
27
221
24
1
221
12
0
24
234
12
1
150
12
1

 

Valeurs
Fréq
Bin
Nv Fréq
153
51
0
85
134
34
1

 

Légende :

Fréq = Fréquance
Nv Fréq = Nouvelle Fréquence
Bin = Binaire

Cette première étape permet de constituer un arbre. L'arbre est constitué de nœuds et de feuilles. Tous les nœuds ont deux liens vers d'autres nœuds ou des feuilles. On dit qu'il est le père de deux fils. Le lien de gauche est étiqueté 0 et celui de droite 1. Ce type d'arbre s'appelle un arbre binaire car tous les nœuds ont deux fils. Le nœud le plus élevé s'appelle la racine. On trouve alors le code d'une lettre en partant de sa position dans l'arbre, en remontant vers la racine tout en notant de droite à gauche les 1 et 0 rencontrés. Cet algorithme revient donc à construire un arbre binaire. On note sur chaque nœud les sommes des fréquences des fils. Les feuilles représentent les valeurs avec leurs fréquences. La racine indique donc la somme des valeurs du texte. Chaque branche correspond soit à 0, soit à 1. Pour compresser l'image, il suffit pour chaque valeurs de parcourir l'arbre en partant de la feuille correspondant à la valeur voulue, et de remonter jusqu'à la racine. Une fois arrivé, on émet les bits 1 ou 0 correspondant au chemin parcouru.

Dans un fichier, les bits sont représentés par groupe de huit et forment des octets. Le résultat de la compression de notre exemple est donc le suivant :

Valeur
Code
134
1
234
001
150
011
227
0001
153
00000
221
01000
204
01001
192
01010
231
000010
214
000011
160
010110
164
010111