1、把两幅图片载入到Mathematica里面,并分别命名为img和img0。

2、把图片都转化为图像数据,并提取图片的第一通道的数包铲据:
{a0,b0}=ImageData[#]&/@{img,img0};{a,b}=#[[All,All,1]]&/@{a0,b0};

3、查看图片尺寸:
{u,v}=ImageDimensions[img]{p,q}=ImageDimensions[img0]
其中,u和p代表图片宽度,v和q代表图片高度。
imgu=Image[Table[a[[m,n]],{m,1,q,1},{n,1,p,1}]]
目标是从img左上角截取某个图片,并只保留第一通道的灰度图。

4、Image[b]和imgu都是同样大小的单通道图片,那么,这两个图片可以相减:
imgu-Image[b]
两个完全相同的图片,相减之后,成图全黑;

5、而这一点,可以通过对图片数据进行计算,加以区别:
(imgu-Image[b]//ImageData//Flatten)^2//Total
注意,上面用的算法,是取数据差值的盯昆侧平方和;也就是说,当且仅当结果等于0,才能说明两幅图片相同。

6、下面图片里面的算法,可以帮助我们在原图中找到img0的左上角的位置。
从运行结果可以看出来,img从左上角开始数,第16列、第18行的那个像素,与img0左上角的那个像素是对应的。
换个说法,截图的时候,是从img的那个位置上往右下角拖拽,得到的截图。

7、可以验证一下:
aa=Img[ss[[1,1]],ss[[1,2]]]
(aa-Image[b]//ImageData//Flatten)^2//Total
其中,Img是一个自定义函数。
通过运行结果,可以发现,图片aa和Image[b]是完全一样的。

8、其实,上面荡珠所有的分析,就是为了找到img0的左上角在原图(img)里面的位置。
知道了位置,我们就可以在原图中用绿色框把img0突显出来。
但是有一点要注意,矩形的绘制,是从左下角到右上角进行的,因此,要计算出左下角的像素位置:
{ss[[1,1]],v-ss[[1,2]]-q}
那么,右上角的位置,就是:
{ss[[1,1]],v-ss[[1,2]]-q}+{p,q}
