2次元画像のカラーマップ指定

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)
タグ: , , , , , ,

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*