2017-11-06 10 views
0

.pngの画像をマスクとして使用しています。これらのマスクの問題は、それらがほんのわずかの値を含むことである。 12の値のみが0〜11です。私は有用な(私にとっては)方法でそれらを表示することができれば、異なる値を光学的に区別できることを意味します。私はこのアプローチを試してみました特定の色の範囲で画像を正しく表示するには

:ちょうど[0255)の値に[0,11]の値を投影し

from PIL import Image 
import numpy as np 
im = Image.open('mask.png') 
im.show() # it all black but different values exist 
len(set(list(im.getdata()))) 
a = 255/np.amax(np.array(im)) 
im = im * a 
im = Image.fromarray(im) 
im.show() 

が、それはあまりにも厄介で非効率に見えます。それは私のイメージの単純な表示のためにあまりにも多くの変換を含んでいます。

また、matplotlib.pyplotのオプションでcolormapを使用するようにしましたが、プロセスで紛失し、値の範囲を指定する方法が見つかりませんでした。

  1. 適切PILまたはpillowを使用して、私の画像を表示するオプションはありますか?
  2. また、matplotlibを使用して上記の目標を達成するアプローチは何ですか?

データの正確な表現に本当に関心がないことは明らかです。したがって、上記の方法を使用したラウンドアップエラーは問題になりません。

編集:

それは私のイメージは0から小さい値までの範囲で、グレースケールのものであり、それはどんな明確になり場合:[0, N], N << 255

w, h = 20, 20 
data = np.zeros((h, w)) 
data[5:10, 10:20] = 1 
data[6:10, 0:15] = 2 
data[10:15, 4:15] = 4 
# it's displayed as a black image 
Image.fromarray(data).show() 
# it's displayed as image with distinguishable values 
Image.fromarray(data*255/np.amax(data)).show() 
+0

'LEN(セット(リスト(im.getdata())))'ラインの目的は何ですか?ところで、PILイメージをNumpy配列に変換する通常の方法は 'np.asarray(img)'です。 –

+0

@PM 2Ring私はちょうどそれを(対話モードで)実際に異なる値があることを確認するために使用します(それはすべて画像表示で黒く表示されます) – Eypros

+0

最大値が11であることがわかっているなら、 'np.amax '。しかしそれとは別に、Imageから 'np.asarray(img)'を使って配列に変換し、それを乗算し、Image.fromarray(im)でImageに変換すると、実際にはかなり効率的です。 –

答えて

2

あなたはimshow()を使用してmatplotlibの中で配列を視覚化し、簡単に色が何を表しているかを示すためにカラーバーを使用することができます:

あなたが変更することができ
import numpy as np 
import matplotlib.pyplot as plt 
from PIL import Image 

# If not using fake data: 
# im = Image.open('mask.png') 
# data = np.array(im) 

data = np.random.randint(0,12,(6,6)) # random values between 0 and 11 

fig, ax = plt.subplots() 

im = ax.imshow(data) 
plt.colorbar(im, ax=ax) 

plt.show() 

enter image description here

こと(おもちゃの例)のようなもの引数vminおよびvmaximshow()

に設定したカラーバーの範囲(したがってデータの表示)
im = ax.imshow(data, vmin=0, vmax=20) 

enter image description here

+0

特定の画像範囲[0,10]の値があっても、値[0,20]のカラーマップを使用して簡単に画像を表示できますか? – Eypros

+0

あなたは何を意味するのか分かりません。カラーバーの範囲を変更するのと同じですか?または実際にデータ自体を変更しますか? – DavidG

+0

カラーマップの範囲を変更します。上記の例では、 '255/np.amax(data)'を任意の値で変更することになります。多分カラーバーの範囲の変更と同じですが、わかりません。 – Eypros

関連する問題