怎么从已知图片里面找到目标图片

2024-11-13 14:19:32

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

怎么从已知图片里面找到目标图片

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

怎么从已知图片里面找到目标图片

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左上角截取某个图片,并只保留第一通道的灰度图。注意,imgu和img0大小一样。

怎么从已知图片里面找到目标图片

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}

怎么从已知图片里面找到目标图片
猜你喜欢