JPEG - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

La compression JPEG

Nous allons maintenant nous intéresser à l’algorithme.

On peut diviser la compression et la décompression JPEG en six étapes, voici l’organigramme :

Organigramme de compression
Figure 1 : Organigramme de compression.

Attention, quand on suit l'algorithme du bas, on n'aboutit pas à l'image brute, mais à une image restituée, qui n'est en aucun cas l'image brute. Entre l'image brute et l'image restituée, il y a des écarts, qui seront d'autant plus importants que l'opération de quantification a été forte.

Découpage en blocs

Le format JPEG, comme le font généralement les algorithmes de compression à perte, commence par découper l’image en blocs ou carreaux généralement carrés de 64 (8 × 8) ou 256 (16 × 16) pixels.

Transformation des couleurs

JPEG est capable de coder les couleurs sous n’importe quel format, toutefois les meilleurs taux de compression sont obtenus avec des codages de couleur de type luminance/chrominance tels que YUV, YCbCr car l’œil humain est assez sensible à la luminance mais peu à la chrominance.

Sous-échantillonnage

La façon la plus simple d’exploiter la faible sensibilité de l'œil à la chrominance est simplement de sous-échantillonner les signaux de chrominance. Généralement, on utilise un sous-échantillonnage de type 2h1v ou 2h2v. Dans le premier cas (le plus utilisé), on a un sous-échantillonnage 2:1 horizontalement et 1:1 verticalement ; dans le deuxième cas, on a un sous-échantillonnage 2:1 horizontalement et verticalement. Ces sous-échantillonnages sont utilisés pour les chrominances, pour la luminance on n’utilise jamais de sous-échantillonnage.

Transformée DCT

La transformée DCT (Discrete Cosine Transform, en français transformée en cosinus discrète), est une transformation numérique qui est appliquée à chaque bloc et pour chaque « couleur ». Cette transformée est une variante de la transformée de Fourier. Cette méthode permet de décrire chaque bloc en une carte de fréquences et en amplitudes plutôt qu'en pixels et couleurs. La valeur d’une fréquence reflète l’importance et la rapidité d’un changement, tandis que la valeur d’une amplitude correspond à l’écart associé à chaque changement de couleur.

À chaque bloc de N\cdot N pixels sont ainsi associées N\cdot N fréquences

La transformée DCT s’exprime mathématiquement par :

\mathrm{DCT}(i, j)=\frac{2}{N}C(i)C(j)\sum_{x=0}^{N-1}\sum_{y=0}^{N-1} \mathrm{pixel}(x, y) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Équation 1 : Transformée DCT directe.

Et la transformée DCT inverse s’exprime par :

\mathrm{pixel}(x, y)=\frac{2}{N}\sum_{i=0}^{N-1}\sum_{j=0}^{N-1} C(i)C(j)\,\mathrm{ DCT}(i, j) \cos\left[\frac{(2x+1)i\pi}{2N} \right] \cos\left[\frac{(2y+1)j\pi}{2N} \right]
Équation 2 : Transformée DCT inverse.

Dans les deux cas, la constante C\,\! vaut :

