Todos os pacotes de processamento de imagens devem facilitar isso. Vou mostrar como fazer isso no Mathematica, se você tiver acesso a esse sistema. O Mathematica é uma linguagem de programação, mas é realmente fácil fazer esse tipo de manipulação; portanto, se você tiver acesso a ela (por exemplo, através de uma licença de universidade), recomendo que experimente!
Primeiro, importe a imagem:
img = Import["http://farm1.staticflickr.com/62/171463865_36ee36f70e.jpg"]
Recomprima usando compressão JPEG
img2 = ImportString@ExportString[img, "JPEG", "CompressionLevel" -> 0.35]
Agora pegue a diferença dos valores de pixel, convertendo-os primeiro em números de ponto flutuante para garantir que os valores negativos sejam preservados.
diff = ImageSubtract[Image[img, "Real"], Image[img2, "Real"]]
Não há muito visível na imagem da diferença (a diferença é pequena) e os valores negativos são cortados em preto. Então, vamos redimensionar todos os valores para preencher todo o intervalo dinâmico (o mínimo será escalado para 0, o máximo para 1):
ImageAdjust[diff]
ImageDifference
dá a diferença absoluta das duas imagens e não produz números negativos. Essa é a operação que você provavelmente encontrará nos pacotes de processamento de imagens, especialmente os da GUI (Photoshop, GIMP).
ImageDifference[img, img2]
Também podemos pegar um único canal RGB, por exemplo, o vermelho, e visualizar as diferenças positivas e negativas usando cores 'opostas':
ArrayPlot[0.5 + ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
Aqui está a mesma coisa, com as diferenças amplificadas 5 vezes. Os artefatos JPEG são mais reconhecíveis agora.
ArrayPlot[0.5 + 5 ImageData[First@ColorSeparate[diff, "Red"]],
ColorFunction -> "RedGreenSplit", ColorFunctionScaling -> False]
A vantagem de usar uma linguagem de programação é que podemos automatizar isso facilmente e ver como a diferença muda para "níveis de compactação" entre 0,1 e 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]