Membre de Click-FR®, Réseau francophone Paie-Par-Click

Accueil

Généralités

Pourquoi compresser ?

L'algorithme JPEG

La DCT

Codage statistique

Synthèse des algoritmes

D'autres méthodes

Notre programme

Le pathfinding(TIPE 2003/2004 de Math sup)

Vennez signer le livre d'or Livre d'or Vennez signer le livre d'or

Quelques liens


Delain

les vidcast

L'algorithme JPEG :

Le sigle JPEG vient du nom du groupe d'experts internationaux (Joint Photographic Expert Group) qui a établi, en 1991, la norme que nous utilisons encore aujourd'hui. Cette norme est, en fait, basée sur la DCT (Discret Cosin Transform), méthode proposée en 1974 par le professeur Rao de l'université du Texas.

 

Le principe de l'algorithme JPEG est le suivant :

Pour mieux comprendre ce principe, prenons comme exemple la matrice suivante représentant la composante rouge d'une image codée en 16 millions de couleurs (soit 256 nuances de rouge).

255 255 255 0 0 0 0 0
36 255 100 100 36 36 36 36
73 255 100 73 100 73 73 73
109 255 100 100 100 100 100 109
146 146 100 146 100 146 146 146
182 182 100 182 100 100 100 182
218 218 218 218 100 218 218 218
255 255 255 255 100 100 100 255

image originale :

La première étape consiste à soustraire 128 (ce qui correspond au nombre de couleurs rouge divisé par 2) à chaque valeur puis à appliquer la DCT. Nous obtenons le résultat suivant.

50 258 135 -120 -73 -76 -57 -103
-319 148 -9 28 -124 -101 -55 63
68 170 52 -89 -15 31 80 35
-21 25 40 44 16 68 60 30
22 81 46 -9 14 14 55 47
66 33 39 33 -54 4 29 38
-31 68 30 -10 54 -29 13 33
41 -30 0 34 -31 37 36 29

On remarquera que les coefficients possédant les valeurs absolues les plus fortes se trouvent en haut à gauche de la matrice.

L'étape suivante est celle de la quantification. Elle consiste à donner les valeurs approximatives de la matrice précédente. Pour cela, on remplace chaque valeur par le quotient de la division euclidienne de cette valeur par le pas de quantification. Ainsi, si l'on choisit un pas de quantification de 4, on remplacera les valeurs 0, 1, 2 et 3 par 0 ; les valeurs 4, 5, 6 et 7 par 1 et ainsi de suite. C'est ici que nous allons perdre des données, mais d'une manière astucieuse. En effet, on va choisir un petit pas pour les valeurs en haut à gauche et un pas de plus en plus grand au fur et à mesure que l'on descend en bas à droite de la matrice. La matrice de quantification Q nous est donnée par la relation suivante :

Q(i,j) = 1 + F(1 + µ (in + jn)) , où F est le facteur de qualité.

Dans notre exemple, nous prendrons µ = n = 1 et F = 5. Ce qui nous donne, après simplification :

Q(i,j) = 1 + 5(1 + i + j)

Nous obtenons la matrice de quantification suivante :

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

Divisons maintenant les valeurs de la matrice de données par notre matrice de quantification. Le résultat est le suivant :

8 23 8 -5 -2 -2 -1 -2
-29 9 0 1 -4 -2 -1 1
4 8 2 -2 0 0 1 0
-1 0 1 1 0 1 1 0
0 2 1 0 0 0 0 0
2 0 0 0 -1 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0

Vous serez sans doute étonné par le nombre de zéros.

 

La dernière étape consiste à compresser (sans perte) la matrice obtenue. La norme JPEG traite les 0, en raison de leur nombre important, d'une manière particulière. On va d'abord balayer la matrice de la façon suivante pour obtenir les suites de 0 les plus importantes possibles :

On utilise ensuite une méthode de compression statistique tel que celle de Huffman.

La compression est terminée.

 

Voyons maintenant comment réaliser la décompression de la matrice précédemment compressée.

La méthode est la suivante :

 

Après décodage statistique, nous retrouvons notre matrice compressée :

8 23 8 -5 -2 -2 -1 -2
-29 9 0 1 -4 -2 -1 1
4 8 2 -2 0 0 1 0
-1 0 1 1 0 1 1 0
0 2 1 0 0 0 0 0
2 0 0 0 -1 0 0 0
0 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0

Il faut maintenant déquantifier en multipliant chaque valeur par son coefficient de quantification. Nous obtenons ceci :

48 253 128 -105 -52 162 -36 -82
-319 144 0 26 -124 -72 -41 46
64 168 52 -62 0 0 46 0
-21 0 31 36 0 46 51 0
0 62 36 0 0 0 0 0
62 0 0 0 -51 0 0 0
0 41 0 0 0 0 0 0
41 0 0 0 0 0 0 0

Appliquons ensuite la DCT inverse, enfin ajoutons 128 à chaque valeur. Voici la matrice décompressée :

210 275 199 39 -9 27 5 3
110 205 124 55 42 24 20 40
94 237 133 98 98 72 80 71
100 209 111 100 94 102 119 102
153 156 100 136 103 121 126 150
179 150 137 170 102 145 133 174
212 218 210 224 131 181 175 241
265 263 224 243 121 107 107 232

image décompressée :

Remarque : les valeurs négatives seront remplacées par des 0 et les valeurs supérieures à 255 par 255.

 

Voyons maintenant, l'évolution du taux de compression et de la taille de l'image compressée en fonction de la qualité :



Le premier nombre est le nombre de bits de l'image compressée, le second est le taux de compression optenu et le dernier indique la qualité choisie.

On peut remarquer que la qualité se dégrade rapidement alors que l'augmentation du gain de place est de moins en important.

 

Retour à l'accueil.