İki resim arasında neyin değiştiğini tam olarak nasıl anlarım?


28

Örneğin, JPEG sıkıştırma hakkında yeni bir konuşma için, iki JPEG arasında (biri sıkıştırma seviyesi 100 ve biri sıkıştırma seviyesi 95 olan) değişen pikseli pikselle karşılaştırmak istedim.

Sıkıcı özel yazılım programlaması olmadan nelerin değiştiğini iyi görsel haritalar nasıl oluşturabilirim?


2
Bunu bir cevap olarak göndermemek muhtemelen fotoğraflar için uygun bir çözüm değildir, ancak GitHub'ın (bir programcının sitesi) görüntüleri karşılaştırmanın bazı ilginç yolları vardır: github.com/cameronmcefee/Image-Diff-View-Modes/commit/… Tıklamayı deneyin "2-up", "Tokatlamak", "Soğan Zarı" ve "Fark".
Henrik N

Yanıtlar:


35

Photoshop + Katmanlar FTW. (Evet, Gimp'i veya aynı işlevlere sahip başka bir düzenleme yazılımını da kullanabilirsiniz.)

Temel imajınızla başlayın, yukarıdaki durumda, jpeg quality 100 image kullandım.

  1. üstüne yeni bir katman oluştur
  2. ikinci görüntüyü bu katmana yapıştırın
  3. katman stilini "fark" olarak ayarlayın (aşağıdaki 1. resimde soldaki pembe oka bakın)
  4. üstüne bir efekt katmanı oluşturmak (Katman> Yeni Ayarlama Katmanı> Eşik)
  5. efekti eşik olarak ayarlayın (aşağıdaki 1. resimde sağdaki pembe oka bakın)
  6. eşik değerini 1 olarak ayarlayın.

Ortaya çıkan görüntüde, iki görüntü arasında herhangi bir şekilde farklı olan herhangi bir piksel beyaz olacaktır. Eşik değerini değiştirerek nesnelerin "biraz farklı olmasına" izin verecek şekilde ayarlayabilirsiniz.

Lightroom'dan jpeg 92 ve 100 arasındaki farkın LOT'unu gösteren örnek. jpeg 92 ve 100'ün LR'den Photoshop katmanlarıyla karşılaştırılması

95 ile 100 arasında hiçbir fark göstermeyen örnek. jpeg 95 ve 100'ün LR'den Photoshop katmanlarıyla karşılaştırılması

Bu sadece "değiştirilmiş veya değiştirilmemiş" bir ikili göstermiyor, ne kadar değiştiği hakkında daha fazla ayrıntı istiyorsanız, renk kanalına göre?

  1. Eşik ayar katmanını eğri ayar katmanıyla değiştirin.
  2. eğriyi düzenle
  3. gösteri kesmeyi aç
  4. Giriş beyaz tutamacını sağ alt köşenin altına tut ve gidebildiğin kadar sola doğru sürükle
  5. Herhangi bir kırpma görene kadar yavaşça sağa doğru hareket edin (önizleme görüntüsünün tamamı siyah)
  6. kesmeyi geri kapatın ve eğri değişikliğini kaydedin

Elde edilen pikseller ne kadar parlaksa o renkte o kadar farklı olurlar. Dezavantajı ise bir sürü gri çamurla bitiyor olmanız ... bu yüzden bazen farklılıkların nerede olduğunu görmek için eşiklemek daha kolay oluyor. Bu yüzden ikisini de yapıyorum ve hangisinin görünür olduğunu değiştiriyorum.

farkın daha açıklayıcı bir görünümü


Yeni soru, ancak 4. adımı nasıl yapacaksınız? Hiçbir yerde bulamıyorum. Ayrıca 7 yıl sonra ve belki de adını değiştirdikleri için en son sürümü kullanıyorum.
whitneyland

14

Photoshop kullanıyorsanız, işte size nasıl yaparım:

İki jpeg'i aynı psd dosyasına, iki ayrı katmana yerleştirin. Boyutları aynı olduğundan tam olarak örtüşmeleri gerekir. (hangisi üstüne çıkarsa önemli değil).

Katman karıştırma modunu "Fark" olarak ayarlayın. Çoğunlukla siyah bir sonuç görürsünüz. İki orijinal katman arasındaki kalite farkına bağlı olarak, daha fazla veya daha az gürültü görebilirsiniz.

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


Tek başına fark, böyle büyük bir siyah boşlukla kaldığınızda pek de yardımcı olmuyor. :)
cabbey

Cabbey emin,% 100 ile% 95 arasında kıyaslandığında büyük olasılıkla sağlam bir siyah elde edersiniz. Ama senin sorduğun şey buydu değil mi? Sahip cevabınızda, karşılaştırılmakta olan orijinallerden değerleri değiştiriyorsunuz, bu da artık orijinal sıkıştırma ayarlarına sahip olmamalarını sağlıyor.
Jin,

