在 VTK 中获取轮廓内的区域

Getting region inside contour in VTK

我正在通过 vtkContourFilter 生成二维轮廓。 (见下图)现在我想获取轮廓内的区域并将其保存为 vtkImageData 或类似的东西,这样可以生成仅包含轮廓内数据的图像。其他一切都是黑色的,只是为了与切片具有相同的尺寸。

我不知道如何得到轮廓内的区域,有办法吗?

这是我目前所做的:

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?

提前致谢。

vtkContourFilter 是一种 - 在您的情况下 - 不允许任何 "inside/outside" 过滤的线条表示。你想要的是 vtk.Threshold

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

上面的代码是我头脑中的东西,两个标量是您应用阈值的最小值和最大值。查看 Paraview,您可以使用它来 assemble 您的可视化并使用 Python 追踪器 记录所有内容。这为您留下 python 代码,然后您可以将其与普通 VTK 和 python 一起使用,这非常好并且正是您所需要的。但是通过这种方式,原型制作过程比仅使用 python.

快得多

您应该可以通过使用 vtkPolyDataToImageStencil 后跟 vtkImageStencil 来完成此操作,就像在本例中一样 http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataContourToImageData

HTH,

米罗