【问题标题】:Getting region inside contour in VTK在VTK中获取轮廓内的区域
【发布时间】:2016-03-01 15:25:06
【问题描述】:

我正在通过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?

提前致谢。

【问题讨论】:

    标签: python vtk contour


    【解决方案1】:

    vtkContourFilter 是-在您的情况下-不允许任何“内部/外部”过滤的行表示。你想要的是vtk.Threshold

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

    上面的代码有点出乎我的意料,两个标量是您应用阈值的最小值和最大值。查看Paraview,您可以使用它来组装您的可视化并使用Python 跟踪器 记录所有内容。这为您留下了 python 代码,然后您可以将其与普通的 VTK 和 python 一起使用,这非常好,正是您所需要的。但是这样一来,原型制作过程比仅使用 python 更快。

    【讨论】:

      【解决方案2】:

      您应该能够通过使用vtkPolyDataToImageStencil 后跟vtkImageStencil 来做到这一点,就像在这个例子中一样 http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataContourToImageData

      HTH,

      米罗

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-02
        • 2018-10-10
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        相关资源
        最近更新 更多