Semua paket pemrosesan gambar harus membuatnya mudah. Saya akan menunjukkan kepada Anda bagaimana melakukannya di Mathematica, jika Anda memiliki akses ke sistem ini. Mathematica adalah bahasa pemrograman, tetapi sangat mudah untuk melakukan manipulasi semacam ini, jadi jika Anda memiliki akses ke sana (misalnya melalui lisensi situs universitas), saya sarankan Anda mencobanya!
Pertama, impor gambar:
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
Kompres ulang menggunakan kompresi JPEG
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
Sekarang ambil perbedaan nilai piksel, konversikan terlebih dahulu dengan angka floating point untuk memastikan bahwa nilai negatif dipertahankan.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
Tidak banyak yang terlihat pada gambar perbedaan (perbedaannya kecil), dan nilai negatif terpotong menjadi hitam. Jadi mari kita skala ulang semua nilai untuk mengisi seluruh rentang dinamis (minimum akan diskalakan ke 0, maksimum ke 1):
ImageAdjust[diff]
ImageDifference
memberikan perbedaan absolut dari kedua gambar, dan tidak menghasilkan angka negatif. Ini adalah operasi yang lebih mungkin Anda temukan dalam paket pemrosesan gambar, terutama yang GUI (Photoshop, GIMP).
ImageDifference[img, img2]
Kami juga dapat mengambil satu saluran RGB, misalnya yang merah, dan memvisualisasikan perbedaan positif dan negatif menggunakan warna 'berlawanan':
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Inilah hal yang sama, dengan perbedaan diperkuat 5 kali. Artefak JPEG lebih mudah dikenali sekarang.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Keuntungan menggunakan bahasa pemrograman adalah kita dapat dengan mudah mengotomatisasi ini dan melihat bagaimana perbedaannya berubah untuk "tingkat kompresi" antara 0,1 dan 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]