使用vtkPolyDataConnectivityFilter分隔网格

时间:2017-01-25 17:50:04

标签: python vtk

我很难使用vtk,尤其是vtkPolyDataConnectivityFilter。我输入了Marching Cubes算法的输出,该算法从3d点云创建了一个表面。 但是,当我尝试设置

filt = vtk.vtkConnectivityFilter()

filt.SetInputData(surface_data) # get the data from the MC alg.
filt.SetExtractionModeToLargestRegion()
filt.ColorRegionsOn()
filt.Update()

filt.GetNumberOfExtractedRegions() # will 53 instead of 1
它给了我奇怪的结果。我不能使用特定区域的提取模式或种子单点,因为我事先不知道它们。 我需要将最大网格点与较小网格点分开,并仅保留大网格。 当我渲染整个输出时,它会向我显示正确的提取区域。但是,不同的区域仍然包含在数据集中,并且无法将其分开。

我做错了什么?

Best J

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我必须将转换为vtkpolydata的STL文件分段。

如果查看示例https://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/PolyDataConnectivityFilter_SpecifiedRegion,您会发现它们使用成员函数SetExtractionModeToSpecifiedRegions()。

使用以下代码替换您的代码:

filt.SetInputData(surface_data)

filt.SetExtractionModeToSpecifiedRegions()

filt.AddSpecifiedRegion(0)#Manually从0增加到filt.GetNumberOfExtractedRegions()

filt.Update()

您需要渲染并查看指定的区域,以找出您真正感兴趣的分段区域的索引。