1値画像データに任意のカラーマップを適用する。直接カラーマップのRGB値を指定するため、Save Data時にそのままPNG形式で出力することが可能である。
Programmable Filter適用後、Object Inspector上のPropertiesタブにて‘Map Scalars’のチェックを外す。
動作確認バージョン
ParaView 4.2.0
Output Data Set Type
vtkImageData
Script
import numpy as np
variableName = 'PNGImage'
def HSV2RGB(c, lower, upper):
r = (upper - lower) / 6.0
steps = np.arange(upper, lower - 0.5 * r, -r)
if c > steps[0]:
return np.array((1.0, 0.0, 0.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))
elif c > steps[5]:
return np.array(((steps[6] - c) / r, 0.0, 1.0))
elif c > steps[6]:
return np.array((1.0, 0.0, (c - steps[6]) / r))
else:
return np.array((1.0, 0.0, 0.0))
def HSV2GS(c, lower, upper):
return (c - lower) / (upper - lower)
inp = self.GetInput()
n = inp.GetNumberOfPoints()
out = self.GetOutput()
out.CopyStructure(inp)
ca = vtk.vtkUnsignedCharArray() # vtk.vtkUnsignedShortArray() for 16bit
ca.SetName('PNGImage')
ca.SetNumberOfComponents(3) # 1 for Grayscale
for i in range(n):
r, g, b = HSV2RGB(inp.GetPointData().GetArray(variableName).GetValue(i), -1.0, 1.0) * 255.0
ca.InsertNextTuple((r, g, b))
# gray = HSV2GS(inp.GetPointData().GetArray(variableName)[i].ToFloat(), 0.0, 1.0) * 65535.0
# ca.InsertNextValue(gray)
out.GetPointData().SetScalars(ca)
コメントを残す