ฉันจะบอกได้อย่างไรว่าภาพทั้งสองเปลี่ยนไปอย่างไร


28

ตัวอย่างเช่นสำหรับการสนทนาล่าสุดเกี่ยวกับการบีบอัด JPEGฉันต้องการเปรียบเทียบพิกเซลสำหรับพิกเซลที่เปลี่ยนแปลงระหว่าง JPEG สองอัน (อันที่มีระดับการบีบอัด 100 และอีกอันที่มีระดับการบีบอัด 95)

ฉันจะสร้างแผนที่ภาพที่ดีของสิ่งที่เปลี่ยนแปลงโดยไม่ต้องเขียนโปรแกรมซอฟต์แวร์ที่กำหนดเองที่น่าเบื่อได้อย่างไร


2
ไม่ส่งคำตอบนี้เป็นคำตอบเนื่องจากอาจไม่ใช่วิธีแก้ปัญหาสำหรับภาพถ่าย แต่ GitHub (ไซต์โปรแกรมเมอร์) มีวิธีการเปรียบเทียบภาพที่น่าสนใจ: github.com/cameronmcefee/Image-Diff-View-Mode/commit/ลองคลิก "2-up", "Swipe", "Onion Skin" และ "Difference"
Henrik N

คำตอบ:


35

Photoshop + เลเยอร์ FTW (ใช่คุณยังสามารถใช้ Gimp หรือซอฟต์แวร์แก้ไขอื่น ๆ ที่มีฟังก์ชั่นเดียวกันได้)

เริ่มต้นด้วยภาพฐานของคุณในกรณีข้างต้นฉันใช้ jpeg คุณภาพ 100 ภาพ

  1. สร้างเลเยอร์ใหม่บนมัน
  2. วางภาพที่สองลงในเลเยอร์นั้น
  3. ตั้งค่าลักษณะเลเยอร์เป็น "ความแตกต่าง" (ดูลูกศรสีชมพูซ้ายในภาพที่ 1 ด้านล่าง)
  4. สร้างเอฟเฟกต์เลเยอร์บนยอดนั้น (เลเยอร์> เลเยอร์การปรับใหม่> ขีด จำกัด )
  5. ตั้งเอฟเฟกต์เป็นเกณฑ์ (ดูลูกศรสีชมพูด้านขวาในภาพที่ 1 ด้านล่าง)
  6. ตั้งค่าขีด จำกัด เป็น 1

ในภาพผลลัพธ์พิกเซลที่มีลักษณะแตกต่างกันระหว่างสองภาพจะเป็นสีขาว คุณสามารถปรับเปลี่ยนเพื่อให้สิ่งต่าง ๆ "แตกต่างกันเล็กน้อย" โดยการเปลี่ยนค่าเกณฑ์

ตัวอย่างแสดงความแตกต่างอย่างมากระหว่าง jpeg 92 และ 100 จาก Lightroom เปรียบเทียบ jpeg 92 และ 100 จาก LR กับเลเยอร์ Photoshop

ตัวอย่างแสดงความแตกต่างระหว่าง 95 และ 100 เปรียบเทียบ jpeg 95 และ 100 จาก LR กับเลเยอร์ Photoshop

ไม่ใช่ว่าแค่แสดงไบนารี "เปลี่ยนแปลงหรือไม่" ถ้าคุณต้องการรายละเอียดเพิ่มเติมว่ามีการเปลี่ยนแปลงมากแค่ไหนพูดโดยใช้ช่องสี

  1. แทนที่ชั้นการปรับค่าขีด จำกัด ด้วยชั้นการปรับความโค้ง
  2. แก้ไขเส้นโค้ง
  3. เปิดการแสดงการตัด
  4. คว้าที่จับสีขาวด้านล่างที่มุมขวาล่างแล้วลากไปทางซ้ายเท่าที่คุณจะไปได้
  5. เลื่อนกลับไปทางขวาอย่างช้า ๆ จนกว่าคุณจะไม่เห็นรูปวาด (ภาพตัวอย่างเป็นสีดำทั้งหมด)
  6. ปิดการตัดกลับและบันทึกการเปลี่ยนแปลงเส้นโค้ง

ยิ่งพิกเซลที่สว่างขึ้นเท่าไหร่ก็ยิ่งมีสีต่างกันมากเท่านั้น แต่ข้อเสียคือคุณจบลงด้วยโคลนสีเทาจำนวนมาก ... ดังนั้นบางครั้งมันง่ายกว่าที่จะ จำกัด มันเพื่อดูว่าความแตกต่างอยู่ที่ไหน นั่นเป็นเหตุผลที่ฉันสร้างทั้งสองและสลับซึ่งเป็นที่มองเห็นได้

มุมมองที่อธิบายเพิ่มเติมของความแตกต่าง


คำถาม Newb แต่คุณจะทำขั้นตอนที่ 4 "สร้างเลเยอร์เอฟเฟกต์บนนั้นได้อย่างไร" ไม่พบที่ใดก็ได้ 7 ปีต่อมาและฉันใช้เวอร์ชั่นล่าสุดสำหรับบางทีพวกเขาอาจเปลี่ยนชื่อด้วยเหรอ?
whitneyland

14

ถ้าคุณใช้ Photoshop ต่อไปนี้เป็นวิธีที่ฉันทำ:

ใส่ jpegs สองตัวลงในไฟล์ psd เดียวกันในสองเลเยอร์แยกกัน พวกเขาควรทับซ้อนกันทุกประการเนื่องจากขนาดเท่ากัน (อันไหนที่อยู่ด้านบนไม่สำคัญ)

ตั้งค่าโหมดการผสมเลเยอร์เป็น "ความแตกต่าง" คุณจะเห็นผลลัพธ์ที่เป็นสีดำเป็นส่วนใหญ่ ขึ้นอยู่กับความแตกต่างของคุณภาพระหว่างเลเยอร์ดั้งเดิมสองชั้นที่คุณอาจเห็นเสียงดังมากหรือน้อย

ป้อนคำอธิบายรูปภาพที่นี่


ความแตกต่างเพียงอย่างเดียวไม่ได้ช่วยอะไรมากนักเมื่อคุณถูกทิ้งให้เป็นโมฆะสีดำขนาดใหญ่เช่นนั้น :)
cabbey

@cabbey แน่ใจว่าการเปรียบเทียบ 100% ถึง 95% คุณมักจะได้รับสีดำทึบ แต่นั่นเป็นสิ่งที่คำถามของคุณถามใช่หรือไม่ ในคำตอบของเจ้าของคุณกำลังเปลี่ยนค่าจากต้นฉบับที่ถูกเปรียบเทียบซึ่งทำให้พวกเขาไม่มีการตั้งค่าการบีบอัดดั้งเดิมอีกต่อไป
จิน

คุณจะได้สีดำสนิทเมื่อเปรียบเทียบกันเพราะความแตกต่างนั้นเล็กมาก ขีด จำกัด / ชั้นโค้งหลังจากความแตกต่างไม่ได้ทำอะไรกับการตั้งค่าการบีบอัดมันแค่ช่วยให้เห็นภาพของขอบเขตล่างของซุปสีดำนั้นที่เตรียมแตกต่างกัน (ฉันไม่แน่ใจ 100% ว่าคุณหมายถึงอะไรดังนั้นฉันสามารถมุ่งหน้าไปในทิศทางที่ต่างออกไปที่นั่น .... )
cabbey

@cabbey หากคุณกำลังขอให้ใช้บิตลับอย่างชาญฉลาดของความแตกต่างระหว่าง 2 ภาพจากนั้นโหมดการผสม "ความแตกต่าง" เพียงอย่างเดียวก็ช่วยคุณได้ เมื่อคุณปรับขีด จำกัด / เส้นโค้งแม้ว่าผลลัพธ์จะเห็นได้ชัดเจนมากขึ้นด้วยตาเปล่า แต่มันไม่ได้เป็นตัวแทนที่แม่นยำของสิ่งที่เปลี่ยนไป เมื่อไหร่ที่คุณไม่ต้องเปรียบเทียบ 100% กับ 95% อีกต่อไป
จิน

แน่นอนว่าคุณเป็น ระดับการบีบอัดหยุดลงเมื่อโฟโต้ช็อปที่สองโหลดอิมเมจจากดิสก์ลงในบัฟเฟอร์ภายในตอนนี้มันเป็นอาร์เรย์พิกเซลที่ไม่มีการบีบอัดในหน่วยความจำ ... ถ้าพิกเซลเหล่านั้นไปถึงที่นั่นเพราะภาพมีหยดสี่เหลี่ยมที่นั่นหรือเป็นวัตถุ ของระดับการบีบอัดไม่เกี่ยวข้อง
cabbey

13

แพ็คเกจการประมวลผลภาพทั้งหมดควรทำให้ง่ายขึ้น ฉันจะแสดงวิธีการทำใน Mathematica ถ้าคุณมีการเข้าถึงระบบนี้ Mathematica เป็นภาษาการเขียนโปรแกรม แต่มันง่ายมากที่จะทำการจัดการเช่นนี้ดังนั้นถ้าคุณสามารถเข้าถึงมันได้ (เช่นผ่านใบอนุญาตเว็บไซต์มหาวิทยาลัย) ฉันขอแนะนำให้คุณลองทำดู!

ก่อนอื่นนำเข้ารูปภาพ:

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

บีบอัดใหม่โดยใช้การบีบอัด JPEG

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

กราฟิกทางคณิตศาสตร์

ตอนนี้นำความแตกต่างของค่าพิกเซลมาแปลงเป็นตัวเลขทศนิยมก่อนเพื่อให้แน่ใจว่าค่าลบจะถูกรักษาไว้

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

กราฟิกทางคณิตศาสตร์

มองเห็นไม่มากในภาพที่แตกต่าง (ความแตกต่างเล็กมาก) และค่าลบถูกตัดเป็นสีดำ ดังนั้นเราจะช่วยลดค่าทั้งหมดเพื่อเติมเต็มช่วงไดนามิกทั้งหมด (ค่าต่ำสุดจะถูกปรับเป็น 0, สูงสุดถึง 1):

ImageAdjust[diff]

กราฟิกทางคณิตศาสตร์

ImageDifferenceให้ความแตกต่างอย่างแท้จริงของภาพสองภาพและไม่สร้างจำนวนลบ นี่คือการดำเนินการที่คุณมักจะพบในแพ็คเกจการประมวลผลภาพโดยเฉพาะอย่างยิ่ง GUI (Photoshop, GIMP)

ImageDifference[img, img2]

กราฟิกทางคณิตศาสตร์

นอกจากนี้เรายังสามารถใช้ช่อง RGB เดียวเช่นสีแดงและเห็นภาพความแตกต่างในเชิงบวกและลบโดยใช้สี 'ตรงข้าม':

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

กราฟิกทางคณิตศาสตร์

นี่คือสิ่งเดียวกันโดยมีความแตกต่างขยาย 5 เท่า สิ่งประดิษฐ์ JPEG เป็นที่รู้จักมากขึ้นในขณะนี้

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

กราฟิกทางคณิตศาสตร์

ข้อดีของการใช้ภาษาการเขียนโปรแกรมคือเราสามารถทำให้สิ่งนี้เป็นไปโดยอัตโนมัติได้อย่างง่ายดายและดูว่าความแตกต่างของ "ระดับการบีบอัด" ระหว่าง 0.1 ถึง 1.0 เป็นอย่างไร:

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]

กราฟิกทางคณิตศาสตร์


มันดีเสมอที่จะเห็นตัวเลือกสคริปต์ / อัตโนมัติ! :)
jrista

5

คุณสามารถใช้เครื่องมือบรรทัดคำสั่ง Imagemagick

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

จะให้ค่าสัมบูรณ์ของความแตกต่างสำหรับแต่ละช่อง RGB



0
  1. เปิดภาพหนึ่งภาพใน GIMP หรือ Photoshop
  2. เพิ่มภาพที่สองเป็นเลเยอร์ใหม่ที่ด้านบนของภาพแรก
  3. ตั้งค่าโหมดการผสมผสานของเลเยอร์ด้านบนเป็น "ความแตกต่าง"

ในภาพผลลัพธ์ส่วนที่เป็นสีดำแสดงตำแหน่งที่ภาพต้นฉบับเหมือนกันและสิ่งที่เบากว่าแสดงความแตกต่าง


ความแตกต่างเพียงอย่างเดียวไม่ได้ช่วยอะไรมากนักเมื่อคุณถูกทิ้งให้เป็นโมฆะสีดำขนาดใหญ่เช่นนั้น :)
cabbey

คุณสามารถปรับระดับของภาพที่ได้ เมื่อใดก็ตามที่ผมเคยใช้เทคนิคนี้ผมเคยมีภาพที่แตกต่างกันมากพอที่จะสามารถที่จะเห็นการเปลี่ยนแปลง :)
แดน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.