Vous pouvez comparer deux fichiers texte très facilement avec diff
et encore mieux avec meld:
Si vous utilisez diff pour les images, vous obtenez un exemple comme celui-ci:
$ diff zivi-besch.tif zivildienst.tif
Binary files zivi-besch.tif and zivildienst.tif differ
Voici un exemple:
Original de http://commons.wikimedia.org/wiki/File:Tux.svg
Édité:
J'ai ajouté un fond blanc aux deux images et appliqué le filtre "Différence" de GIMP pour obtenir ceci:
C'est une méthode très simple, comment un diff pourrait fonctionner, mais je peux en imaginer de bien meilleures (et plus compliquées).
Connaissez-vous un programme qui fonctionne pour les images de la même manière que meld le fait pour les textes?
(Si un programme existait pouvait donner un pourcentage (0% de la même image - 100% de la même image), je serais également intéressé, mais je cherche un programme qui me donne des indices visuels indiquant les différences.)
Oui, un tel programme existe!
ImageMagick contient l'utilitaire compare
, qui permet de comparer les images de plusieurs manières.
Pour l'installer:
Sudo apt-get install imagemagick imagemagick-doc
Comparaison visuelle de deux images:
compare -compose src Tux_orig.png Tux_modified.png Tux_difference.png
Tux_orig.png
& Tux_modified.png
Donne cette image:
Comparaison de deux images via des métriques:
Il existe également de nombreuses façons de générer les différences via certaines métriques, 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
Channel distortion: PSNR
red: 19.5485
green: 19.5973
blue: 19.6507
alpha: 16.1568
all: 18.4517
Tux_orig.png=>Tux_difference.png PNG 200x232 200x232+0+0 8-bit sRGB 12.3KB 0.030u 0:00.020
Quelques options métriques:
AE absolute error count, number of different pixels (-fuzz effected)
FUZZ mean color distance
MAE mean absolute error (normalized), average channel error distance
MEPP mean error per pixel (normalized mean error, normalized peak error)
MSE mean error squared, average of the channel error squared
NCC normalized cross correlation
PAE peak absolute (normalize peak absolute)
PSNR peak signal to noise ratio
RMSE root mean squared (normalized root mean squared)
Il existe de nombreuses façons de comparer les images, voir section ImageMagicks sur la comparaison pour connaître les autres méthodes.
Cette question a été posée en 2012 et en 2017. Nous avons maintenant le programme Beyond Compare permettant de comparer des images, et il s'intègre dans Nautile. Nous avons également eu Geeqie tout au long de notre recherche d'images similaires dans une structure de répertoires (récursive).
Cliquez sur ce lien pour télécharger Beyond Compare Forfaits .deb.
Installez le paquet en allant dans le répertoire dans lequel vous l'avez téléchargé, et en tapant: Sudo dpkg -i YourPackageName.deb qui s'appelle en ce moment bcompare -4.2.2.22384_AMD64.deb , vous devez donc taper: Sudo dpkg -i bcompare-4.2.2.22384_AMD64.deb
Pour terminer l’installation et faire fonctionner le plug-in dans Nautilus, vous devez vous déconnecter, puis vous y reconnecter, car Nautilus s’exécute en arrière-plan, même s’il n’a pas été ouvert.
Une fois installé et que le plugin fonctionne correctement, vous:
J'ai fini avec ce qui suit:
~/.gitconfig
Ajouter
[diff "image"]
command = simple-imagediff
J'ai ajouté ce qui suit à ~/.local/bin/simple-imagediff
:
#!/usr/bin/env python
# Simple Image Diffs
# ==================
#
# How to Install
# --------------
#
# Download the script somewhere on $PATH as 'simple-imagediff' with +x:
#
# $ cd ~/bin
# $ wget -O simple-imagediff https://raw.github.com/Gist/1716699/simple-imagediff.py
# $ chmod +x simple-imagediff
#
# Prerequisites
# -------------
#
# The script should work out-of-the box on Ubuntu 11.10. On other OS'es you may
# need to install PIL and Gtk3.
#
# Git Setup
# ---------
#
# In ~/.gitconfig, add:
#
# [diff "image"]
# command = simple-imagediff
#
# In your project, create .gitattributes file and add (this enables the custom
# diff tool above):
#
# *.gif diff=image
# *.jpg diff=image
# *.png diff=image
#
# Try It
# ------
#
# $ git diff path/to/file.png
#
# NOTE: file.png must be versioned and the working copy must be different.
import os
import sys
import Image
from gi.repository import Gdk, Gtk
class SimpleImageDiffWindow(Gtk.Window):
def __init__(self, left, right):
Gtk.Window.__init__(self,
title="Simple Image Diff (%s, %s)" % (left, right))
self.set_default_size(640, 480)
align = Gtk.Alignment()
align.set_padding(10, 10, 10, 10)
box = Gtk.HBox(homogeneous=True, spacing=10)
box.add(self._create_image_box(left))
box.add(self._create_image_box(right))
align.add(box)
self.add(align)
self.resize(1, 1)
self.set_position(Gtk.WindowPosition.CENTER)
def _create_image_box(self, image_file):
box = Gtk.VBox(spacing=10)
frame = Gtk.Frame()
image = Gtk.Image()
image.set_from_file(image_file)
title = Gtk.Label(label="W: %dpx | H: %dpx" %
Image.open(image_file).size)
frame.add(image)
box.pack_start(frame, True, True, 0)
box.pack_end(title, False, False, 10)
return box
def _halt(message, code):
sys.stderr.write("[ERROR] %s\n" % message)
sys.exit(0 << code)
def _verify_file_exists(target):
if not os.path.exists(target):
_halt("The file '%s' does not exists." % target, 2)
if __== '__main__':
if len(sys.argv) < 3:
_halt('Not enough arguments.', 1)
_verify_file_exists(sys.argv[1])
_verify_file_exists(sys.argv[2])
app = SimpleImageDiffWindow(sys.argv[1], sys.argv[2])
app.connect('delete-event', Gtk.main_quit)
app.show_all()
Gtk.main()