应用不同的颜色映射来掩盖

时间:2013-09-10 11:44:19

标签: python matplotlib

我有一个图像和一个蒙版,并希望根据蒙版应用两种不同的颜色方案。例如,将使用灰色颜色贴图和使用喷射颜色贴图屏蔽的值来绘制未屏蔽的值。

在Matplotlib中是否可以这样?

1 个答案:

答案 0 :(得分:3)

我的方法是创建一个蒙版的numpy数组并在灰度图像上重叠它。屏蔽的值默认为不透明度为0,使它们不可见,从而显示下面的灰度图像。

im = np.array([[2, 3, 2], [3, 4, 1], [6, 1, 5]])
mask = np.array([[False, False, True], [False, True, True], [False, False, False]])

# note that the mask is inverted (~) to show color where mask equals true
im_ma = np.ma.array(im, mask=~mask)

# some default keywords for imshow
kwargs = {'interpolation': 'none', 'vmin': im.min(), 'vmax': im.max()}

fig, ax = plt.subplots(1,3, figsize=(10,5), subplot_kw={'xticks': [], 'yticks': []})

ax[0].set_title('"Original" data')
ax[0].imshow(im, cmap=plt.cm.Greys_r, **kwargs)

ax[1].set_title('Mask')
ax[1].imshow(mask, cmap=plt.cm.binary, interpolation='none')

ax[2].set_title('Masked data in color (jet)')
ax[2].imshow(im, cmap=plt.cm.Greys_r, **kwargs)
ax[2].imshow(im_ma, cmap=plt.cm.jet, **kwargs)

enter image description here

如果您没有为vmax指定vminimshow值,则色彩映射将从数组的未屏蔽部分延伸到最小值和最大值。因此,要获得可比较的色彩映射,请将未屏蔽数组中的最小值和最大值应用于imshow