Можно сравнить два текстовых файла, очень легкие с diff
и еще лучше с комбинацией:
При использовании разности для изображений Вы получаете пример как это:
$ diff zivi-besch.tif zivildienst.tif
Binary files zivi-besch.tif and zivildienst.tif differ
Вот пример:
Исходный из http://commons.wikimedia.org/wiki/File:Tux.svg
Отредактированный:
Я добавил белый фон к обоим изображениям и применил ХРОМОЙ фильтр "Различия" для получения этого:
Это - очень простой метод, как разность могла работать, но я могу вообразить намного лучше (и более сложный).
Вы знаете программу, которая работает на изображения как комбинация, делает для текстов?
(Если бы программа существовала, который мог бы дать процент (0% то же изображение - 100% то же изображение), то я также интересовался бы им, но я ищу тот, который дает мне визуальные подсказки, где различия.)
Да, такая программа существует!
ImageMagick имеет compare
утилита, которая имеет несколько способов сравнить изображения.
Устанавливать его:
sudo apt-get install imagemagick imagemagick-doc
Сравнение двух изображений визуально:
compare -compose src tux_orig.png tux_modified.png tux_difference.png
tux_orig.png
& tux_modified.png
Дает это изображение:
Сравнение двух изображений через метрики:
Существует также много способов произвести различия через некоторые метрики, например:
# 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
Некоторые метрические опции:
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)
Существует много способов сравнить изображения, видеть, что раздел ImageMagicks по выдерживает сравнение для дальнейших методов.
Этот вопрос был задан еще в 2012 году, а сейчас в 2017 году. Теперь у нас есть программа без открытого источника Beyond Compare для сравнения изображений, и она интегрируется в Nautilus. У нас также было Geeqie для поиска похожих изображений по структуре каталогов (рекурсивно).
Щелкните по этой ссылке, чтобы загрузить пакеты Beyond Compare .deb.
Установите пакет, перейдя в каталог, в который вы его скачали, и введите: sudo dpkg -i YourPackageName.deb , который в данный момент называется bcompare-4.2.2.22384_amd64.deb , поэтому вы должны ввести: sudo dpkg -i bcompare-4.2.2.22384_amd64.deb
Чтобы завершить установку и заставить плагин работать в Nautilus, вам нужно выйдите из системы, а затем снова войдите, потому что Nautilus работает в фоновом режиме, даже если он не открыт.
Как только он установлен и плагин работает правильно, вы:
Я закончил со следующим:
~/.gitconfig
Добавить
[diff "image"]
command = simple-imagediff
Я добавил следующее к ~/.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 __name__ == '__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()