2013-09-10 3 views
3

У меня есть одно изображение и одна маска и вы хотите применить две разные цветовые схемы в зависимости от маски. Значения, которые не замаскированы, будут отображаться, например, с серой цветовой картой и значениями, которые маскируются с помощью карты цвета струи.Применение другой цветовой карты для маскировки

Возможно ли это в Matplotlib?

+0

Его очень легко с Matplotlib, у вас есть образец изображения и маска? –

+0

Давайте просто скажем этот сокращенный случай (поскольку мое изображение ~ 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

ответ

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 и vmin для imshow, палитра будет растягиваться до минимального и максимального из немаскированных частей массива. Таким образом, чтобы получить сопоставимую комбинацию цветов, используйте min и max из массива без маскирования до imshow.

+0

Работает отлично! – oschoudhury

Смежные вопросы