2016-03-01 4 views
4

Я создаю контур в 2D через vtkContourFilter. (см. изображение, прикрепленное ниже). Теперь я хотел бы получить область, которая находится внутри контура, и сохранить ее как vtkImageData или что-то подобное, что приведет к отображению только с данными внутри контура. Все остальное было бы черным, просто чтобы иметь те же размеры, что и срез.Получение области внутри контура в VTK

enter image description here enter image description here

Я не знаю, как получить область внутри контура, есть в любом случае сделать это?

Это то, что я сделал до сих пор:

import vtk 

reader = vtk.vtkXMLImageDataReader() 
reader.SetFileName("sample.vti") 
reader.GetOutput().SetUpdateExtentToWholeExtent() 
reader.Update() 

flipYFilter = vtk.vtkImageFlip() 
flipYFilter.SetFilteredAxis(1) 
flipYFilter.SetInput(reader.GetOutput()) 
flipYFilter.Update() 

image = flipYFilter.GetOutput() 

extractSlice = vtk.vtkExtractVOI() 
extractSlice.SetInput(image) 
extractSlice.SetVOI(image.GetExtent()[0], image.GetExtent()[1], \ 
      image.GetExtent()[2], image.GetExtent()[3], \ 
      5, 5) 
extractSlice.SetSampleRate(1, 1, 1) 
extractSlice.Update() 

contour = vtk.vtkContourFilter() 
contour.SetInputConnection(extractSlice.GetOutputPort()) 
contour.SetValue(1,90) 

#How to get the region inside the contour? 

Спасибо заранее.

ответ

4

vtkContourFilter является - в вашем случае - строковым представлением, которое не допускает никакой фильтрации «внутри/снаружи». То, что вы хотите, это vtk.Threshold

threshold = vtk.Threshold() 
threshold.SetInputConnection(extractSlice.GetOutputPort()) 
threshold.ThresholdRange = [37.35310363769531, 276.8288269042969] 

выше код что-то из моей головы, а два скаляров являются минимальными и максимальными значениями, которые вы применяете порог. Посмотрите на Paraview, который вы можете использовать для сборки вашей визуализации и записи всего, используя Python tracer. Это оставляет вам код python, который затем можно использовать с обычными VTK и python, что отлично и точно, что вам нужно. Но таким образом процесс прототипирования происходит быстрее, чем только с python.

enter image description here