在 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,
米罗
我正在通过 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,
米罗