Görüntüler için “fark” var mı?


51

İki metin dosyasını diffmeld ile daha kolay ve daha da iyi karşılaştırabilirsiniz:

örnek kaynak

Görüntüler için diff kullanırsanız, şöyle bir örnek alırsınız:

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

İşte bir örnek:

Http://commons.wikimedia.org/wiki/File:Tux.svg adresinden orijinal

Orijinal görüntü

Düzenlendi:

düzenlendi

Her iki görüntüye de beyaz bir arka plan ekledim ve aşağıdakileri elde etmek için GIMP'lerin "Farkı" filtresini kullandım:

fark

Bir farkın nasıl işe yarayacağı çok basit bir yöntemdir, ancak daha iyi (ve daha karmaşık) olanları hayal edebiliyorum.

Meld gibi görüntüler için çalışan bir program biliyor musunuz metinler için?

(Yüzdeyi verebilecek bir program mevcut olsaydı (% 0 aynı görüntü - aynı görüntü% 100) Aynı zamanda onunla da ilgilenirdim, ancak farklılıkların olduğu görsel ipuçlarını veren birini arıyorum.)


Bir SVG görüntüsüne bağladığınız anlaşılıyor. Bu aslında geçerli bir XML metnidir. Aynı diğer resim formatları için geçerli değildir.
Oct--

Yanıtlar:


57

Evet, böyle bir program var!

ImageMagick , comparegörüntüleri karşılaştırmanın birkaç yolu olan yardımcı programa sahiptir.

Yüklemek için:

sudo apt-get install imagemagick imagemagick-doc

İki görüntüyü görsel olarak karşılaştırma:

compare -compose src tux_orig.png tux_modified.png tux_difference.png

tux_orig.png & tux_modified.png

tux_orig.png tux_modified.png

Bu görüntüyü verir:

Görüntü farkı

İki resmin metriklerle karşılaştırılması:

Farklılıkları bazı metrikler aracılığıyla çıkarmanın birçok yolu vardır, örneğin:

# 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

Bazı metrik seçenekler:

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)

Görüntüleri karşılaştırmanın birçok yolu vardır, diğer yöntemler için karşılaştırmak için ImageMagicks bölümüne bakın .


Birleşmenin bir yolu var mı? Veya hedefi bulmak için farkı orijinale mi ekleyelim?
CMCDragonkai

@ CMCDragonkai ImageMagick çok güçlüdür. Tam aşılamayı bilmiyorum, ancak görüntülere ilişkin işlemleri filtreleyebilir ve zincirleyebilir ve yenilerini oluşturabilirsiniz. Bu yüzden bir ImageMagick betiği ile "birleştirmek" olabilir eminim.
HRJ

1
imagemagick gerçekten bir sihir!
Brain90

AE ile karşılaştırmayı kullanıp, fark yaratmadan nasıl kullanacaksınız?
user643722

6

Bu soru 2012'de tekrar soruldu ve 2017 oldu. Şimdi görüntüleri karşılaştırmak için açık kaynak kodlu Beyond Compare programına sahibiz ve Nautilus'a entegre edildi. Biz de vardı Geeqie bütün bir dizin yapısı (yinelemeli) boyunca benzer görüntüleri bulmak için birlikte.

I. Karşılaştırmanın ötesinde görüntü farklılıkları bulma

Beyond Compare .deb paketlerini indirmek için bu bağlantıya tıklayın .

Paketi de indirdiğiniz dizine giderek ve şu anda bcompare-4.2.2.22384_amd64.deb adı verilen sudo dpkg -i YourPackageName.deb yazarak , aşağıdakileri yazın: sudo dpkg -i bcompare- 4.2.2.22384_amd64.deb

Kurulumu tamamlamak ve eklentiyi Nautilus'ta çalışacak şekilde almak için, oturumu kapatmanız ve sonra tekrar açmanız gerekir, çünkü Nautilus açık olmasa bile arka planda çalışıyordur.

Yüklendikten ve eklenti düzgün çalıştığında, siz:

  1. Nautilus'u açın ve ilk resme gidin
  2. Bağlam menüsünü getirmek için ilk görüntüye sağ tıklayın ve Karşılaştırma / Birleştirme için Sol Dosya Seç'i seçin
  3. İkinci resme göz atın
  4. İkinci görüntüye sağ tıklayın ve 'NameOfFirstImageFile' ile Karşılaştır'ı seçin ; burada NameOfFirstImageFile, 2. adımda seçtiğiniz dosyanın adıdır.
  5. Görüntüler Beyond Compare'de açılacaktır ve şöyle görünecektir:

Ötesinde, Resim Karşılaştırma Karşılaştırması

II. Geeqie ile Benzer / Çoğaltılmış Resimleri Bulma

  1. Bunu bir terminale bağlayarak Geeqie'yi kurun: sudo apt install geeqie
  2. Geeqie'yi açın ve taramak istediğiniz dizine göz atın.
  3. Sağ tıklayın taramak ve seçmek istediğiniz dizinin adını ... çiftleri bulun sadece o dizini tarama veya seçmek için ... özyinelemeli çiftleri bulun o dizini ve altındaki tüm dizinleri taramak için.

görüntü tanımını buraya girin

  1. Sol alt köşedeki Karşılaştırma aşağıya açılan listesini kullanarak, kopyaları Checksum, Dosya adı veya Benzerlik düzeylerine göre bulmayı seçebilirsiniz. Benzerlik özelliği, resimleri kırptıysanız, döndürdüyseniz veya yeniden boyutlandırdıysanız, sosyal medyada yayınlamak için resim kırptığımızda / yeniden boyutlandırdığımızda çoğumuzun edindiği gibi artık ihtiyacınız yok.


0

Ben aşağıdakilerle bitti:

~/.gitconfig

eklemek

[diff "image"]
    command = simple-imagediff

Basit-ImageDiff

Aşağıdakileri ekledim ~/.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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.