diff
を使用すると2つのテキストファイルを非常に簡単に比較でき、meldを使用するとさらに改善できます。
画像にdiffを使用すると、次のような例が得られます。
$ diff zivi-besch.tif zivildienst.tif
Binary files zivi-besch.tif and zivildienst.tif differ
以下に例を示します。
元の http://commons.wikimedia.org/wiki/File:Tux.svg
編集済み:
これを取得するために、両方の画像に白い背景を追加し、GIMPの「差分」フィルターを適用しました。
Diffがどのように機能するかは非常に簡単な方法ですが、はるかに優れた(そしてより複雑な)方法を想像できます。
テキストに対してmeldが行うような画像に対して機能するプログラムを知っていますか?
(パーセンテージ(0%が同じ画像-100%が同じ画像)を与えるプログラムが存在した場合、私もそれに興味がありますが、違いがどこにあるか視覚的なヒントを提供するものを探しています。)
はい、そのようなプログラムが存在します!
ImageMagickにはcompare
ユーティリティがあり、これには画像を比較するいくつかの方法があります。
それをインストールするには:
Sudo apt-get install imagemagick imagemagick-doc
2つの画像を視覚的に比較する:
compare -compose src Tux_orig.png Tux_modified.png Tux_difference.png
Tux_orig.png
&Tux_modified.png
この画像を提供します:
メトリックを使用した2つの画像の比較:
また、いくつかのメトリックを介して違いを出力する方法も多数あります。例:
# 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があります。ノーチラス。また、ディレクトリ構造全体で同様の画像を(再帰的に)検索するために、Geeqieがありました。
このリンクをクリックして 比較を超えてダウンロード .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 __== '__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()