Un peu d'histoire
Le développement de la numérisation des images au début des années 1980 soulève immédiatement le problème de la taille des fichiers -- que ce soit pour leur stockage, ou pour leur transport sur les réseaux de transmission de données. Considérons, à titre d'exemple, une image de 100x100 pixels (soit environ 3x3 cm lors de l'affichage à l'écran) ; si nous codons sa couleur sur 2 octets ("32K couleurs"), son fichier pèse 20 Ko. Avec les modems des années 80, il faut une à deux minutes pour télécharger cette modeste illustration. Le besoin se fait donc sentir de développer une technique de compression efficace.
Deux grands organismes internationaux de normalisation se mettent donc au travail dès 1982 pour trouver une solution applicable à l'image fixe. Ce sont l'ISO (International Organization for Standardization) et le CCITT (International Telegraph and Telephone Consultative Committee). Le but initial de l'ISO consiste à faciliter le téléchargement des images via une ligne téléphonique ISDN -- une technique nouvelle dont on attend beaucoup. En 1986, un comité commun, appelé Joint Photographic Experts Group (d'où le sigle JPEG), est créé pour éviter la duplication des efforts.
Au milieu des années 1980, les experts du JPEG sont convaincus qu'une technique de compression sans perte d'information, quoique théoriquement fort satisfaisante pour l'esprit, ne permettra pas d'obtenir un taux de compression important (tel que 1:10 ou plus) pour les images en tons continus, contrairement à ce qui se passe pour l'image au trait. Pour des raisons qui sont exposées plus loin, ils décident de transformer les données de couleur en fréquences, et donc faire choix d'une technique mathématique adéquate.
En 1987, une présélection est effectuée entre les diverses transformations mathématiques utilisables. En 1988, le choix final se porte sur la transformation DCT (Discrete Cosine Transform), qui donne les meilleurs résultats lors des essais systématiques menés pendant un an. Le terme "discrete" rappelle que la transformation opère sur un nombre fini de pixels, et donc que les intégrations sont remplacées par des sommes. Le terme "cosine" rappelle que la transformation fait appel à la fonction trigonométrique cosinus.
La norme internationale JPEG est publiée en 1992, les tests de compatibilité en 1994, les extensions en 1997 (image progressive), et les profils pour la gestion de la couleur en 1999. On notera que le sigle JPEG désigne le mode de compression, le format étant initialement appelé JFIF. L'usage a confondu les deux sous le nom JPEG.
L'utilisation du format JPEG sur le web commence laborieusement en 1993, les images s'affichant dans une fenêtre séparée à l'aide d'une application particulière. Les performances limitées des cartes graphiques de cette époque, et quelques modifications du mode de compression, limitent la diffusion du nouveau format pendant plusieurs années. Aujourd'hui, le format JPEG vient juste après le format GIF pour la diffusion des images sur le web. C'est le format de choix pour les images en tons continus -- sauf pour les images de petite taille, dont le nombre de couleurs est forcément limité, et pour lesquelles les formats GIF et PNG fournissent des fichiers plus légers.
Tout est pour le mieux dans le meilleur des mondes possible... sauf que, en juillet 2002, une petite société (Forgent Networks) annonce que la technique de compression JPEG utilise un brevet en sa possession, et qu'elle exige des redevances de tous les utilisateurs. Pour les aficionados du logiciel libre, le cauchemar de l'image GIF recommence. De plus, l'affaire peut durer quelque temps, car la validité du brevet ne cessera pas avant 2006. Pour l'instant, deux grandes entreprises japonaises opérant dans le domaine de la photographie numérique (dont Sony) ont acquis en 1992 une licence auprès de Forgent, pour la coquette somme de 15 millions de dollars chacune. Depuis, on n'a plus de nouvelles.
Cette affaire a provoqué la colère de l'ISO (l'organisme international de normalisation), qui a menacé d'annuler la norme JPEG. La position du W3C est plus rassurante : la "version de base" du format JPEG semble libre de droits, mais les nombreuses améliorations qui y ont été apportées sont généralement protégées par des brevets. Le web ne paraît donc pas menacé, car les images JPEG qui s'y trouvent font le plus souvent appel à la version de base.
Ceci dit, il est clair que la politique américaine en matière de brevetabilité du logiciel crée des situations défavorables au progrès technique -- un véritable paradoxe. Hélas ! l'Union Européenne s'apprête à suivre à peu près la même voie...
Les bases de la compression JPEG
Comme nous l'avons indiqué plus haut, les techniques de compression sans pertes, qui conviennent bien à l'image au trait, donnent des taux de compression insuffisants pour l'image en tons continus. Cela tient au fait que, dans une image en tons continus (ci-dessous, à droite), la couleur est répartie sur tout le spectre des valeurs possibles, alors qu'elle est concentrée sur quelques valeurs discrètes pour une image au trait (ci-dessous, à gauche).
Dessin au trait (graphique) | Image en tons continus (photo) |
Le dessin au trait présente généralement une structure simple, il utilise peu de couleurs, et les transitions abruptes y sont fréquentes. On y trouve de nombreux motifs répétitifs, que l'on peut mettre en "bibliothèque"(ou "dictionnaire"), et dont on se sert pour décrire l'image. C'est ainsi que fonctionne le procédé de compression LZW, mis aupoint dès 1983, et appliqué au format GIF en 1987.
L'image en tons continus possède une structure plus complexe que le dessin au trait. Elle utilise des couleurs beaucoup plus nombreuses, les transitions y sont moins abruptes, les aplats n'existent pas -- ils sont remplacés par des zones de transition douce (exemples : le bleu du ciel et la neige dans la photographie ci-dessus). Un procédé de compression tel que LZW perd alors toute efficacité, car il ne trouve pas de motifs répétitifs dans l'image.
Pour compresser l'image en tons continus, on met à profit le fait que la plupart des transitions de couleur sont douces : de nombreux pixels ont des couleurs très voisine, et l'oeil (qui est plus sensible aux variations de luminosité qu'aux variations de teinte) ne les différencie pas. On commence donc par remplacer les données de l'espace colorimétrique RVB par celles de l'espace YUV (luminosité, teinte et saturation). Puis on fait subir aux données une transformation mathématique de type Fourier, de manière à ce que les variations de couleur soient traduites en fréquences. On élimine les fréquences basses (c'est à dire les variations lentes de couleur) et on quantifie. L'ensemble des données présente alors une structure simplifiée, ce qui permet d'appliquer une compression non dégradante (Huffman). Pour afficher l'image, on procède en sens inverse. On notera que l'élimination des fréquences basses et la quantification entraînent une perte d'information. Il ne faut donc jamais utiliser la compression JPEG pour un fichier destiné à être utilisé dans un programme d'analyse automatique d'image, par exemple. Les images JPEG sont destinées à être vues par l'oeil humain, pas par une machine.
L'optimisation de l'image JPEG
Les artefacts. Le taux de compression d'une image JPEG est réglable. Plus ce taux est élevé, plus le fichier résultant est léger, et plus l'image est dégradée. Il faut donc réaliser un compromis entre poids et qualité. On évite généralement de compresser trop fort, sous peine de faire apparaître des artefacts (block-artifacts), en forme de pavés de 8x8 pixels, comme le montre la figure ci-dessous. L'image de gauche représente un dégradé linéaire régulier (tracé à 45 degrés, dans un carré de 40x40 pixels), auquel nous avons ajouté du flou gaussien (15 pixels de rayon) pour tuer les éléments de symétrie. L'image de droite représente la même image en version jpeg de basse qualité ; on y distingue clairement des blocs de 8 pixels de côté (5 blocs dans chaque direction). Les deux images sont représentées à l'échelle 4.
image initiale (x4) |
version jpeg très compressée (x4) |
Sur une image possédant des éléments de symétrie, la combinaison des artefacts en forme de blocs peut créer une sur-structure qui modifie fortement l'aspect de l'image, comme le montre la figure ci-dessous. L'image initiale représente un dégradé en étoile de 64 pixels de coté. Elle a été enregistrée au format JPEG, au taux de compression maximal (à droite) et au taux minimal (à gauche). Les deux images sont représentées à l'échelle 2.
Compression JPEG minimale (x2) |
Compression JPEG maximale (x2) |
Les artefacts en forme de pavé proviennent du fait que les calculs requis par la compression JPEG ne traitent pas l'image entière d'une seul coup, mais la divisent en blocs de 8 pixels de côté, et traitent chaque bloc successivement. Si un bloc est très dégradé (forte compression), il ne se raccorde pas correctement avec ses voisins, et l'oeil s'en aperçoit. A l'époque où le format JPEG a été conçu, cette façon de procéder par bloc était nécessaire pour réduire le temps de calcul et tenir compte des possibilités des micro-ordinateurs du moment.
Le rôle du logiciel de dessin. Le développement du web et de la photographie numérique ont fait faire de sérieux progrès à la technique de compression des images JPEG, comme le montre la figure ci-dessous. L'image de gauche a été générée dans la version 5 de Photoshop ; pour éviter un artefact localisé au sommet du dégradé (une tache rouge foncé), nous avons dû utiliser la qualité moyenne (5/10). La figure de droite a été générée dans la version 7 de Photoshop, à l'aide de la fonction "Enregistrer pour le web..." ; pour éliminer le même artefact, nous avons dû utiliser la qualité 70/100. Pour un résultat semblable, le passage de la version 5 à la version 7 entraîne un gain de poids remarquable. Une partie de ce gain s'explique par le fait que Photoshop n'enregistre que les champs strictement nécessaires (pas de profil de couleur, par exemple, ce qui fait gagner 3 Ko).
Photoshop v.5 Qualité 5/10 Poids : 6440 octets |
Photoshop v.7 Qualité 70/100 Poids : 1624 octets |
Attention ! il est fortement déconseillé d'utiliser la fonction "Enregistrer sous..." et de choisir le format JPEG dans la version 7 de Photoshop. D'abord, le fichier est beaucoup plus lourd que s'il était généré via la fonction "Enregistrer pour le web...", et surtout il a la réputation de faire "planter" certains navigateurs. Cette désagréable propriété tiendrait à la façon dont le logiciel traite le champ réservé aux informations sur les profils de couleur.
Face à un dégradé complexe, les images GIF et PNG ne peuvent pas faire aussi bien que l'image JPEG, comme le montre la figure ci-dessous. Dans une précédente publication, nous étions arrivés à la conclusion inverse, parce que nous avions utilisé exclusivement la version 5 de Photoshop (la routine !). Veuillez accepter nos plus plates excuses...
GIF (64 couleurs) Poids : 3894 octets |
PNG (64 couleurs) Poids : 3519 octets |
Les limitations du format JPEG
La compression JPEG fonctionne mal dans les zones de fort gradient de couleur ; elle maltraite les contours. Par contre, elle respecte les aplats, dès que l'on s'éloigne suffisamment des contours. La figure ci-dessous illustre cette propriété.
L'image de départ est un carré blanc de 80 pixels de côté, contenant un cercle plein de couleur magenta uniforme, non lissé, et de 64 pixels de diamètre. A gauche se trouve, agrandie 3 fois, l'image JPEG correspondante enregistrée au taux de compression maximum. On constate l'exagération du contour (couleur plus foncée), et des artefacts en forme de pavés.
Sur l'image du centre, nous avons représenté (dans une teinte plus claire) la zone d'aplat magenta respectée par la compression. On constate que tout l'intérieur du cercle en fait partie, sauf les blocs 8x8 qui chevauchent le contour.
Sur l'image de droite, nous avons représenté en jaune la zone d'aplat blanc respectée par la compression. Cette fois, la situation est moins claire. Un peu de couleur pâle a été introduite dans des blocs 8x8 qui ne chevauchent pas le contour, ce qui parait difficile à expliquer.
dégradation du contour, compression JPEG maximale (x3) |
zone d'aplat magenta non dégradé, représentée en magenta clair(x3) |
zone d'aplat blanc non dégradé, représentée en jaune (x3) |
On voit clairement sur ces images que la compression JPEG dégrade les contours, ainsi que les aplats au voisinage immédiat des contours. C'est pourquoi il faut éviter d'utiliser le format JPEG pour le dessin au trait, ainsi que pour toutes les images comportant du texte -- à moins de disposer d'un logiciel de dessin permettant d'appliquer des taux de compression différents dans deux zones distinctes de la même image. Une autre technique, très à la mode ces dernières années, consiste à découper l'image en plusieurs morceaux, puis à utiliser pour chacun d'eux le format le plus performant. Dans la page HTML, à l'aide d'un tableau invisible, on rassemble les morceaux pour reconstituer l'image initiale. Cette façon de procéder ne présente de l'intérêt que pour les images de grande taille.
Le format JPEG 2000
Depuis 1995, les experts cherchent à perfectionner le mode de compression du format JPEG. Une technique de compression par ondelettes (DWT : Discrete Wavelet Transform), réputée être deux fois plus efficace que la méthode DCT et ne pas créer d'artefact, sert de base au nouveau format intitulé JPEG2000, dont on pense qu'il remplacera à plus ou moins long terme l'actuel JPEG. Pour l'instant, ce nouveau format n'est pas utilisé sur le web. Sa lecture nécessite le téléchargement d'un plug-in (gratuit), et les internautes se méfient de cette procédure, à cause de la prolifération du spyware. Les logiciels classiques de dessin matriciel (ex : Photoshop) ne permettent pas pour l'instant d'enregistrer les images au format JPEG2000, à moins de leur adjoindre un filtre (à titre onéreux) créé par un éditeur spécialisé. Enfin, l'introduction d'une image JPEG2000 dans une page web requiert l'utilisation de la balise embed au lieu de la classique balise img (le type MIME correspondant est : image/jp2).
Exemple :
<embed src="essai.jp2" width="200" height="150" type="image/jp2">
La diffusion de ce nouveau format (extension "jp2", au lieu de "jpg" ou "jpeg") semble pour l'instant limitée à certains intranet véhiculant des images nombreuses et de grande taille (en milieu médical, par exemple). Sa normalisation est en cours à l'ISO.
Conclusion
Le format JPEG est maintenant parfaitement stabilisé, et les logiciels récents de traitement d'image maîtrisent bien sa compression. Ce format est sans rival sur le web pour l'affichage des images en tons continus, à l'exception de celles de très petite taille, pour lesquelles les formats GIF et PNG restent plus performants. Lors de l'optimisation d'une image JPEG, il faut absolument éviter de trop baisser la qualité (c'est à dire de trop compresser) sous peine de créer des artefacts épousant la forme d'un pavage.
Le format JPEG semble avoir de beaux jours devant lui, et son remplacement par le format JPEG2000 ne semble pas être à l'ordre du jour sur la toile. Enfin, les remous de l'affaire Forgent (brevets) ne devraient pas perturber le web (croisons les doigts).