Neredeyse herhangi bir karşılaştırmada neredeyse katı siyahlık elde edersiniz, çünkü farklılıklar çok küçüktür. Farkın arkasındaki eşik / eğri katmanı sıkıştırma ayarlarında hiçbir şey yapmaz, sadece o farkın hazırladığı siyah çorbanın alt sınırlarının görüntülenmesine yardımcı olur. (Ne demek istediğinizi% 100 tam olarak bilmiyorum, bu yüzden orada farklı bir yöne gidiyorum ....)
cabbey

@cabbey, 2 resim arasındaki farkın tamamen bitli bir şekilde çalışmasını istiyorsan, o zaman sadece "Fark" karıştırma modu sana bunu veriyor. Eşiği / eğriyi ayarladığınızda, sonuç çıplak gözle daha belirgin olsa da, neyin değiştiğinin kesin bir temsili değildir. Bunu yaptığınızda, artık% 100 ile% 95 arasında karşılaştırma yapmıyorsunuz.
Jin,

Tabiki sen. İkinci photoshop'un görüntüyü diskten dahili arabelleklerine yüklemesi önemliyse, sıkıştırma seviyesi durdu, şimdi bellekte sıkıştırılmamış bir piksel dizisidir ... eğer o pikseller orada görüntünün bir kare blob içerdiğinden veya bir yapay yapı olduğu için Sıkıştırma seviyesi ile ilgili değildir.
cabbey

13

Tüm görüntü işleme paketleri bunu kolaylaştırmalıdır. Bu sisteme erişiminiz varsa, bunu Mathematica'da nasıl yapacağınızı göstereceğim. Mathematica bir programlama dilidir, ancak bu tür manipülasyonları yapmak gerçekten çok kolaydır, bu nedenle erişiminiz varsa (örneğin bir üniversite site lisansı aracılığıyla), bir deneme yapmanızı öneririm!

İlk önce görüntüyü içe aktarın:

img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]

JPEG sıkıştırması kullanarak yeniden sıkıştır

img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]

Mathematica grafikleri

Şimdi, negatif değerlerin korunmasını sağlamak için önce bunları kayan nokta sayılarına dönüştürerek piksel değerlerinin farkını alın.

diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]

Mathematica grafikleri

Fark görüntüsünde pek bir şey görünmüyor (fark çok küçük) ve negatif değerler siyaha kırpılıyor. Öyleyse, tüm dinamik aralığı dolduracak şekilde tüm değerleri kaldıralım (minimum 0, maksimum 1 olacak şekilde ölçeklenecek):

ImageAdjust[diff]

Mathematica grafikleri

ImageDifferenceİki görüntünün mutlak farkını verir ve negatif sayı üretmez. Bu, görüntü işleme paketlerinde, özellikle GUI'lerde (Photoshop, GIMP) bulmanız daha muhtemel olan işlemdir.

ImageDifference[img, img2]

Mathematica grafikleri

Ayrıca örneğin kırmızı olan tek bir RGB kanalını alabilir ve 'karşıt' renkleri kullanarak pozitif ve negatif farkları görselleştirebiliriz:

ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

Mathematica grafikleri

İşte aynı şey, farklar 5 kat artar. JPEG eserleri şimdi daha tanınabilir.

ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]], 
 ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]

Mathematica grafikleri

Bir programlama dili kullanmanın avantajı, bunu kolayca otomatikleştirebilmemiz ve "sıkıştırma seviyeleri" için farkın 0,1 ile 1,0 arasında nasıl değiştiğini görebilmemizdir:

Grid@Partition[Table[
   ArrayPlot[
    0.5 + ImageData[
      First@ColorSeparate[
        ImageSubtract[Image[img, "Real"], 
         Image[ImportString@
           ExportString[img, "JPEG", "CompressionLevel" -> c], 
          "Real"]], "Red"]], ColorFunction -> "RedGreenSplit", 
    ColorFunctionScaling -> False],
   {c, 0.1, 1, 0.1}
   ], 5]

Mathematica grafikleri


Bir komut dosyası / otomatik seçeneği görmek her zaman iyidir! :)
jrista

5

Imagemagick komut satırı araçlarını kullanabilirsiniz.

composite imagesrc1.jpg imagesrc2.jpg -compose difference diffs.jpg

Her RGB kanalı için farkların mutlak değerini sağlayacaktır.



0
  1. Görüntülerden birini GIMP veya Photoshop'ta açın.
  2. İlk resmi üstüne ikinci görüntüyü yeni bir katman olarak ekleyin.
  3. Üst katmanın karışım modunu "Fark" olarak ayarlayın

Ortaya çıkan görüntüde siyah parçalar orijinal görüntülerin nerede olduğunu ve daha açık olan herhangi bir şeyin farklılık gösterdiğini gösterir.


Tek başına fark, böyle büyük bir siyah boşlukla kaldığınızda pek de yardımcı olmuyor. :)
cabbey

Sonuçtaki görüntünün seviyelerini her zaman ayarlayabilirsiniz. Bu tekniği ne zaman kullansam, değişiklikleri görebilecek kadar farklı resimlerim var :)
Dan
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.