1. numpy转vtkImageData
from vtk.util import numpy_support
import numpy as np
import vtk
def np_array2vtk_image(np_array):
depth_arr = numpy_support.numpy_to_vtk(np_array.ravel(), deep=True, array_type=vtk.VTK_DOUBLE)
im_data = vtk.vtkImageData()
im_data.SetDimensions(np_array.shape)
im_data.SetSpacing([1, 1, 1])
im_data.SetOrigin([0, 0, 0])
im_data.GetPointData().SetScalars(depth_arr)
return im_data
data = np.array([[[0, 0, 0], [0, 1, 0], [0, 0, 0]],
[[0, 1, 0], [1, 1, 1], [0, 1, 0]],
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]])
np_array2vtk_image(data)
2. vtkImageData转numpy
from vtk.util import numpy_support
import numpy as np
import vtk
def vtk_image2np_arrar(vtk_image):
sc = vtk_image.GetPointData().GetScalars()
arr = vtk_to_numpy(sc)
arr = arr.reshape(vtk_image.GetDimensions())
return arr
3. 渲染vtk_image
from vtk.util import numpy_support
import vtk
import SimpleITK as sitk
import numpy as np
def render_image(vtk_image_data):
renderer = vtk.vtkRenderer()
ren_win = vtk.vtkRenderWindow()
ren_win.AddRenderer(renderer)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(ren_win)
reader = vtk.vtkStructuredPointsReader()
reader.SetFileName("a.vti")
opac_trans_func = vtk.vtkPiecewiseFunction()
opac_trans_func.AddPoint(0, 0.0)
opac_trans_func.AddPoint(1, 1.0)
color_trans_func = vtk.vtkColorTransferFunction()
color_trans_func.AddRGBPoint(0, 0.0, 0.0, 0.0)
color_trans_func.AddRGBPoint(1, 1.0, 1.0, 1.0)
vol_prop = vtk.vtkVolumeProperty()
vol_prop.SetColor(color_trans_func)
vol_prop.SetScalarOpacity(opac_trans_func)
vol_prop.ShadeOn()
vol_prop.SetInterpolationTypeToLinear()
mapper = vtk.vtkSmartVolumeMapper()
mapper.SetBlendModeToComposite()
mapper.SetInputData(vtk_image_data)
vol = vtk.vtkVolume()
vol.SetMapper(mapper)
vol.SetProperty(vol_prop)
renderer.AddVolume(vol)
renderer.SetBackground(1, 1, 1)
ren_win.SetSize(512, 512)
ren_win.Render()
iren.Start()
4. 渲染vtkPolyData
def render_poly(poly_data):
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(poly_data)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderer.AddActor(actor)
render_window = vtk.vtkRenderWindow()
render_window.AddRenderer(renderer)
render_interactor = vtk.vtkRenderWindowInteractor()
render_interactor.SetRenderWindow(render_window)
render_interactor.Initialize()
render_window.Render()
render_interactor.Start()