Images et graphiques pour le web: Le format JPEG
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).
|