3

我有一张图像和一个蒙版,并且想根据蒙版应用两种不同的配色方案。未屏蔽的值将被绘制,例如,使用灰色地图和使用喷射颜色地图屏蔽的值。

在 Matplotlib 中是否有类似的可能?

4

1 回答 1

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)

在此处输入图像描述

如果您不为 指定 avmaxvminimshow,则颜色图将从数组的未屏蔽部分延伸到最小值和最大值。因此,要获得可比较的颜色图,请将未屏蔽数组中的最小值和最大值应用于imshow.

于 2013-09-10T12:13:21.577 回答