2012-04-16 14:00

Après une longue recherche sur le Net, voici comment utiliser ImageMagick pour comparer deux image (diff), afin de déterminer si les images sont très proches, ou si l’une des images est une version redimensionnée de l’autre.

convert image1 image2 -resize '400x300!' MIFF:- | compare -metric AE -fuzz '10%' - null:

La commande convert prend 2 images, les redimensionne en une taille plus petite identique, puis les envoie dans un pipe à la commande compare qui compte le nombre de pixels différents.

La commande affiche le nombre de pixel différents. Si c’est 0 les images sont similaires.

2 paramètres peuvent augmenter la tolérance d’images similaires :

  • La taille des vignettes à comparer : plus la taille est petite, plus on élimine des détails. Bonne base : 1/4 de l’image la plus petite.
  • Le paramètre -fuzz : il s’agit de l’écart de couleur toléré. Plus on augmente ce paramètre, plus on tolère des couleurs différentes. En dessous de 2%, la différence de couleurs est quasiment imperceptible à l’œil nu.

Notes :

  • Il est préférable de conserver les mêmes proportions que les images originales.
  • Il faut un point d’exclamation pour forcer le redimensionnement sans tenir compte des proportions, car dans certains cas les deux vignettes n’ont pas une taille strictement identique, ce qui fait échouer la commande compare.

J’ai aussi fait un petit script qui redimensionne à 1/4 de la petite image et affiche le pourcentage de différences : imdiff

./imdiff /tmp/bad.jpg ../Public/images/bad.jpg
pixel difference: 2.927%
NOK

Liens :

2012-04-16 14:00 · Tags: , ,