VTK Table形式として読み込んだCSVファイル(m行n列のスカラ値)を基に、VTK ImageData形式の2次元画像を生成する。得られた2次元画像は、File→Save Dataにて直接PNG画像として保存できる。
本スクリプト中では、レインボーコンタ(Blue to Red Rainbow)に相当するRGB強度を返す関数HSV2RGBと、グレースケール強度を返す関数HSV2GSを定義する。いずれも戻り値は0.0 – 1.0の範囲で正規化しており、出力フォーマットに応じて定数倍する必要がある。
ParaViewが対応する色深度は、RGBの場合24bit(8bit×3色)、グレースケールの場合8bitおよび16bitである。ここでは24bit RGBで出力する場合を想定しているが、他のフォーマットで出力したい場合はコメント部を参考に適宜スクリプトを修正されたい。
Programmable Filter適用後、Object Inspector上のPropertiesタブにて‘Map Scalars’のチェックを外す。
動作確認バージョン
ParaView 4.2.0
Output Data Set Type
vtkImageData
Script
import numpy as np
def HSV2RGB(c, lower, upper):
r = (upper - lower) * 0.25
steps = np.arange(upper, lower - 0.5 * r, -r)
if c > steps[0]:
return np.array((1.0, 0.0, 1.0))
elif c > steps[1]:
return np.array((1.0, (steps[0] - c) / r, 0.0))
elif c > steps[2]:
return np.array(((c - steps[2]) / r, 1.0, 0.0))
elif c > steps[3]:
return np.array((0.0, 1.0, (steps[2] - c) / r))
elif c > steps[4]:
return np.array((0.0, (c - steps[4]) / r, 1.0))
else:
return np.array((0.0, 0.0, 0.5))
def HSV2GS(c, lower, upper):
return (c - lower) / (upper - lower)
inp = self.GetInput()
nc = inp.GetNumberOfColumns()
nr = inp.GetNumberOfRows()
out = self.GetOutput()
out.SetDimensions(nc, nr, 1)
out.SetOrigin(0, nr - 1, 0)
out.SetSpacing(1, 1, 1)
ca = vtk.vtkUnsignedCharArray() # vtk.vtkUnsignedShortArray() for 16bit
ca.SetName('PNGImage')
ca.SetNumberOfComponents(3) # 1 for Grayscale
ca.SetNumberOfTuples(nc * nr)
for i in range(nr):
for j in range(nc):
r, g, b = HSV2RGB(inp.GetValue(i, j).ToFloat(), 0.0, 1.0) * 255.0
ca.SetTuple3(i * nc + j, r, g, b)
# gray = HSV2GS(inp.GetValue(i, nc - j - 1).ToFloat(), 0.0, 1.0) * 65535.0
# ca.SetValue(i * nc + j, gray)
out.GetPointData().SetScalars(ca)
RequestInformation Script
from paraview import util inp = self.GetInput() nc = inp.GetNumberOfColumns() nr = inp.GetNumberOfRows() util.SetOutputWholeExtent(self, [0, nc - 1, 0, nr - 1, 0, 0])
コメントを残す