65 votes

Est-ce que le "diff" existe pour les images?

Vous pouvez comparer deux fichiers texte très facilement avec diff et encore mieux avec meld:

exemple meld

Si vous utilisez diff pour les images, vous obtenez un exemple comme ceci:

$ diff zivi-besch.tif zivildienst.tif 
Fichiers binaires zivi-besch.tif et zivildienst.tif diffèrent

Voici un exemple:

Original à partir de http://commons.wikimedia.org/wiki/File:Tux.svg

Image originale

Édité:

modifié

J'ai ajouté un fond blanc aux deux images et appliqué le filtre "Différence" de GIMP pour obtenir ceci:

différence

C'est une méthode très simple de comparaison, mais je peux imaginer des méthodes bien meilleures (et plus complexes).

Connaissez-vous un programme qui fonctionne pour les images comme meld le fait pour les textes?

(Si un programme existait qui pourrait donner un pourcentage (0% même image - 100% même image), cela m'intéresserait également, mais je recherche un programme qui me donne des indications visuelles sur les différences.)

80voto

phoibos Points 19941

Oui, un tel programme existe !

ImageMagick a l'utilitaire compare, qui propose plusieurs façons de comparer des images.

Pour l'installer :

sudo apt-get install imagemagick imagemagick-doc

Comparer visuellement deux images :

compare -compose src tux_orig.png tux_modified.png tux_difference.png

tux_orig.png & tux_modified.png

tux_orig.pngtux_modified.png

Donne cette image :

La différence d'image

Comparer deux images via des mesures :

Il existe également de nombreuses façons de produire les différences via certaines mesures, par exemple :

# compare -verbose -metric PSNR tux_orig.png tux_modified.png tux_difference.png
tux_orig.png PNG 200x232 200x232+0+0 8-bit sRGB 20.6KB 0.000u 0:00.000
tux_modified.png PNG 200x232 200x232+0+0 8-bit sRGB 22.2KB 0.010u 0:00.000
Image : tux_orig.png
  Distorsion de canal : PSNR
    rouge : 19.5485
    vert : 19.5973
    bleu : 19.6507
    alpha : 16.1568
    tous : 18.4517
tux_orig.png => tux_difference.png PNG 200x232 200x232+0+0 8-bit sRGB 12.3KB 0.030u 0:00.020

Options de mesure :

AE     nombre d'erreur absolue, nombre de pixels différents (-fuzz affecté)
FUZZ   distance moyenne de couleur
MAE    erreur absolue moyenne (normalisée), distance d'erreur moyenne du canal
MEPP   erreur moyenne par pixel (erreur moyenne normalisée, erreur maximale normalisée)
MSE    erreur quadratique moyenne, moyenne de l'erreur du canal au carré
NCC    corrélation croisée normalisée
PAE    pic absolu (pic absolu normalisé)
PSNR   rapport signal sur bruit maximal
RMSE   racine carrée de l'erreur quadratique moyenne (racine carrée normalisée de l'erreur quadratique moyenne)

Il existe de nombreuses façons de comparer des images, consultez la section ImageMagick sur la comparaison pour d'autres méthodes.

8voto

Rudolf Dovičín Points 117
  1. Il y a une commande idiff dans le paquet openimageio-tools.
  2. Il y a une commande perceptualdiff (paquet perceptualdiff).
  3. Il y a une commande uprightdiff (paquet uprightdiff).

6voto

SunnyDaze Points 1251

Cette question a été posée en 2012, et nous sommes en 2017. Nous avons maintenant le programme non open source Beyond Compare pour comparer des images, et il s'intègre dans Nautilus. Nous avons également eu Geeqie depuis le début pour trouver des images similaires dans une structure de répertoire (de manière récursive).

I. Trouver les différences d'images avec Beyond Compare

Cliquez sur ce lien pour télécharger les packages .deb de Beyond Compare.

Installez le package en allant dans le répertoire où vous avez téléchargé le package, et en tapant : sudo dpkg -i VotreNomDePackage.deb qui s'appelle actuellement bcompare-4.2.2.22384_amd64.deb, donc vous taperiez : sudo dpkg -i bcompare-4.2.2.22384_amd64.deb

Pour terminer l'installation et faire fonctionner le plugin dans Nautilus, vous devrez vous déconnecter, puis vous reconnecter, car Nautilus continue de fonctionner en arrière-plan même si vous ne l'avez pas ouvert.

Une fois installé et que le plugin fonctionne correctement, vous :

  1. Ouvrez Nautilus, et naviguez vers la première image
  2. Faites un clic droit sur la première image pour faire apparaître le menu contextuel, et sélectionnez Sélectionner le fichier de gauche pour comparer/fusionner
  3. Naviguez jusqu'à la deuxième image
  4. Faites un clic droit sur la deuxième image et sélectionnez Comparer à 'NomDuPremierFichierImage' où NomDuPremierFichierImage est le nom du fichier que vous avez sélectionné à l'étape 2.
  5. Les images s'ouvriront alors dans Beyond Compare, et cela ressemblera à ceci:

Comparaison d'images avec Beyond Compare

II. Trouver des images similaires/dupliquées avec Geeqie

  1. Installez Geeqie en tapant ceci dans un terminal : sudo apt install geeqie
  2. Ouvrez Geeqie, et naviguez vers le répertoire que vous souhaitez analyser.
  3. Faites un clic droit sur le nom du répertoire que vous souhaitez analyser et sélectionnez Trouver les doublons... pour analyser uniquement ce répertoire, ou sélectionnez Trouver les doublons récursivement... pour analyser ce répertoire et tous les répertoires en dessous.

entrer la description de l'image ici

  1. En utilisant la liste déroulante Comparaison par dans le coin inférieur gauche, vous pouvez choisir de trouver des doublons par Checksum, par Nom de fichier, ou par Niveaux de similitude. La fonction de similitude est géniale si vous avez recadré, tourné ou redimensionné des images que vous n'avez plus besoin, comme beaucoup d'entre nous le font lorsque nous recadrons/redimensionnons des photos pour les poster sur les réseaux sociaux, etc.

1voto

J'ai abouti à ce qui suit :

~/.gitconfig

Annexe

[diff "image"]
    command = simple-imagediff

simple-imagediff

J'ai ajouté ce qui suit à ~/.local/bin/simple-imagediff :

#!/usr/bin/env python

# Différences d'Images Simples
# ============================
#
# Comment Installer
# -----------------
#
# Téléchargez le script quelque part sur $PATH en tant que 'simple-imagediff' avec +x :
#
# $ cd ~/bin
# $ wget -O simple-imagediff https://raw.github.com/gist/1716699/simple-imagediff.py
# $ chmod +x simple-imagediff
#
# Prérequis
# ---------
#
# Le script devrait fonctionner directement sur Ubuntu 11.10. Sur d'autres OS, vous devrez peut-être
# installer PIL et Gtk3.
#
# Configuration Git
# -----------------
#
# Dans ~/.gitconfig, ajoutez :
#
# [diff "image"]
#   command = simple-imagediff
#
# Dans votre projet, créez un fichier .gitattributes et ajoutez (cela active l'outil de différenciation personnalisé ci-dessus) :
#
# *.gif diff=image
# *.jpg diff=image
# *.png diff=image
#
# Essayez
# ------
#
# $ git diff chemin/vers/fichier.png
#
# NOTE : file.png doit être versionné et la copie de travail doit être différente.

import os
import sys

import Image

from gi.repository import Gdk, Gtk
...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X