
Les sites Web que nous visitons sur la Toile sont maintenant inondés d’images. Cela constitue naturellement un problème de taille, car une quantité énorme d’informations doit être transférée du serveur jusqu’à notre ordinateur. Pour accélérer le traitement de ces images, il faut compresser celles-ci. Ce procédé diminue le poids de l’image en ne sacrifiant pas ou presque pas la qualité.
Il existe plusieurs formats de compression d’images: JPEG, PNG, GIF, RAW, … Chacun possède ses avantages. Par exemple, avec la compression au format PNG, il n’y a pas de perte de qualité et celui-ci gère la transparence de l’image (très utile pour de beaux effets visuels sur votre site préféré), mais le fichier sera habituellement plus volumineux que si nous avions utilisé la compression au format JPEG. Ce dernier est justement l’un des plus utilisés, car il est bien adapté aux images ayant plusieurs couleurs différentes comme les photographies. Regardons de plus près l’algorithme de compression JPEG dans lequel les mathématiques interviennent à plusieurs étapes.
Première étape:
Changement de repère
Sur l’écran d’un ordinateur, une image est divisée en points appelés pixels. La couleur du pixel affichée sera habituellement donnée par trois nombres entre 0 et 255 (norme RVB) le premier représente l’intensité de rouge; le deuxième, l’intensité de vert et le dernier, l’intensité de bleu. Le rouge, le vert et le bleu sont les longueurs d’onde détectées par les 3 types de cônes situés sur la rétine de nos yeux. Le mélange de ces trois couleurs permet de recréer toutes les couleurs détectables par l’humain. Une image peut donc être décomposée en trois images élémentaires (voir illustrations). Remarquons que dans l’image ii), la carrosserie de l’automobile nous semble presque noire. Cela est dû au fait qu’il n’y a pratiquement pas de teinte de vert sur celle-ci.
Avant de procéder à la compression au format JPEG, il faudra effectuer un changement de repère1 du système à trois composantes RVB (rouge, vert, bleu) vers le système LMN (luminance, chrominance1, chrominance2).
La luminance
La luminance2 contient l’information des niveaux de gris de l’image. Pour la définir, il faut remarquer que la sensibilité de nos yeux n’est pas la même pour les couleurs de base (rouge, vert et bleu). La figure suivante représente les trois couleurs en noir et blanc (plus précisément en niveaux de gris):

Luminance apparente du rouge, du vert et du bleu
Étant donné que le vert est presque au milieu du spectre visible, cette couleur aura la plus grande luminance apparente, suivie par le rouge et le bleu. Après des tests expérimentaux effectués par la Commission internationale de l’éclairage (CIE), la luminance (L) a été définie par la formule suivante:
\[L = 0,299 R + 0,587 V + 0,114 B,\: (^*)\]
où R, V, B sont les composantes du système RVB comprises entre 0 et 255. On remarque que L sera aussi compris entre 0 et 255.
Les chrominances
La chrominance1 (notée M) varie linéairement avec l’écart entre le niveau de bleu et la luminance du pixel. Donc,
\[M = a(B – L) + b. \: (^{**})\]
Pour que M soit compris entre 0 et 255 (après troncature), nous trouvons a = 0,56434 et b =128. En utilisant l’égalité (*) et (**), nous obtenons, en gardant 5 décimales,
\[M=–0,16874R–0,33126V \\+0,5B +128\]
La chrominance2, pour sa part, contient l’information de l’écart entre le niveau de rouge et la luminance \((a (R – L) + b,\) où \(a = 0,71327\) et \(b = 128).\)
Par le même procédé, nous obtenons
\[N=0,5R– 0,41869V – 0,08131B+128.\]
Alors, notre image initiale (dans le système RVB) sera maintenant décomposée en trois images dans le système LMN; (voir illustrations ci-dessous). Nous constatons aisément que la luminance est de loin la plus importante composante du système LMN.
Deuxième étape:
Compression des chrominances
Pour l’instant, nous n’avons pas diminué la taille du fichier image. Étant donné que nos yeux sont moins sensibles aux chrominances (donc aux écarts entre les couleurs), nous allons compresser une première fois en diminuant la quantité d’informations sur les chrominances:
- Considérons le tableau contenant les valeurs de chrominance1 associées à chaque pixel.
- Partageons celui-ci en plusieurs petits tableaux de 4 nombres (2 lignes par 2 colonnes).
- Gardons seulement la moyenne des 4 nombres de chaque petit tableau.
Par exemple, prenons une « image » de 4 pixels par 4 pixels que nous avons décomposée dans le système LMN et regardons la chrominance1 (M) pour chacun des pixels:
Naturellement, cette compression sera aussi effectuée sur la chrominance2. Donc, l’image de 4 pixels par 4 pixels, avant compression, est décrite par 16 nombres pour la chrominance1 (M), 16 pour la chrominance2 (N) et 16 pour la luminance (L), pour un total de 48 nombres. Après la compression, elle est décrite par 4 nombres pour M, 4 pour N et nous gardons les 16 nombres de L, pour un total de 24 nombres. La taille de notre fichier image sera diminuée de moitié!
Lorsque nous voudrons afficher l’image à partir de ce fichier compressé, lors de la décompression, chaque nombre gardé pour la chrominance1 (ou chrominance2) sera reproduit quatre fois.
Troisième étape:
Compression de la luminance
Étant donné l’importance des valeurs de la luminance, celles-ci ne pourront pas être compressées comme précédemment. La conséquence serait une grande perte de la qualité de l’image à la décompression. Le format JPEG utilise plutôt la transformée en cosinus discrète (TCD) où interviennent les fonctions trigonométriques. Ce procédé, énormément utilisé en télécommunication et dans le traitement des sons et des images, permet d’extraire des informations plus importantes que d’autres d’un ensemble de données. L’idée de base de la TCD est de réorganiser les données sur la luminance en soulignant les contrastes entre les pixels plutôt que de garder les informations sur chacun des pixels individuellement. Les contrastes les moins importants sont tout simplement éliminés, diminuant par le fait même la taille de notre fichier image.
Voici un exemple très simplifié qui nous permettra de mieux comprendre le mécanisme derrière la TCD (pour quelques détails sur le vrai calcul de la TCD, voir l’encadré):
Considérons les valeurs de luminance pour 4 pixels:
\[L= \left ( \begin{array}{r c l} 120 & & 124 \\ 123 & & 128 \end{array} \right ) \]
Le premier élément du tableau deviendra la somme de toutes les valeurs (495). Le deuxième élément sera la somme des valeurs de la première colonne moins les valeurs de la deuxième colonne (-9). Ce nombre représente le contraste entre la partie gauche et la partie droite du tableau. Le troisième élément sera la somme des valeurs de la première ligne moins la somme des valeurs de la deuxième ligne (-7). Cela représente le contraste entre la partie du haut et celle du bas. Finalement, le quatrième élément sera la somme de la diagonale principale moins la somme de la diagonale secondaire (1). Le tableau deviendra:
\[L= \left ( \begin{array}{r c l} 495 & & -9 \\ -7 & & 1 \end{array} \right ) \]
(Soulignons qu’il est facile, à partir de ce dernier tableau, de retrouver le tableau initial). Mais quel est l’avantage de cette réorganisation des données? Notre œil sera davantage sensible aux grandes valeurs du tableau. Sans entrer dans les détails, la com- pression consistera à éliminer les plus petites valeurs (en valeur absolue) et réduira alors la taille du fichier image, car il y aura moins de valeurs pour décrire la luminance (dans notre exemple, seules les valeurs 495, -9 et -7 seraient gardées).
Naturellement, le chemin inverse sera encore possible, mais à cause des données éliminées, il y aura une perte de qualité de l’image.
Conclusion
Pour convertir au format JPEG, nous devons donc calculer les composantes LMN, compresser les deux composantes de chrominance, puis finalement compresser la luminance à l’aide de la TCD. Un fichier au format JPEG pourra être le 1/4 de la taille du fichier original avec une perte minime de qualité. On comprend pourquoi le format JPEG est extrêmement utilisé sur le Web.
Pour en s\(\alpha\)voir plus !
- ROUSSEAU, Christiane et SAINT-AUBIN, Yvan. Mathématiques et technologie ( p. 379-406). Édition Springer, 2008.
http://www-ljk.imag.fr/membres/Valerie.Perrier/SiteWeb/node6.html
- Les changements de repère ont déjà été partiellement expliqués dans Accromath, été-automne 2011, p. 22 ↩
- La luminance est définie par l’intensité lumineuse divisée par unité de surface émettrice. Elle n’est ni plus ni moins la sensation visuelle de la lumière. Si nous sommes éblouis par une lampe de poche ou lorsque nous avons de la difficulté à distinguer les détails dans une pièce sombre, c’est la luminance qui est en cause. ↩