Exemple #1
0
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()
Exemple #3
0
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()
Exemple #4
0
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()
Exemple #5
0
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()
Exemple #6
0
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()
Exemple #8
0
 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
Exemple #9
0
 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