两幅图像之间的Matplotlib差异

两幅图像之间的Matplotlib差异,matplotlib,plot,patch,figure,Matplotlib,Plot,Patch,Figure,我有一些图像(4000x2000像素)是从同一个图像中派生出来的,但是在不到1%的像素中有细微的差异。我想并排绘制这两幅图像,并突出显示阵列中不同的区域(通过高亮显示我的意思是我希望不同的像素跳出,但仍然显示与其值匹配的颜色。到目前为止,我一直在使用未填充的矩形来勾勒这些像素的边缘。我可以在小图像(~50x50)中很好地做到这一点: 但是,当图像非常大时,这种方法不太管用。奇怪的事情会发生,例如当我放大补丁消失时。而且,这种方法很糟糕,因为当我放大/缩小时,加载东西要花很长时间 我觉得一定有更好

我有一些图像(4000x2000像素)是从同一个图像中派生出来的,但是在不到1%的像素中有细微的差异。我想并排绘制这两幅图像,并突出显示阵列中不同的区域(通过高亮显示我的意思是我希望不同的像素跳出,但仍然显示与其值匹配的颜色。到目前为止,我一直在使用未填充的矩形来勾勒这些像素的边缘。我可以在小图像(~50x50)中很好地做到这一点:

但是,当图像非常大时,这种方法不太管用。奇怪的事情会发生,例如当我放大补丁消失时。而且,这种方法很糟糕,因为当我放大/缩小时,加载东西要花很长时间

我觉得一定有更好的方法可以做到这一点,也许只有一个补丁决定所有东西的位置,而不是一堆补丁。我可以在imshow图像上做一个散点图,但我不知道如何修复它,这样当我放大/缩小时,这些点将保持像素的大小


有什么想法吗?

我想试试alpha频道:

import copy
N, M = 20, 40
test_data = np.random.rand(N, M)
mark_mask = np.random.rand(N, M) < .01 # mask 1%
# this is redundant in this case, but in general you need it
my_norm = matplotlib.colors.Normalize(vmin=0, vmax=1)
# grab a copy of the color map
my_cmap = copy.copy(cm.get_cmap('cubehelix'))
c_data= my_cmap(my_norm(test_data))
c_data[:, :, 3] = .5 # make everything half alpha
c_data[mark_mask, 3] = 1 # reset the marked pixels as full opacity
# plot it
figure()
imshow(c_data, interpolation='none')
导入副本
N、 M=20,40
测试数据=np.rand.rand(N,M)
mark#u mask=np.rand.rand(N,M)<.01#mask 1%
#在这种情况下,这是多余的,但通常您需要它
my_norm=matplotlib.colors.Normalize(vmin=0,vmax=1)
#抓取一份彩色地图的副本
my_cmap=copy.copy(cm.get_cmap('cubehelix'))
c_数据=my_cmap(my_范数(测试数据))
c#U数据[:,:,3]=0.5#使一切都变成半阿尔法
c#u数据[mark_mask,3]=1#将标记的像素重置为完全不透明度
#策划它
图(
imshow(c_数据,插值='none')

不知道这是否适用于您的数据。

这同样适用于较小的图像(尺寸为20x40),但不适用于较大的图像(尺寸大于1000x1000)。它给我留下了一个灰色的背景,即使我从一幅较大的图像放大到一幅小尺寸的图像,背景仍然看起来是灰色的,而不是它应该是什么样子的。还有其他想法吗?放大时对我来说很好。你在使用什么颜色的贴图?实际上现在我正在计算机上尝试它使用更快的处理器/更好的图形卡,它看起来真的很不错。谢谢!
import copy
N, M = 20, 40
test_data = np.random.rand(N, M)
mark_mask = np.random.rand(N, M) < .01 # mask 1%
# this is redundant in this case, but in general you need it
my_norm = matplotlib.colors.Normalize(vmin=0, vmax=1)
# grab a copy of the color map
my_cmap = copy.copy(cm.get_cmap('cubehelix'))
c_data= my_cmap(my_norm(test_data))
c_data[:, :, 3] = .5 # make everything half alpha
c_data[mark_mask, 3] = 1 # reset the marked pixels as full opacity
# plot it
figure()
imshow(c_data, interpolation='none')