Существует ли «diff» для изображений?

Вы можете легко сравнить два текстовых файла с помощью diff и еще лучше с помощью команды meld:

example 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 «Разница», чтобы получить это:

difference

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

Знаете ли вы программу, которая работает для изображений, таких как meld, для текстов?

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

39 голосов | спросил Martin Thoma 30 +04002012-10-30T13:29:51+04:00312012bEurope/MoscowTue, 30 Oct 2012 13:29:51 +0400 2012, 13:29:51

4 ответа


44

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

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

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

Разница изображений

Сравнение двух изображений с помощью показателей:

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

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

ответил phoibos 30 +04002012-10-30T14:39:30+04:00312012bEurope/MoscowTue, 30 Oct 2012 14:39:30 +0400 2012, 14:39:30
4

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

I. Поиск различий изображения с последующим сравнением

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

 Помимо сравнения сравнения изображений

II. Поиск похожих /повторяющихся изображений с помощью Geeqie

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

 введите описание изображения здесь>> </a> </p>

<ol start =

  • В раскрывающемся списке Сравнить по в нижнем левом углу вы можете выбрать дубликаты по контрольной сумме, по имени файла или по уровням сходства. Функция сходства является удивительной, если у вас есть обрезанные, повернутые или измененные изображения, вам больше не нужно, как многие из нас приобретают, когда мы обрезаем /изменяем размеры изображений для публикации в социальных сетях и т. Д.
  • ответил SunnyDaze 22 J000000Saturday17 2017, 05:57:16
    2

    Существует команда idiff в пакете openimageio-tools .

    ответил Rudolf Dovičín 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 23 Sep 2017 22:30:36 +0300 2017, 22:30:36
    0

    У меня получилось следующее:

    ~/.gitconfig

    Append

    [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()
    
    ответил Martin Thoma 14 AMpFri, 14 Apr 2017 11:51:55 +030051Friday 2017, 11:51:55

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

    Популярные теги

    security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132