La compression de données

Le format JPEG

Cette partie va décrire le format de compression JPEG. Il commencera par effectuer une description du format avant de traiter des différentes techniques utilisées dans le cadre de la compression.

Logo JPEG

Description

Le format JPEG (Joint Photographic Experts Group) est un format d’image compressée qui offre une bonne compression pour une qualité très correcte. Ces deux avantages en font l’un des formats d’image les plus répandus, particulièrement sur le web où les problématiques de transfert et de stockage sont importantes.

Les spécifications de ce format ont commencés entre 1978 et 1980 mais c’est en 1991 que fut déposée la norme JPEG et en 1992 qu’elle fut adoptée. La paternité de ce format est communément attribuée à IBM mais celle-ci fut revendiquée par Forgent en 2006 puis Global Patent Holdings en 2007.

Le format JPEG est représenté par les fichiers .jpeg ou .jpg et offre des taux de compressions allant de 3 à 100 (autrement dit, le fichier est 3 à 100 fois plus petit que l’image d’origine).

Son successeur existe déjà : il s’agit du format JPEG 2000. Ce dernier offre une meilleure compression pour une qualité bien plus importante. Cependant, le format JPEG 2000 est un format propriétaire ce qui freine sa diffusion. Il n’est donc utilisé que dans un cadre professionnel restreint. A titre d'exemple, l'illustration ci-dessous compare une même image au format JPEG et au format JPEG2000. Les deux images ont exactement la même taille.

Description du format JPEG2000

Compression/Décompression

La compression d’une image au format JPEG suit un certain nombre d’étapes visant à réduire la place occupée à l’aide de diverses méthodes. Ces étapes sont illustrées dans le schéma ci-dessous :

Schéma de la compression et de la décompression JPEG

Nous allons maintenant décrire chacune de ces étapes permettant la compression. La décompression consistant à effectuer les mêmes étapes de façon inversée, nous ne le décrirons pas outre mesure.

Transformation de couleurs

La première étape consiste à passer du modèle initial des couleurs de l’image (souvent RVB) en modèle de type chrominance/luminance (YCrCb).

Modèles RVB et YCrCb

Ce modèle définit un pixel en fonction de sa luminance (intensité de la couleur) et de deux informations de chrominance (la couleur du pixel).

Cette étape va permettre de préparer la prochaine étape : le sous-échantillonnage.

Le sous-échantillonnage

L’objectif ici va être de réduire l’information occupée par la chrominance. Si l’œil humain est très sensible à la luminance, elle distingue par contre très mal la chrominance. Ainsi, une perte d’information sur ce point passera relativement inaperçu.

On distingue 3 types majeurs de sous-échantillonnages.

Le 4:4:4 est un sous-échantillonnage qui consiste à ne rien faire. Aucune compression n’est effectuée et aucune perte de qualité ne peut être enregistrée.

Le sous-échantillonnage 4:4:4

Le 4:2:2 est un sous-échantillonnage qui consiste à supprimer les informations de la chrominance sur une colonne sur deux. La colonne restante possède alors la moyenne des chrominances des deux colonnes. Lors de la décompression, il suffira de recopier cette information sur la colonne vide.

Le sous-échantillonnage 4:2:2

Le 4:2:0 est un sous-échantillonnage qui effectue le même processus que le 4:2:2 mais en effectuant aussi cette opération sur les lignes. On divise donc ici par 4 l’information de la chrominance.

Le sous-échantillonnage 4:2:0

Le découpage en bloc de pixels

à partir d’ici, la compression va travailler sur des blocs de pixels seulement. Ces blocs sont des matrices de pixels 8*8 soient 64 pixels.

Un exemple de bloc de pixel

DCT

La DTC (Discrete Cosine Transform) est une étape qui permet d’évaluer l’amplitude des changements d’un pixel à l’autre afin d’identifier les hautes et basses fréquences. Les basses fréquences, très présentes dans une image, sont des zones unies où les couleurs sont proches les unes des autres. A l’inverse, les hautes fréquences sont des zones de contraste, de changement rapide dans les couleurs.

Cette étape consiste à appliquer à notre matrice de pixels la formule mathématique du DCT afin d’obtenir une matrice des fréquences. Cette matrice sera utilisée dans la prochaine étape : la quantification.

Un exemple de DCT

La Quantification

La quantification a pour objectif d’atténuer les hautes fréquences d’une image qui ont été mis en évidence par la DCT. L’œil humain distingue mal les zones de contrastes (les hautes fréquences) et la quantification va permettre de diminuer l’importance de ces informations superflues.

La technique est simple. Il suffit de diviser notre matrice des fréquences avec la matrice de quantification pour obtenir notre matrice quantifiée.

Cette matrice a un avantage qui sera utilisée dans la prochaine étape : les valeurs non nulles ne sont toutes situées dans le bord haut-gauche de la matrice.

Un exemple de Quantification

Le codage

La dernière étape de la compression est le codage. L’objectif va être d’encoder notre bloc de pixel à l’aide du codage RLE suivit du codage de Huffman.

Le codage RLE est un codage très simple. Il consiste à remplacer toutes les suites de caractères identiques par le nombre de caractères suivit du dit caractère. Par exemple, pour la chaîne "MMMMMMMBBBBMMM", un codage RLE donnerait "7M4B3M"

Comme nous ne savons pas encoder une matrice, nous devons la transformer en chaîne de nombres. Pour cela, nous la parcourons de la façon suivante :

Le parcours de matrice JPEG

Nous obtenons alors la chaîne "79, 0, -2, -1, -1, -1, 0, 0, -1, 0…0" auquel nous appliquons un codage RLE uniquement sur les nombre 0 pour obtenir "79, 1[0], -2, -1, -1, -1, 2[0], -1, 55[0]"

Nous finissons alors par un codage de Huffman pour terminer le codage de ce bloc de pixel. Une fois l’opération appliquée à tous les blocs de pixels, nous obtenons un fichier compressé JPEG.