Bibliographie
Vous êtes ici : Entrée > Ressources > Informatique > Compression des données > Généralités


La compression de données (Généralités)

LES METHODES DE COMPRESSION
AVEC PERTES

Le principe est clair : nous acceptons une dégradation de l’image décompressée - indicernable à l’oeil ou suffisamment faible pour être acceptable - en contrepartie d’un taux de compression beaucoup plus intéressant.

Il existe différentes approches de la compression avec perte. L’une d’entre elle, représentée par l’algorithme JPEG, a occupé le devant de la scène depuis quelques années en raison de ses performances et de la facilité de son implémentation sur micro. Cette situation est trompeuse et d’autres méthodes déjà connues (ondelettes et fractales en particulier) vont s’imposer dans les années qui viennent. Il est difficile de prédire ce qui interviendra ensuite mais d’autres voies de recherche sont explorées (utilisation des réseaux neuromimétiques par exemple).

L’algorithme JPEG

Nous donnerons d’abord une idée relativement précice de l’algorithme JPEG.
Ce nom (Joint Photographic Expert Group) provient du groupe d’experts internationaux qui a établi, en 1991, la norme que nous utilisons actuellement. En fait, la DCT (Discret Cosin Transform) qui est au coeur de la méthode a été proposée en 1974 par le professeur Rao de l’université du Texas en 1974.
La norme JPEG de 91 décrit le format des données compressées et le schéma de codage et de décodage. Les algorithmes de compression sont proposés mais n’ont pas de valeur normative.

Voyons d’abord le schéma de principe :

Nous allons maintenant suivre ce qu’il advient d’un bloc de 64 pixels qui a été extrait d’une image, j’emprunte cet exemple à Xavier Marsault (ouvrage cité en bibliographie).
Prenons le bloc suivant :
100 155 131 116 151 135 131 211
120
135
127
88
155
131
155
179
120
135
151
100
179
116
155
167
120
155
151
108
191
112
155
179
135
151
135
120
197
112
179
179
120
151
155
151
151
116
179
179
135
151
167
167
151
151
167
171
120
151
179
151
151
131
155
167
Nous allons maintenant soustraire 128 de chaque valeur et appliquer la transformation DCT. Le résultat est le suivant :
145 -84 34 -69 4 -66 -35 72
-45
-28
28
19
10
-54
5
15
0
-2
-8
-15
-9
0
30
-41
9
-14
15
-11
5
8
-12
-32
1
1
3
-11
7
-23
-4
0
18
4
-17
-10
4
-10
7
-10
-5
1
-7
-20
1
-1
-3
5
3
1
1
9
2
7
2
-2
Notons qu’à cette étape, aucune information n’a été perdue. Le bloc original peut être reconstitué sans aucune perte en utilisant la DCT inverse et en ajoutant 128 à chaque terme.
Quel est l’intérêt de cette transformation ?
On observe que les coefficients de forte valeur absolue sont situés en haut et à gauche, l’importance des coefficients pour la reconstitution de l’image diminue quand on se déplace en diagonale du haut à gauche vers le bas à droite.

Nous allons passer à l’étape suivante, celle de la quantification. De quoi s’agit-il ? De transmettre des valeurs approximatives de la matrice précédente en se donnant un pas de quantification. Prenons un exemple.
Supposons qu’une variable puisse prendre les valeurs 1, 2, 3, 4, 5,.... Si l’on prend un pas de quantification de 3 on ne gardera que le quotient de la division euclidienne de la valeur par 3. C’est très simple !
On va remplacer :
0, 1 et 2 par 0
3, 4 et 5 par 1
6, 7 et 8 par 2
9, 10 et 11 par 3 et ainsi de suite.

C’est à cette étape que nous allons perdre de l’information et nous allons la perdre d’une manière « astucieuse » parce que le pas de quantification dont dépend la précision de l’image restituée va dépendre de la position de la valeur dans la matrice.
Nous allons prendre un pas relativement petit pour les valeurs importantes (en haut à gauche) et prendre un pas de plus en plus grand au fur et à mesure qu’on descend vers le bas et la droite de la matrice.

L’ensemble des pas qui vont être utilisés constituent ce que l’on appelle une matrice de quantification.
Certaines ont été construites en fonction de critères psycho-visuels, pour ce soir nous allons en fabriquer une avec une petite formule :

Q (i,j) = 1 + (1 + i + j) x Fq

(pour les matheux, on indiquera une formule un peu plus complexe, permettant d’obtenir un grand nombre de matrice différentes : Q(i,j) = 1 +(1 + µ (in + jn)) x Fq. Par souci de simplification, on a pris ici µ = n = 1 et Fq = 5. On peut bien entendu compliquer…)

Nous prendrons Fq = 5 . Il s’agit d’un facteur de qualité, c’est celui que vous modifiez quand vous choisissez la qualité de la restitution dans un logiciel comme Photoshop.
Voici la matrice de quantification que nous obtenons :
6 11 16 21 26 31 36 41
11
16
21
26
31
36
41
46
16
21
26
31
36
41
46
51
21
26
31
36
41
46
51
56
26
31
36
41
46
51
56
61
31
36
41
46
51
56
61
66
36
41
46
51
56
61
66
71
41
46
51
56
61
66
71
76
Nous allons maintenant diviser les valeurs de la matrice de données par les valeurs de la matrice de quantification. On obtient cette matrice :
24 -7 2 -3 0 -2 0 1
-4
-1
1
0
0
-1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Ce qui frappe c’est d’une part le nombre de zéros et d’autre part la position des coefficients non nuls.

Nous allons pouvoir passer à la troisième étape qui consiste à compresser, cette fois-ci sans perte, la matrice dont nous disposons.
Les experts du groupe JPEG ont choisi de traiter les 0 d’une manière particulière en raison de leur nombre.
On va d’abord utiliser un balayage particulier pour obtenir des suites de 0 les plus grandes possibles :

On utilise une méthode de compression sans perte qui peut être celle de Huffman, c’est le cas habituel ou bien encore un algorithme de compression arithmétique qui est bréveté pat IBM.

Nous avons terminé, restera à indiquer au décodeur quelle matrice de quantification a été utilisée.

Nous allons suivre la décompression du bloc que nous venons de compresser.



Voici le schéma général

Après le décodage statistique nous retrouvons la matrice :
24 -7 2 -3 0 -2 0 1
-4
-1
1
0
0
-1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Nous allons la déquantifier en multipliant chaque terme par le coefficient de la matrice de quantification correspondant. On obtient :
144 -77 32 -63 0 -62 0 41
-44
-16
21
0
0
-36
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Nous allons maintenant appliquer la DCT inverse et ajouter 128 à chaque terme, ce qui permet d’obtenir le bloc décompressé :
112 145 137 107 149 130 139 124
114
145
139
110
149
131
141
183
117
145
143
116
151
133
144
181
121
145
148
124
152
135
148
179
126
145
153
132
154
137
152
177
130
145
158
139
155
139
156
175
133
145
162
145
157
141
159
173
135
146
164
148
157
142
161
172
Vous êtes ici : Entrée > Ressources > Informatique > Compression des données > Généralités