Comment puis-je faire la différence entre deux images? J'ai l'image originale. Quelqu'un a écrit sur une copie exacte de l'image originale. Maintenant, je dois comparer l'original à l'écrit sur l'image 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 me retrouver 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.
image
image-processing
imagemagick
diff
difference
Justin Noel
la source
la source
Réponses:
Mes propres favoris sont ces deux:
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 PDF.
Le fichier diff résultant affiche tous les pixels de couleur rouge différente. Celles qui restent inchangées apparaissent en blanc.
Court et doux.
Notez que vos images ne doivent pas nécessairement être du même type. Vous pouvez même mélanger JPEG, TIFF, PNG - sous une condition: les images doivent être de la même taille (dimension de l'image en pixels). Le format de sortie est déterminé par l'extension du nom de fichier de sortie.
Si, pour une raison quelconque, vous avez besoin d'une résolution plus élevée que la résolution par défaut (72 dpi), ajoutez simplement un
-density
paramètre approprié :Exemples illustrés
Voici quelques illustrations des résultats pour les variations de la commande ci-dessus. Remarque: les deux fichiers comparés étaient même des fichiers PDF , donc cela fonctionne aussi avec ceux-ci (du moment qu'il s'agit d'une page)!
Gauche: Image avec texte Centre: Image originale Droite: Différences (= texte) en pixels rouges.
C'est la même commande que j'ai suggérée plus haut.
Gauche: Image avec texte Centre: Image d'origine Droite: Différences en pixels «vert de mer».
Cette commande ajoute un paramètre pour rendre les pixels de différence 'seagreen' au lieu du rouge par défaut.
Gauche: Image avec texte Centre: Image originale Droite: Diffs bleus (mais avec un arrière-plan contextuel) l
Cette commande supprime la
-compose src
partie - le résultat est le comportement par défautcompare
qui conserve comme arrière-plan éclairé la première des 2 images différentes. (Cette fois, avec un paramètre ajouté pour faire apparaître les pixels de différence en bleu.)la source
'compare'
. Pour la v7.x d'ImageMagick, vous devriez'magick compare'
plutôt l' exécuter .Bien que cela
compare
fasse du bon travail pour de nombreuses applications, j'ai trouvé que parfois je préfère une approche différente, en particulier lorsque je compare des images qui sont principalement en niveaux de gris:L'idée est la suivante: convertir les deux
file1.png
etfile2.png
en niveaux de gris. Puis 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 à l'aide de l'darken
opérateur de composition, ce qui signifie essentiellement prendre le minimum.Ainsi, les éléments blancs sur les deux images restent blancs. Les éléments noirs sur les deux images restent noirs. Les choses qui sont blanches dans la première image mais noires dans la seconde deviennent rouges, et les choses qui sont blanches dans la seconde mais noires dans la première deviennent vertes.
Le résultat vous donne une image joliment 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ù j'utilise ceci pour comparer la sortie de LaTeX avec celle de KaTeX (avant de corriger 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é.la source
-colorspace gray
au lieu de-grayscale Rec709Luminance
corriger cela, mais cela gâche la composition. Ajoutez-respect-parentheses
comme première optionconvert
pour prendre soin de cela.pdfdiff
répertoire et imprime en outre les numéros des pages qui diffèrent entre les deux PDF.-grayscale
soit pas pris en charge, j'ai dû utiliser-colorspace gray
comme @BrechtMachiels l'a suggéré