Alle Bildverarbeitungspakete sollten dies einfach machen. Ich zeige Ihnen, wie es in Mathematica gemacht wird, wenn Sie Zugriff auf dieses System haben. Mathematica ist eine Programmiersprache, aber es ist wirklich einfach, diese Art von Manipulationen durchzuführen. Wenn Sie also Zugriff darauf haben (z. B. über eine Universitätslizenz), empfehle ich, dass Sie es ausprobieren!
Importieren Sie zunächst das Bild:
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
Komprimieren Sie es erneut mit JPEG-Komprimierung
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
Nehmen Sie nun die Differenz der Pixelwerte und konvertieren Sie sie zuerst in Gleitkommazahlen, um sicherzustellen, dass negative Werte erhalten bleiben.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
Auf dem Differenzbild ist nicht viel zu sehen (der Unterschied ist winzig), und negative Werte werden auf Schwarz abgeschnitten. Skalieren wir also alle Werte neu, um den gesamten Dynamikbereich auszufüllen (das Minimum wird auf 0 skaliert, das Maximum auf 1):
ImageAdjust[diff]
ImageDifference
gibt den absoluten Unterschied der beiden Bilder an und erzeugt keine negativen Zahlen. Dies ist der Vorgang, den Sie eher in Bildverarbeitungspaketen finden, insbesondere in GUI-Paketen (Photoshop, GIMP).
ImageDifference[img, img2]
Wir können auch einen einzelnen RGB-Kanal verwenden, zum Beispiel den roten, und die positiven und negativen Unterschiede mit 'entgegengesetzten' Farben visualisieren:
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Hier ist das Gleiche, mit den Unterschieden, die fünfmal verstärkt wurden. Die JPEG-Artefakte sind jetzt besser erkennbar.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Der Vorteil der Verwendung einer Programmiersprache besteht darin, dass wir dies leicht automatisieren können und sehen können, wie sich der Unterschied für "Komprimierungsstufen" zwischen 0,1 und 1,0 ändert:
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]