Par exemple, pour une conversation récente sur la compression JPEG, je voulais comparer pixel par pixel ce qui a changé entre deux JPEG (une avec un niveau de compression 100 et une avec un niveau de compression 95).
Comment générer de bonnes cartes visuelles de ce qui a changé sans une programmation logicielle personnalisée fastidieuse?
Réponses:
Photoshop + Layers FTW. (Oui, vous pouvez également utiliser Gimp ou tout autre logiciel d'édition avec les mêmes fonctions.)
Commencez avec votre image de base, dans le cas ci-dessus, j'ai utilisé l'image 100 de qualité jpeg.
Dans l'image résultante, tout pixel différent de quelque manière que ce soit entre les deux images sera blanc. Vous pouvez l'ajuster pour permettre aux choses d'être "un peu différentes" en modifiant la valeur de seuil.
Exemple montrant BEAUCOUP de différence entre jpeg 92 et 100 de Lightroom.
Exemple ne montrant aucune différence entre 95 et 100.
Non seulement cela montre un binaire "modifié ou non", et si vous vouliez plus de détails sur son évolution, par exemple par canal de couleur?
Plus les pixels résultants sont clairs, plus ils sont différents dans cette couleur. L'inconvénient est que vous vous retrouvez avec beaucoup de boue grise ... il est donc parfois plus facile de simplement le seuil pour voir où sont les différences. C'est pourquoi je construis les deux et je bascule celui qui est visible.
la source
Si vous utilisez Photoshop, voici comment je le ferais:
Mettez les deux jpeg dans le même fichier psd, dans deux couches distinctes. Ils doivent se chevaucher exactement, car leurs dimensions sont les mêmes. (lequel va en haut n'a pas d'importance).
Réglez le mode de fusion des calques sur "Différence". Vous verriez un résultat principalement noir. Dépend de la différence de qualité entre les deux couches d'origine, vous pouvez voir plus ou moins de bruit.
la source
Tous les packages de traitement d'image devraient faciliter cela. Je vais vous montrer comment le faire dans Mathematica, si vous avez accès à ce système. Mathematica est un langage de programmation, mais il est vraiment facile de faire ce genre de manipulations, donc si vous y avez accès (par exemple via une licence de site universitaire), je vous recommande de l'essayer!
Tout d'abord, importez l'image:
Recompressez-le en utilisant la compression JPEG
Prenez maintenant la différence des valeurs de pixels, convertissez-les d'abord en nombres à virgule flottante pour vous assurer que les valeurs négatives sont préservées.
Peu de choses sont visibles sur l'image de différence (la différence est minuscule) et les valeurs négatives sont écrêtées en noir. Redimensionnons donc toutes les valeurs pour remplir toute la plage dynamique (le minimum sera mis à l'échelle à 0, le maximum à 1):
ImageDifference
donne la différence absolue des deux images et ne produit aucun nombre négatif. C'est l'opération que vous êtes le plus susceptible de trouver dans les packages de traitement d'image, en particulier ceux de l'interface graphique (Photoshop, GIMP).Nous pouvons également prendre un seul canal RVB, par exemple le rouge, et visualiser les différences positives et négatives en utilisant des couleurs «opposées»:
Voici la même chose, avec des différences amplifiées 5 fois. Les artefacts JPEG sont désormais plus reconnaissables.
L'avantage d'utiliser un langage de programmation est que nous pouvons facilement automatiser cela et voir comment la différence change pour les "niveaux de compression" entre 0,1 et 1,0:
la source
Vous pouvez utiliser les outils de ligne de commande Imagemagick.
fournira la valeur absolue des différences pour chaque canal RVB.
la source
GitHub a des outils de diff image intéressants intégrés sur le web, comme décrit ici et démontré dans cette démo .
la source
Dans l'image résultante, les parties noires montrent où les images originales sont identiques et tout ce qui est plus clair montre des différences.
la source