应用不同的颜色映射到掩模

3
我有一张图像和一个掩码,想要根据掩码应用两种不同的颜色方案。未被掩盖的值将使用灰色色图绘制,而被掩盖的值将使用 jet 色图绘制。在 Matplotlib 中是否可能实现这样的操作?

使用Matplotlib非常容易,你有示例图像和掩码吗? - Rutger Kassies
让我们来简单说一下这个减少的案例(因为我的图像大约是1000x1000像素):im = np.array([[2, 3, 2], [3, 4, 1], [6, 1, 5]]); mask = np.array([[False, False, True], [False, True, True], [False, False, False]]) - oschoudhury
1个回答

4

我的做法是创建一个掩码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)

如果您没有为imshow指定vmaxvmin值,那么颜色映射将会根据数组中未屏蔽部分的最小值和最大值进行拉伸。因此,为了得到一种可比较的颜色映射,请将未屏蔽数组的最小值和最大值应用于imshow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接