2017-06-02 97 views
1

假設256灰度圖像,如何使用保留的假顏色修改灰色cmap?

如何修改顏色映射plt.cm.gray,以便給定灰度值的像素以給定顏色(紅色,藍色...)顯示。例如,如何將值= 1的像素設置爲紅色並將值= 2的像素設置爲綠色?我想了解masked array example。但在這個例子中,似乎只能設置一種顏色。

我嘗試生成自定義CMAP「agrey」(這失敗):

## try to make a custom cmap 
Ngrey = 256 
a = np.linspace(0,1,num=Ngrey, endpoint=True) 
A = np.array((a,a,a)).transpose() 

#Set pixel with greylevel=1 to red 
A[1,1:3]=0 

col_dict = {'red':A,'green':A, 'blue':A} 
print col_dict['blue'].shape 
agrey = LinearSegmentedColormap('mygray', col_dict) 

回答

2

如你無論如何處理,而不是使用LinearSegmentedColormap在離散灰階,你可以使用一個ListedColormap,在那裏你定義你的256個灰度值,然後覆蓋你想要着色的值。下面用隨機圖片的小例子:

from matplotlib import pyplot as plt 
from matplotlib.colors import ListedColormap 
import numpy as np 

pic = np.random.randint(256, size=(100,100)) 

Ngrey = 256 
greys = np.linspace(0,1,Ngrey) 

colors = [[g,g,g] for g in greys] 

red = [1,0,0] 
green = [0,1,0] 
blue = [0,0,1] 

colors[5] = red 
colors[100] = blue 
colors[200] = green 

mymap=ListedColormap(colors) 

plt.matshow(pic, cmap=mymap) 
plt.show() 

然後結果看起來是這樣的:random grey scale image with certain, discrete values coloured in red, green, and blue

測試在Python 3.5

相關問題