“Разность” существует для изображений?

Можно сравнить два текстовых файла, очень легкие с diff и еще лучше с комбинацией:

example meld

При использовании разности для изображений Вы получаете пример как это:

$ diff zivi-besch.tif zivildienst.tif 
Binary files zivi-besch.tif and zivildienst.tif differ

Вот пример:

Исходный из http://commons.wikimedia.org/wiki/File:Tux.svg

Original image

Отредактированный:

edited

Я добавил белый фон к обоим изображениям и применил ХРОМОЙ фильтр "Различия" для получения этого:

difference

Это - очень простой метод, как разность могла работать, но я могу вообразить намного лучше (и более сложный).

Вы знаете программу, которая работает на изображения как комбинация, делает для текстов?

(Если бы программа существовала, который мог бы дать процент (0% то же изображение - 100% то же изображение), то я также интересовался бы им, но я ищу тот, который дает мне визуальные подсказки, где различия.)

51
задан 17 August 2014 в 13:04

4 ответа

Да, такая программа существует!

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

tux_orig.png tux_modified.png

Дает это изображение:

The image difference

Сравнение двух изображений через метрики:

Существует также много способов произвести различия через некоторые метрики, например:

# 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 по выдерживает сравнение для дальнейших методов.

59
ответ дан 17 August 2014 в 13:04

Этот вопрос был задан еще в 2012 году, а сейчас в 2017 году. Теперь у нас есть программа без открытого источника Beyond Compare для сравнения изображений, и она интегрируется в Nautilus. У нас также было Geeqie для поиска похожих изображений по структуре каталогов (рекурсивно).

Я. Поиск различий в изображениях с Beyond Compare

Щелкните по этой ссылке, чтобы загрузить пакеты 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 работает в фоновом режиме, даже если он не открыт.

Как только он установлен и плагин работает правильно, вы:

  1. Откройте Nautilus и перейдите к первому изображению
  2. Щелкните правой кнопкой мыши первое изображение, чтобы вызвать В контекстном меню выберите . Выберите «Левый файл для сравнения / объединения»
  3. . Перейдите ко второму изображению
  4. . Щелкните правой кнопкой мыши второе изображение и выберите « Сравнить с». NameOfFirstImageFile ' где NameOfFirstImageFile - имя файла, выбранного на шаге 2.
  5. Изображения затем откроются в Beyond Compare, и это будет выглядеть примерно так:

Beyond Compare Image Comparison

II. Поиск похожих / дублированных изображений с Geeqie

  1. Установите Geeqie, привязав его к терминалу: sudo apt install geeqie
  2. Откройте Geeqie и перейдите в каталог, который вы хочу сканировать.
  3. Щелкните правой кнопкой мыши имя каталога, который вы хотите отсканировать, и выберите Найти дубликаты ... просто отсканировать этот каталог или выбрать Найти повторяющиеся дубликаты ... сканировать этот каталог и все каталоги в нем.

enter image description here

  1. Используя раскрывающийся список Сравнить по в левом нижнем углу, вы можете выбрать найти дубликаты по контрольной сумме, по имени файла или по уровням сходства. Функция схожести удивительна, если вы обрезали, повернули или изменили размеры изображений, которые вам больше не нужны, как многие из нас приобретают, когда мы обрезаем / изменяем размер изображений для публикации в социальных сетях и т. Д.
0
ответ дан 17 August 2014 в 13:04
  1. В пакете openimageio-tools имеется команда idiff .
  2. Существует команда perceptualdiff (пакет perceptualdiff ).
  3. Существует команда uprightdiff (пакет uprightdiff ).
0
ответ дан 17 August 2014 в 13:04

Я закончил со следующим:

~/.gitconfig

Добавить

[diff "image"]
    command = simple-imagediff

простой-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()
0
ответ дан 17 August 2014 в 13:04

Другие вопросы по тегам:

Похожие вопросы: