[retour]
...et n'hésitons pas, car le JPG supporte mieux la torture qu'on ne le dit souvent.
On entend souvent des affirmations du type "Il ne faut pas retoucher les fichiers JPG", "Il ne faut pas réenregistrer en JPG un fichier JPG après modifications", etc... Vraies en théorie, nous allons voir que ces affirmations peuvent être très fortement nuancées en pratique.
Les problèmes potentiels posés par le format JPG sont de deux ordres: la quantification en 8 bits au lieu de 12 pour la plupart des formats RAW des APN (ou 12 ou 14 ou 16 pour les scanners), et les artefacts de compression. La quantification en 8 bits ne permet que 256 niveaux par couche: bien que largement suffisants pour l'oeil humain, ces 256 niveaux peuvent être limitant dans un contexte de retouche d'image. Les artefacts de compression, quant à eux, résultent de la perte d'information lors de la compression, et sont assimilables à un bruit introduit par la compression.
Pour les tests présentés sur cette page, on utilise des crops issus de cette image:
![]() |
Ici, le test consiste à ouvrir le fichier d'origine, le réenregistrer en JPG sans rien modifier, le fermer, réouvrir le JPG, le réenregistrer en JPG, etc... La figure ci-dessous montre l'image originale, puis l'image obtenue après 1 cycle de décompression/compression, 3 cycles, et 10 cycles (les crops sont au format PNG, sans perte, afin de ne pas introduire une compression JPG supplémentaire au moment du crop).
Dans le premier cas, j'ai réglé les paramètres JPG pour avoir une haute qualité (-quality 89 -sampling-factor 1x1 dans ImageMagick; je pense que ça correspond à la qualité 10 (sur 12) environ dans Photoshop). A l'oeil nu, les 4 images semblent parfaitement identiques, même après 10 cycles de décompression/compression. C'est ainsi à mon avis qu'il faudrait toujours utiliser le JPG en photographie: chercher la plus haute compression possible sans qu'il apparaisse des artefacts visibles à l'oeil nu.
Dans le second cas, j'ai poussé la compression (-quality 40 -sampling-factor 2x1) pour faire apparaître des artefacts. Après 1 cycle on les voit clairement, mais ensuite ils n'augmentent pas: l'image après 10 cycles ressemble furieusement à celle après 1 cycle. En fait, la plupart des dégradations apparaissent dès la première compression, et se stabilisent ensuite: il n'y a pas d'effet cumulatif.
De gauche à droite: image originale, puis après 1, 3, et 10 cycles de décompression/recompression JPG (haute qualité) |
![]() ![]() ![]() ![]() De gauche à droite: image originale, puis après 1, 3, et 10 cycles de décompression/recompression JPG (forte compression) |
L'exercice de recompression sans modification est certes instructif, mais dans la vie normale on ne s'amuse guère à ce genre de manipulation. Il est plus intéressant alors de regarder ce qui se passe si avant chaque recompression on modifie l'image.
Dans ce premier exemple, on modifie à chaque cycle la luminosité de l'image (par une loi de gamma). On revient à la luminosité d'origine uniquement pour comparer les images entre elles. Après 1 cycle, on ne voit aucune différence à l'oeil nu. Après 3 cycles, on commence à deviner un léger moutonnement dans les zones très lisses. Après 10 cycles, les artefacts deviennent évident dans les zones lisses, mais restent discrets (si ce n'est invisibles) dans les zones détaillées.
De gauche à droite: image originale, puis après 2, 4, et 10 cycles de décompression/recompression JPG (haute qualité), avec modification de luminosité à chaque cycle.
|
Dans le second exemple, on décale à chaque cycle l'image entière de 1 pixel dans les deux directions: ainsi les blocs JPG 8x8pixels sont différents à chaque fois. Après 1 cycle, on voit déjà de légers artéfact au niveau des contours, mais uniquement sur les zones très lisses. Les zones texturées sont épargnées. Après 3 cycles, les artefacts sont plus présents sur les zones lisses, mais les zones texturées sont toujours relativement épargnées. Après 10 cycles, les artefacts sont très présents, y compris dans les zones texturées.
De gauche à droite: image originale, puis après 2, 4, et 10 cycles de décompression/recompression JPG (haute qualité), avec décalage d'un pixel à chaque cycle.
|
En conclusion, on voit que le JPG encaisse assez bien des modifications avant recompression. La tolérance est assez importante quand on modifie les valeurs des pixels sans les déplacer, et moins importante si on déplace les pixels (ce qui arrive lors d'un recadrage par exemple). Dans tous les cas, l'impact est le plus visible sur les zones lisses, et beaucoup moins sur les zones texturées.
(sur une idée de Charles Vassallo (ici))
Toute modification des niveaux (quel que soit l'outil utilisé) tend à réduire le nombre de ceux-ci, ce qui se traduit par le tant redouté histogramme en peigne. Est-ce si grave, docteur ?
L'expérience ci-dessous consiste à réduire le nombre de niveaux de l'image. Par exemple, avec les courbes, en amenant le point blanc (255,255) à (255,127), puis dans un second temps en le ramenant à (255,255), il ne reste plus que 128 niveaux. De manière similaire, on peut réduire le nombre de niveaux à 64, 32, etc.
On voit que sur une zone très lisse comme le ciel, on commence à deviner un impact (léger) en arrivant à 64 niveaux, et l'effet de banding devient net à 32 niveaux, et évidemment encore plus à 16 niveaux. A 128 niveaux on ne voit pas la différence. Dans les zones texturées, par contre, il faut arriver à 16 niveaux pour voir clairement la différence!
|
|
![]() ![]() ![]() ![]() |
![]() ![]() ![]() ![]() |
|
A nouveau, on constate donc qu'une dégradation théoriquement significative n'a finalement que peu d'impact sur une image réelle (il faut arriver à 32 niveaux pour commencer à voir une différence nette). Cette dernière précision est importante, car la même expérience faite sur un dégradé parfait (généré par logiciel) montre un effet de banding bien plus évident pour une réduction à 64 niveaux, et même à 128 niveaux (je vous laisse faire l'expérience). L'explication réside dans le bruit: une image réelle, même apparemment lisse, contient toujours un peu de bruit. Or c'est le qui supprime efficacement l'effet de banding. Pour s'en convaincre, ajoutons du bruit à notre image originale: avec le bruit, même la réduction à 16 niveaux n'entraîne pas de banding.
De gauche à droite: image originale; réduction à 16 niveaux; image originale bruitée; réduction à 16 niveaux de l'image bruitée. |
Cette technique d'injection de bruit avant réduction du nombre de niveaux est connue sous le nom anglais de "noise dithering". Evidemment, l'argent gratuit n'existe pas: ce que l'on gagne en continuité des tons, on le perd dans la résolution des détails à faibles contrastes à cause du bruit.
Quoiqu'il en soit, ces petites manipulations montrent que des trous -même importants- dans les histogrammes ne sont pas forcément des catastrophes: il y a des cas où ça passe très bien (les zones texturées), et d'autres moins bien (les zones très lisses).
Nous avons vu que des fichiers JPG 8 bits supportaient remarquablement bien des manipulations diverses.
Les cycles de décompression/recompression avec retouche de l'image, notamment, n'entraînent des artéfacts gênants qu'au bout de plusieurs cycles. Les artefacts les plus forts se notent quand l'image est décalée (lors d'un recadrage par exemple), et sur les zones les plus lisses. Les modifications n'affectant que les valeurs des pixels, de même que les zones texturées, posent moins de problèmes.
De même, les réductions de niveaux, avec effets de trous dans les histogrammes, ont finalement peu (voire pas du tout) d'impact sur les images réelles (jusqu'à un certain point, bien sûr).
Bien sûr, tout cela suppose de travailler avec des compressions JPG relativement faibles, qui privilégient la qualité. Et comprenons-nous bien: dans l'absolu, il est préférable de sauvegarder dans formats non compressés (ou compressés sans pertes) les images destinées à être éditées et retouchées. Néanmoins, quand cela est impossible (APN ne produisant que du JPG, espace limité sur le disque, etc), l'option JPG est parfaitement envisageable sans grand souci.