2016-04-28 9 views
2

私はこのような測定データを持つテキストファイルを持っています。イメージの座標にある値

x y z 
1 3 -2 
2 1 -3 
3 1 1 
2 2 3 
1 2 2 
2 3 0 

これは(X上、Yグリッド)以下の測定を意味するであろう

-2 0 
2 3 
    -3 1 

私は測定画像が透明であることを意味しないだろう、これらの値から画像を作成します。可能であれば、z値(例えば-9.4から+3.2まで)をcolormap.jetのようなカラーマップにマップしたいと思います。

私はPythonイメージライブラリとputpixelを使ってこれを試みましたが、これは非常にです遅く、私はこれを行うより良い方法がなければならないと確信しています。

私の現在のコード: basePathを= os.path.dirname(os.path.realpath(ファイル))#は、現在のファイルが srcFiles = glob.glob( '* PTS')を常駐するディレクトリを定義しますsrcFilesでのファイル名の

data = pd.read_csv(os.path.join(basePath, fileName), names=['x', 'y', 'z'], delim_whitespace=True) 

print fileName 
maxX = data.x.max() 
minX = data.x.min() 
maxY = data.y.max() 
minY = data.y.min() 
minZ = data.z.min() 
maxZ = data.z.max() 

width = maxX-minX 
height = maxY-minY 

img = Image.new('L', (int(width), int(height))) 


for x in range(int(width)): 
    for y in range(int(height)): 
     value = data[(data['x'] == (minX+x)) & (data['y'] == (minY+y))]['z'] 
     if len(value) == 0: 
      value = 99.; 

     img.putpixel((x,y),int(value)) 

img.save('test.png') 

答えて

2

たぶん、あなただけの画像を操作するためにnumpyの行列を使用する必要があります。あなたがすでに持っているので、私はcsvの読み込み部分をしませんでした。マスクされた配列は透明なピクセルを持つことができます。

import numpy as np 
import matplotlib.pyplot as plt 

INPUT = np.array(
[[1, 3, -2] 
,[2, 1, -3] 
,[3, 1, 1] 
,[2, 2, 3] 
,[1, 2, 2] 
,[2, 3, 0]]) 

# get ranges 
xmin = INPUT[:,0].min() 
xmax = INPUT[:,0].max() 
ymin = INPUT[:,1].min() 
ymax = INPUT[:,1].max() 
zmin = INPUT[:,2].min() 
zmax = INPUT[:,2].max() 

# create array for image : zmax+1 is the default value 
shape = (xmax-xmin+1,ymax-ymin+1) 
img = np.ma.array(np.ones(shape)*(zmax+1)) 

for inp in INPUT: 
    img[inp[0]-xmin,inp[1]-ymin]=inp[2] 

# set mask on default value 
img.mask = (img==zmax+1) 

# set a gray background for test 
img_bg_test = np.zeros(shape) 
cmap_bg_test = plt.get_cmap('gray') 
plt.imshow(img_bg_test,cmap=cmap_bg_test,interpolation='none') 

# plot 
cmap = plt.get_cmap('jet') 
plt.imshow(img,cmap=cmap,interpolation='none',vmin=zmin,vmax=zmax) 
plt.colorbar() 

plt.imsave("test.png",img) 
plt.show() 
plt.close() 

output imsaveは、私がここに表示され数字が、tは3×3画素を有する興味深いものwouldnあなたが好きな画像を保存していないことに注意してください。

関連する問題