Todos los paquetes de procesamiento de imágenes deberían facilitar esto. Le mostraré cómo hacerlo en Mathematica, si tiene acceso a este sistema. Mathematica es un lenguaje de programación, pero es realmente fácil hacer este tipo de manipulaciones, por lo que si tiene acceso a él (por ejemplo, a través de una licencia universitaria), ¡le recomiendo que lo pruebe!
Primero, importe la imagen:
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
Recomprimirlo usando compresión JPEG
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
Ahora tome la diferencia de los valores de píxeles, convirtiéndolos primero en números de punto flotante para garantizar que se conserven los valores negativos.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
No se ve mucho en la imagen de diferencia (la diferencia es pequeña), y los valores negativos se recortan en negro. Entonces, cambiemos la escala de todos los valores para llenar todo el rango dinámico (el mínimo se escalará a 0, el máximo a 1):
ImageAdjust[diff]
ImageDifference
da la diferencia absoluta de las dos imágenes y no produce números negativos. Esta es la operación que es más probable que encuentre en los paquetes de procesamiento de imágenes, especialmente los GUI (Photoshop, GIMP).
ImageDifference[img, img2]
También podemos tomar un solo canal RGB, por ejemplo el rojo, y visualizar las diferencias positivas y negativas usando colores 'opuestos':
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Aquí está lo mismo, con las diferencias amplificadas 5 veces. Los artefactos JPEG ahora son más reconocibles.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
La ventaja de usar un lenguaje de programación es que podemos automatizarlo fácilmente y ver cómo cambia la diferencia para los "niveles de compresión" entre 0.1 y 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]