3

1 つの画像と 1 つのマスクがあり、マスクに応じて 2 つの異なる配色を適用したいと考えています。マスクされていない値は、たとえばグレー カラー マップでプロットされ、ジェット カラー マップでマスクされた値がプロットされます。

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)

ここに画像の説明を入力

vmaxにとのvmin値を指定しない場合imshow、カラーマップは配列のマスクされていない部分から最小値と最大値に引き伸ばされます。したがって、同等のカラーマップを取得するには、マスクされていない配列の最小値と最大値を に適用しますimshow

于 2013-09-10T12:13:21.577 に答える