一:主要的知识点
1、说明
本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程------逐行解析官网所有Python示例-CSDN博客
2、知识点纪要
本段代码主要涉及的有①vtkPolyDataConnectivityFilter提取最大连通域的使用
二:代码及注释
python
import vtkmodules.vtkRenderingOpenGL2
from vtkmodules.vtkCommonColor import vtkNamedColors
from vtkmodules.vtkFiltersCore import vtkFlyingEdges3D, vtkMarchingCubes, vtkPolyDataConnectivityFilter
from vtkmodules.vtkIOLegacy import vtkStructuredPointsReader
from vtkmodules.vtkRenderingCore import (
vtkActor,
vtkPolyDataMapper,
vtkProperty,
vtkRenderWindow,
vtkRenderWindowInteractor,
vtkRenderer
)
def main():
colors = vtkNamedColors()
colors.SetColor('SkinColor', [240, 184, 160, 255])
colors.SetColor('BackfaceColor', [255, 229, 200, 255])
colors.SetColor('BkgColor', [51, 77, 102, 255])
file_name = "Data/brain.vtk"
threshold = 50
largest_surface = False # 是否提取最大连通域
use_flying_edges = True
reader = vtkStructuredPointsReader()
reader.SetFileName(file_name)
reader.Update()
if use_flying_edges:
mc = vtkFlyingEdges3D()
else:
mc = vtkMarchingCubes()
mc.SetInputConnection(reader.GetOutputPort())
mc.ComputeNormalsOff()
mc.ComputeGradientsOn()
mc.SetValue(0, threshold)
confilter = vtkPolyDataConnectivityFilter()
confilter.SetInputConnection(mc.GetOutputPort())
confilter.SetExtractionModeToLargestRegion()
mapper = vtkPolyDataMapper()
mapper.SetInputConnection(confilter.GetOutputPort())
mapper.ScalarVisibilityOff()
actor = vtkActor()
actor.GetProperty().SetColor(colors.GetColor3d('SkinColor'))
back_prop = vtkProperty()
back_prop.SetDiffuseColor(colors.GetColor3d('BackfaceColor'))
actor.SetBackfaceProperty(back_prop)
actor.SetMapper(mapper)
renderer = vtkRenderer()
renderer.AddActor(actor)
renderer.SetBackground(colors.GetColor3d('SlateGray'))
renderer.GetActiveCamera().SetViewUp(0.0, 0.0, 1.0)
renderer.GetActiveCamera().SetPosition(0.0, 1.0, 0.0)
renderer.GetActiveCamera().SetFocalPoint(0.0, 0.0, 0.0)
renderer.ResetCamera()
renderer.GetActiveCamera().Azimuth(30.0)
renderer.GetActiveCamera().Elevation(30.0)
ren_win = vtkRenderWindow()
ren_win.AddRenderer(renderer)
ren_win.SetSize(640, 480)
ren_win.SetWindowName('ExtractLargestIsosurface')
iren = vtkRenderWindowInteractor()
iren.SetRenderWindow(ren_win)
ren_win.Render()
iren.Initialize()
iren.Start()
if __name__ == '__main__':
main()