Comment puis-je obtenir la différence entre deux images? J'ai l'image originale. Quelqu'un a écrit sur une copie exacte de l'image d'origine. Maintenant, je dois comparer l'original à l'image écrite et extraire uniquement l'écriture au format image.
Exemple: j'ai une photo d'une maison. Quelqu'un a pris une copie et a écrit "Bonjour!" Sur la copie. Je veux en quelque sorte comparer les deux images, supprimer la maison et être laissé avec une image des mots "Bonjour!".
Est-ce possible avec ImageMagick? Je sais qu'il existe des moyens d'obtenir la différence statistique entre les images, mais ce n'est pas ce que je recherche.
Mes propres favoris sont ces deux:
compare image1 image2 -compose src diff.png
compare image1 image2 -compose src diff.pdf
La seule différence entre les 2 commandes ci-dessus: la première montre la différence visuelle entre les deux images sous forme de fichier PNG, la seconde sous forme de fichier PDF.
Le fichier diff résultant affiche tous les pixels qui sont différents en rouge. Ceux qui sont inchangés apparaissent en blanc.
Court et doux.
Notez que vos images doivent pas être du même type. Vous pouvez même mélanger JPEG, TIFF, PNG - dans une condition: les images doivent avoir la même taille (dimension de l’image en pixels). Le format de sortie est déterminé par l'extension du nom du fichier de sortie.
Si, pour une raison quelconque, vous avez besoin d’une résolution supérieure à celle par défaut (72 dpi), ajoutez simplement un fichier -density
paramètre:
compare -density 300 image1 image2 -compose src diff.jpeg
Voici quelques illustrations de résultats pour les variantes de la commande ci-dessus. Remarque: les deux fichiers comparés étaient pairs fichiers PDF , donc cela fonctionne aussi avec ceux-ci ( tant qu'ils sont 1-pagers)!
Gauche: Image avec du texte Centre: Image originale Droite: Différences (= texte) en pixels rouges.
compare \
porsche-with-scratch.pdf porsche-original.pdf \
-compose src \
diff-compose-default.pdf
C'est la même commande que j'ai suggérée plus haut.
Gauche: Image avec le texte Centre: Image originale Droite: Différences de pixels 'vert'.
compare \
porsche-with-scratch.pdf porsche-original.pdf \
-compose src \
-highlight-color seagreen \
diff-compose-default.pdf
Cette commande ajoute un paramètre pour que la différence de pixels soit "seagreen" au lieu du rouge par défaut.
Gauche: Image avec le texte Centre: Image originale Droite: Bleu diffs (mais avec un peu de fond de contexte) l
compare \
porsche-with-scratch.pdf porsche-original.pdf \
-highlight-color blue \
diff-compose-default.pdf
Cette commande supprime le -compose src
part - le résultat est le comportement par défaut de compare
qui conserve comme fond clair la première des deux images différées. (Cette fois avec l'ajout d'un paramètre permettant d'afficher les pixels diff en bleu.)
Alors que compare
fait un bon travail pour de nombreuses applications, j'ai constaté que je préférais parfois une approche différente, notamment lorsque l'on comparait des images principalement en niveaux de gris:
convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
'(' file2.png -flatten -grayscale Rec709Luminance ')' \
'(' -clone 0-1 -compose darken -composite ')' \
-channel RGB -combine diff.png
L'idée est la suivante: convertir les deux file1.png
et file2.png
en niveaux de gris. Ensuite, traitez le premier comme le canal rouge de l’image résultante, le second comme le canal vert. Le canal bleu est formé à partir de ces deux canaux à l’aide de l’opérateur de composition darken
, ce qui revient essentiellement à prendre le minimum.
Ainsi, les éléments blancs dans les deux images restent blancs. Les éléments noirs dans les deux images restent noirs. Les choses qui sont blanches dans la première image mais noires dans la seconde deviennent rouges, et celles qui sont blanches dans la seconde mais noires dans la première deviennent vertes.
Le résultat vous donne une image bien codée en couleur où vous pouvez facilement associer le vert à la première entrée et le rouge à la seconde. Voici un exemple où je l'utilise pour comparer la sortie de LaTeX à celle de KaTeX (avant I correction d'un bug pour améliorer cela):
Vous pouvez combiner les approches, en utilisant compare
pour voir où quelque chose a changé, puis en utilisant ce qui précède pour voir plus en détail comment cela a changé.