いろいろなスケールの画像データを Matplotlib で描画する
Matplotlib は画像データがどのような範囲をしめていようが、それなりに描画をしてくれます。下記のコードでそれが確認できます。
data0 は 0 ~ +255
data1 は 0.0 ~ +1.0
data2 は -0.5 ~ +0.5
data3 は -1.0 ~ +1.0
のデータ範囲です。
import numpy as np
import matplotlib.pyplot as plt
w = 512
h = 1024
numpix = w * h
# ubyte な1次元配列を確保する.
data0 = np.zeros( numpix, dtype=np.uint8)
# ななめウロコデータを格納する.
for j in range( h ):
adrs = w * j
for i in range( w ):
level = i + j
data0[ adrs ] = level
adrs += 1
# 最小値と最大値を取得する( 0 ~ 255).
value_min = np.min( data0 )
value_max = np.max( data0 )
print( "data0 min is {0:+}".format( value_min ) )
print( "data0 max is {0:+}".format( value_max ) )
print( "" )
# 0 ~ 1.0 にする.
data1 = data0 / 255.0
value_min = np.min( data1 )
value_max = np.max( data1 )
print( "data1 min is {0:+}".format( value_min ) )
print( "data1 max is {0:+}".format( value_max ) )
print( "" )
# -0.5 ~ +0.5 にする.
data2 = data1 - 0.5
value_min = np.min( data2 )
value_max = np.max( data2 )
print( "data2 min is {0:+}".format( value_min ) )
print( "data2 max is {0:+}".format( value_max ) )
print( "" )
# -1.0 ~ +1.0 にする.
data3 = (( data1 * 2.0 ) - 1.0 )
value_min = np.min( data3 )
value_max = np.max( data3 )
print( "data3 min is {0:+}".format( value_min ) )
print( "data3 max is {0:+}".format( value_max ) )
print( "" )
# 2次元配列に変換する、w と h の順に注目せよ.
data0_2d = data0.reshape( h, w )
data1_2d = data1.reshape( h, w )
data2_2d = data2.reshape( h, w )
data3_2d = data3.reshape( h, w )
# データを管理するリストを作成する.
list_data = []
list_data.append( data0_2d )
list_data.append( data1_2d )
list_data.append( data2_2d )
list_data.append( data3_2d )
# 書き込み要素を取得する.
fig = plt.figure()
# タイルの縦横の個数.
TILE_NUM_ROW = 1
TILE_NUM_COL = 4
# リストの要素回数だけループする.
plot_counter = 1
for data in list_data:
ax = fig.add_subplot( TILE_NUM_ROW, TILE_NUM_COL, plot_counter )
ax.set_title( "{0}".format( plot_counter ))
ax.axis( "off" )
plt.imshow( data, cmap="gray" )
plot_counter += 1
plt.show()
print( "finish." )
下記が実行結果です。
PS C:\tmp> python test.py
data0 min is +0
data0 max is +255
data1 min is +0.0
data1 max is +1.0
data2 min is -0.5
data2 max is +0.5
data3 min is -1.0
data3 max is +1.0
Matplotlib は、データのスケールが違っていてもほとんど同じく描画をします。