Detecting moved and dirty areas between two snapshots/images
I love abstract art.  It speaks to something inside of me that is outside the library, it speaks in words but not words.  One of my favorite artists is Wassily Kandinsky.  

An image of his that could meet the requirements of the problem, both with "text" and translation of a circle, is his "Circle within a circle".  The bouncing globe animation is pristine, not textured, and doesn't have the text.

Also, the real world is messy and complex, so outside of explicitly specifying "this must work only on computer-generated content", any viable method has to hand a few real-world curve-balls.

Here is a copy of it:


So using MS Paint, I moved one of the circles and hashed up the lines in a way that should be consistent with local text changes. 

Here it is:


So lets open up the files, convert to grayscale, and subtract them.

Here is some code:

import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image

#read in images
#name of input file
fname1 = './wassily-kandinsky(A).png'
fname2 = './wassily-kandinsky(B).png'

#read the files, convert to grayscale
img1 = Image.open(fname1).convert("L")
img2 = Image.open(fname2).convert("L")

#convert to numpy array for math
arr1 = np.asarray(img1)
arr2 = np.asarray(img2)

#smooth (to remove some of the manual-editing real-world images artifacts)
kernel_width = 11
arr1b = cv2.bilateralFilter(arr1, kernel_width,75,75)
arr2b = cv2.bilateralFilter(arr2, kernel_width,75,75)

#subtract images
arr_diff = np.abs(arr2b-arr1b)


#show them
plt.imshow(arr1, cmap='gray')
plt.savefig("figure1.png", dpi=300)
plt.show()

plt.imshow(arr2, cmap='gray')
plt.savefig("figure2.png", dpi=300)
plt.show()

plt.imshow(arr_diff, cmap='gray')
plt.savefig("figure_diff.png", dpi=300)
plt.show()


And this gives slightly different initial images, and allows a decent difference image.

New (smoothed, grayscale) "unchanged" image:


New (smoothed, grayscale) "changed" image:


The difference between the two:


Here is a zoom in of the "signal area":


Next steps (to do when I get time):    


clean up circle signal, show how edge histograms clearly give locations
block location from difference image, show locations of "salt-and-pepper" which would come from alternate text in same location.