Les rotations de «Windows Photo Viewer» sont-elles sans perte?

58

Puis-je faire pivoter des photos compressées avec perte que je visualise dans la visionneuse de photos Windows sans craindre de perdre encore plus d'informations grâce à la compression?


la source
1
Notez que - pour autant que je sache - une rotation de 90 degrés (et 180, 270) est sans perte en elle-même, car il s’agit d’un échange de coordonnées x et y (les autres angles nécessitent une interpolation). Toute perte attribuée à la transformation provient donc de la recompression. Vous pouvez éviter cette recalcul en sauvegardant l'image transformée dans un format sans perte, mais comme cela ne fait clairement pas partie de votre question, je ne le suggérerai donc pas
horatio
5
@horatio, les multiples de 90 degrés constituent un cas particulier pour la compression JPG, où il est techniquement possible de faire pivoter l'image sans cycle de compression en réorganisant "simplement" les données compressées. Cela implique de supprimer et d'appliquer une couche de compression sans perte, de sorte que la taille du fichier puisse changer, mais aucune opération avec perte n'est requise.
RBerteig
1
Je pense que je vous comprends bien, mais ce que je veux dire, c'est que jpeg est un format de stockage sur disque et n’a aucune incidence sur la qualité des transformations elles-mêmes. C'est-à-dire, bien que l'on parle souvent de travailler avec des fichiers JPEG, etc., alors que le fichier est affiché à l'écran et manipulé, ce n'est pas un fichier JPEG.
Horatio
1
J'ai toujours voulu savoir la réponse à cette question. IMO ils devraient être. Mais probablement en raison de la norme JPEG ... Je ne pense pas qu'il soit techniquement possible de réaliser cette opération sans perte.
Trevor Boyd Smith
2
La visionneuse d'images Google Picasa EST sans perte. mais ça triche. il ne fait pas pivoter l'image. il suffit de marquer dans les métadonnées "afficher cette image tournée".
Trevor Boyd Smith

Réponses:

64

Si les dimensions de l'image sont des multiples de 8 (ou 16 si un sous-échantillonnage de la chrominance est utilisé), les rotations sont sans perte. Sinon, il n'est pas possible de faire pivoter l'image sans recalculer les blocs, c'est-à-dire recomprimer l'image, ce qui entraîne des pertes.

La raison en est que les images JPEG sont divisées en une série de blocs 8x8 ou 16x16 qui sont compressés individuellement. Les blocs incomplets ne sont autorisés que sur le bord droit et le bord inférieur. Ainsi, si votre image n’est pas un multiple exact de 8/16, elle contiendra des blocs incomplets, qui se retrouveront sur le mauvais bord après la rotation.

J'ai vérifié l'assertion ci-dessus à l'aide de la version de Windows Photo Viewer fournie avec Windows 7. J'ai utilisé deux images de bruit de couleur. Une image faisait 256x256, c'est-à-dire que les deux tailles étaient des multiples de 8. L'autre image était identique mais recadrée à 253x253, c'est-à-dire qu'aucune des deux tailles n'était un multiple de 8. Voici les images:

256x256

253x253

J'ai ensuite effectué quatre rotations dans le sens inverse des aiguilles d'une montre, fermant la visionneuse de photos après chaque rotation pour garantir que l'image était enregistrée dans son état pivoté.

256x256

253x253

Il n'est pas nécessaire d'effectuer une soustraction pour voir la différence avec l'image de 253 pixels, elle est visiblement plus sombre et plus trouble!

Un diff sur l'autre image ressemble à ceci:

c'est-à-dire que les images sont identiques, les rotations étaient sans perte.

Matt Grum
la source
1
Je sais que par le passé, lorsque j’ai effectué des rotations, cela m’avait prévenu que la rotation serait une perte, ce qui implique que dans les cas où l’avertissement n’était pas affiché, la transformation était sans perte, mais je n’ai pas vérifié. Je ne me souviens pas non plus de la version de WPV que j'utilisais, sans exclure la possibilité que MS modifie le code, donc je ne peux pas en être sûr.
Matt Grum
1
@Tim une image de bruit pur est par définition le pire des cas pour jpeg (ou tout algorithme de compression), c'est pourquoi je l'ai choisie! Les résultats sur des images réelles seraient meilleurs.
Matt Grum
1
@ MattGrum, démo très cool. J'espère que tous les fabricants d'appareils photo numériques ont des tailles d'image multiples multiples de 8!
Trevor Boyd Smith
1
@ MattGrum J'avais l'habitude de travailler sur l'équipe WPV. Autant que je sache (et j'en suis presque sûr), votre réponse est correcte. En outre, +1 pour une méthode très complète de prouver votre hypothèse
:)
@TrevorBoydSmith toutes les caméras que j'ai vues ont des dimensions d'image multiples de 8 ou 16. La rotation n'est pas nécessairement la raison, elle peut permettre juste une optimisation du pipeline JPEG.
Mark Ransom