def levelset_seg(): ''' 图像的水平集分割,生成等值面 ''' input_file = "vesselVoi.vti" output_filename = 'vessellevelset.vtp' reader = imagereader.vmtkImageReader() # 图像序 reader.InputFileName = input_file reader.Format = "vtkxml" reader.UseITKIO = 0 reader.Execute() levelset = levelsetseg.vmtkLevelSetSegmentation() levelset.Image = reader.Image levelset.LevelSetsType = "geodesic" # '["geodesic","curves","threshold","laplacian"]' levelset.FeatureImageType = "gradient" # '["vtkgradient","gradient","upwind","fwhm"]' levelset.Execute() marchingcube = marchingcubes.vmtkMarchingCubes() marchingcube.Image = levelset.LevelSetsOutput marchingcube.Execute() writer = surfacewriter.vmtkSurfaceWriter() writer.Surface = marchingcube.Surface writer.Format = "vtkxml" writer.OutputFileName = output_filename writer.Execute()
def suface_flow_extension(input_file, output_file): ''' 给表面添加流拓展 ''' surface_reader = sr.vmtkSurfaceReader() surface_reader.InputFileName = input_file surface_reader.Execute() centerline = cl.vmtkCenterlines() centerline.Surface = surface_reader.Surface centerline.SeedSelectorName = 'openprofiles' centerline.Execute() flow_extension = fex.vmtkFlowExtensions() flow_extension.Surface = surface_reader.Surface flow_extension.Centerlines = centerline.Centerlines flow_extension.AdaptiveExtensionLength = 1 flow_extension.ExtensionRatio = 20 flow_extension.CenterlineNormalEstimationDistanceRatio = 1 flow_extension.Interactive = 0 flow_extension.Execute() surface_writer = sw.vmtkSurfaceWriter() surface_writer.Surface = flow_extension.Surface surface_writer.OutputFileName = output_file surface_writer.Execute()
def surfaceclipp_centerline(input_file, output_file): ''' 使用中心线自动的裁剪端口 ''' surface_reader = sr.vmtkSurfaceReader() surface_reader.InputFileName = input_file surface_reader.Execute() centerline = cl.vmtkCenterlines() centerline.Surface = surface_reader.Surface centerline.Execute() endpointextractor = ep.vmtkEndpointExtractor() endpointextractor.Centerlines = centerline.Centerlines endpointextractor.Execute() branchclipper = bc.vmtkBranchClipper() branchclipper.Surface = surface_reader.Surface branchclipper.Centerlines = endpointextractor.Centerlines branchclipper.Execute() surface_connectivity = sufct.vmtkSurfaceConnectivity() surface_connectivity.Surface = branchclipper.Surface surface_connectivity.CleanOutput = 1 surface_connectivity.Execute() surface_writer = sw.vmtkSurfaceWriter() surface_writer.Surface = surface_connectivity.Surface surface_writer.OutputFileName = output_file surface_writer.Execute()
def surfaceclipp(input_file, out_file): ''' 裁剪表面的端口,交互的方式 ''' surface_reader = sr.vmtkSurfaceReader() surface_reader.InputFileName = input_file surface_reader.Execute() surface_clipper = sc.vmtkSurfaceClipper() surface_clipper.Surface = surface_reader.Surface surface_clipper.Execute() surface_writer = sw.vmtkSurfaceWriter() surface_writer.Surface = surface_clipper.Surface surface_writer.OutputFileName = output_file surface_writer.Execute()
def surface_capper(input_file, output_file): ''' 将网格变得端口封住 ''' reader = sr.vmtkSurfaceReader() reader.InputFileName = input_file reader.Execute() capper = sc.vmtkSurfaceCapper() capper.Surface = reader.Surface capper.Execute() writer = sw.vmtkSurfaceWriter() writer.OutputFileName = output_file writer.Surface = capper.Surface writer.Mode = 'ascii' writer.Execute()
def surface_smooth(): ''' 网格表面的平滑 ''' input_file = 'id2_model.vtp' output_file = 'id2_mode_sm_laplace.vtp' surfacereader = sr.vmtkSurfaceReader() surfacereader.InputFileName = input_file surfacereader.Execute() # 没有平滑的网格表面 originsurface_mapper = vtk.vtkPolyDataMapper() originsurface_mapper.SetInputData(surfacereader.Surface) originsurface_actor = vtk.vtkActor() originsurface_actor.SetMapper(originsurface_mapper) color = [0, 1, 0] originsurface_actor.GetProperty().SetColor(color) originsurface_actor.GetProperty().SetOpacity(0.8) surfacesmooth = ss.vmtkSurfaceSmoothing() surfacesmooth.Surface = surfacereader.Surface surfacesmooth.NumberOfIterations = 30 surfacesmooth.PassBand = 1.0 surfacesmooth.RelaxationFactor = 0.01 surfacesmooth.BoundarySmoothing = 1 surfacesmooth.NormalizeCoordinates = 1 surfacesmooth.Method = "laplace" # ["taubin","laplace"] surfacesmooth.Execute() renderer = rd.vmtkRenderer() renderer.Initialize() renderer.Renderer.AddActor(originsurface_actor) surface_viewer = sv.vmtkSurfaceViewer() surface_viewer.vmtkRenderer = renderer surface_viewer.Surface = surfacesmooth.Surface surface_viewer.Display = 1 surface_viewer.Color = [1.0, 0, 0] surface_viewer.ColorMap = "cooltowarm" surface_viewer.Execute() surface_writer = sw.vmtkSurfaceWriter() surface_writer.OutputFileName = output_file surface_writer.Surface = surfacesmooth.Surface surface_writer.Execute()
def surfacesubdivision(input_file, output_file): ''' 对网格表面进行细分 ''' surface_reader = sr.vmtkSurfaceReader() surface_reader.InputFileName = input_file surface_reader.Execute() surface_subdivision = ssdv.vmtkSurfaceSubdivision() surface_subdivision.NumberOfSubdivisions = 1 surface_subdivision.Surface = surface_reader.Surface surface_subdivision.Method = "butterfly" surface_subdivision.Execute() surface_writer = sw.vmtkSurfaceWriter() surface_writer.OutputFileName = output_file surface_writer.Surface = surface_subdivision.Surface surface_writer.Execute()
def make_write_centerline(centerline, filename): writer = surfacewriter.vmtkSurfaceWriter() writer.Surface = centerline try: datadir = os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'vmtk-test-data', 'centerlinereference') if not os.path.isdir(datadir): raise ValueError() except ValueError: datadir = os.path.join( os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname(os.path.realpath(__file__))))), 'vmtk-test-data', 'centerlinereference') if not os.path.isdir(datadir): raise ValueError( 'the vmtk-test-data repository cannot be found at the same level as vmtk. expected it to be at', datadir) writer.OutputFileName = os.path.join(datadir, filename) writer.Execute() return
def make_write_centerline(centerline, filename): writer = surfacewriter.vmtkSurfaceWriter() writer.Surface = centerline try: datadir = os.path.join( os.path.dirname( os.path.dirname( os.path.realpath(__file__))), 'vmtk-test-data', 'centerlinereference') if not os.path.isdir(datadir): raise ValueError() except ValueError: datadir = os.path.join( os.path.dirname( os.path.dirname( os.path.dirname( os.path.dirname( os.path.realpath(__file__))))), 'vmtk-test-data', 'centerlinereference') if not os.path.isdir(datadir): raise ValueError('the vmtk-test-data repository cannot be found at the same level as vmtk. expected it to be at', datadir) writer.OutputFileName = os.path.join(datadir, filename) writer.Execute() return