C(x)=\left\{\begin{matrix}\frac{1}{\sqrt{2}}& \mathrm{pour}~ x = 0 \\[1ex] 1 & \mathrm{pour}~ x > 0 \end{matrix}\right.
Équation 3 : Définition de la constante C.

Pour illustrer la compression a été repris un exemple complet provenant de Digital Images Compression Techniques de Majid Rabbani et Paul W. Jones.

Matrice (bloc de pixels) de base :

f=\begin{bmatrix} 139 & 144 & 149 & 153 & 155 & 155 & 155 & 155 \\ 144 & 151 & 153 & 156 & 159 & 156 & 156 & 156 \\ 150 & 155 & 160 & 163 & 158 & 156 & 156 & 156 \\ 159 & 161 & 162 & 160 & 160 & 159 & 159 & 159 \\ 159 & 160 & 161 & 162 & 162 & 155 & 155 & 155 \\ 161 & 161 & 161 & 161 & 160 & 157 & 157 & 157 \\ 162 & 162 & 161 & 163 & 162 & 157 & 157 & 157 \\ 162 & 162 & 161 & 161 & 163 & 158 & 158 & 158 \end{bmatrix}
Équation 4 : Matrice d’origine.

En effectuant la transformée DCT on obtient la matrice des fréquences suivante :

F=\begin{bmatrix} 1260 & -1 & -12 & -5 & 2 & -2 & -3 & 1 \\ -23 & -17 & -6 & -3 & -3 & 0 & 0 & -1 \\ -11 & -9 & -2 & 2 & 0 & -1 & -1 & 0 \\ -7 & -2 & 0 & 1 & 1 & 0 & 0 & 0 \\ -1 & -1 & 1 & 2 & 0 & -1 & 1 & 1 \\ 2 & 0 & 2 & 0 & -1 & 1 & 1 & -1 \\ -1 & 0 & 0 & -1 & 0 & 2 & 1 & -1 \\ -3 & 2 & -4 & -2 & 2 & 1 & -1 & 0 \end{bmatrix}
Équation 5 : Matrice transformée DCT.

Remarques

Le calcul d’une DCT est complexe. C’est l’étape qui coûte le plus de temps et de ressources dans la compression et la décompression JPEG, mais c’est peut-être la plus importante car elle nous a permis de séparer les basses fréquences et les hautes fréquences présentes dans l’image.

La puissance de calcul disponible aujourd’hui, alliée à des algorithmes de type FFT très efficaces, permet de rendre le temps de calcul tout à fait acceptable pour l’utilisateur courant, voire imperceptible pour les machines les plus puissantes.

Quantification

La quantification est l’étape dans laquelle on perd réellement des informations (et donc de la qualité visuelle), mais c'est celle qui fait gagner beaucoup de place (contrairement à la DCT, qui ne compresse pas).

La DCT a retourné, pour chaque bloc, une matrice de 8×8 nombres (dans l’hypothèse que les blocs de l’image font 8×8 pixels). La quantification consiste à diviser cette matrice par une autre, appelée matrice de quantification, et qui contient 8×8 coefficients savamment choisis par le codeur.

Le but est ici d’atténuer les hautes fréquences, c’est-à-dire celles auxquelles l’œil humain est très peu sensible. Ces fréquences ont des amplitudes faibles, et elles sont encore plus atténuées par la quantification (les coefficients sont même ramenés à 0).

Voici le calcul permettant la quantification :

F^*(u, v) = \left \lfloor { F(u, v) + \left \lfloor {Q(u, v) \over 2 } \right \rfloor \over Q(u, v) } \right \rfloor \cong entier le plus proche \left( { F(u, v) \over Q(u, v) } \right)
Avec :  \lfloor x \rfloor entier directement inférieur à x\,\!
Équation 6 : Calcul de la quantification.

Et pour la quantification inverse :

\hat F(u, v) = F^*(u, v) \cdot Q(u, v)
Équation 7 : Calcul de la quantification inverse.

Comme le montre l’image ci-dessous, la quantification ramène beaucoup de coefficients à 0 (surtout en bas à droite dans la matrice, là où sont les hautes fréquences). Seules quelques informations essentielles (coin en haut à gauche) sont gardées pour représenter le bloc.

L'intérêt est qu'au moment de coder le résultat dans le fichier, la longue suite de zéros nécessitera très peu de place !

Mais si la quantification est trop forte (= taux de compression trop élevé), il y aura trop peu de coefficients non nuls pour représenter fidèlement le bloc ; dès lors, à l’écran la division en blocs devient visible, et l'image apparaît « pixellisée ».

Dans notre exemple, nous avons pris la matrice de quantification suivante :

Q=\begin{bmatrix} 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\ 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\ 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\ 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\ 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\ 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\ 49 & 64 & 78 & 87 & 103 & 121 & 120 & 101 \\ 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99 \end{bmatrix}
Équation 8 : Matrice définissant le niveau de quantification.

Ce qui donne comme matrice des fréquences quantifiée :

F^*=\begin{bmatrix} 79 & 0 & -1 & ~0~ & ~0~ & ~0~ & ~0~ & ~0~ \\ -2 & -1 & 0 & 0 & 0 & 0 & 0 & 0 \\ -1 & -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 \end{bmatrix}
Équation 9 : Matrice quantifiée.

Remarques

Codage, compression RLE et Huffman

Le codage s’effectue en zigzag comme le montre la figure suivante et se termine par un caractère de fin :

Ordre de codage défini par la norme JPEG
Figure 2 : Ordre de codage défini par la norme JPEG.

Codage de notre exemple : 79, 0, -2, -1, -1, -1, 0, 0, -1, EOB\,\!.

Ce résultat est ensuite compressé selon un algorithme RLE basé sur la valeur 0 (le codage RLE intervient uniquement sur cette dernière), puis un codage entropique de type Huffman ou arithmétique.

Avec le schéma de codage très simplifié suivant, on remarque que le codage nous délivre deux tables (quatre pour une image couleur). Ces tables étant enregistrées dans le fichier final peuvent être choisies par le compresseur.

Schéma de codage simplifié
Figure 3 : Schéma de codage simplifié.

Décompression JPEG

Les étapes de la décompression s’effectuent dans l’ordre inverse de la compression suivant les méthodes définies précédemment (en même temps que la compression).

Voici dans notre exemple le résultat de la décompression :

 f=\begin{bmatrix} 144 & 146 & 149 & 152 & 154 & 156 & 156 & 156 \\ 148 & 150 & 152 & 154 & 156 & 156 & 156 & 156 \\ 155 & 156 & 157 & 158 & 158 & 157 & 156 & 155 \\ 160 & 161 & 161 & 162 & 161 & 159 & 157 & 155 \\ 163 & 163 & 164 & 164 & 162 & 160 & 158 & 156 \\ 163 & 163 & 164 & 164 & 162 & 160 & 158 & 157 \\ 160 & 161 & 162 & 162 & 162 & 161 & 159 & 158 \\ 158 & 159 & 161 & 161 & 162 & 161 & 159 & 158 \end{bmatrix}
Équation 10 : Résultat de la décompression.

Ainsi que la matrice d’erreur :

e=\begin{bmatrix} -5 & -2 & 0 & 1 & 1 & -1 & -1 & -1 \\ -4 & 1 & 1 & 2 & 3 & 0 & 0 & 0 \\ -5 & -1 & 3 & 5 & 0 & -1 & 0 & 1 \\ -1 & 0 & 1 & -2 & -1 & 0 & 2 & 4 \\ -1 & 0 & 1 & -2 & -1 & 0 & 2 & 4 \\ -2 & -2 & -3 & -3 & -2 & -3 & -1 & 0 \\ 2 & 1 & -1 & 1 & 0 & -4 & -2 & -1 \\ 4 & 3 & 0 & 0 & 1 & -3 & -1 & 0 \end{bmatrix}
Équation 11 : Matrice des erreurs réalisées par les pertes.

Remarques

Les erreurs sont au maximum de 5 et en moyenne 1,6 sur environ 150 ce qui nous donne une erreur moyenne d’environ 1 %, et tout cela pour un passage de 64 à 10 valeurs (avec le caractère de fin) ; à cela il faut rajouter la matrice de quantification, mais comme généralement on compresse de gros fichiers, elle n’influence que peu.

JPEG, codage sans pertes

Ici, la précision p des échantillons varie de 2 à 16 bits. À la place de la DCT, le codage utilise un prédicteur P à trois échantillons.

Schéma de compression JPEG sans pertes
Figure 4 : Schéma de compression JPEG sans pertes.
Page générée en 1.207 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise