แพ็คเกจการประมวลผลภาพทั้งหมดควรทำให้ง่ายขึ้น ฉันจะแสดงวิธีการทำใน 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]