读取.VTK多边形数据文件并将其转换为Numpy数组

8
我想将一个.VTK ASCII多边形数据文件转换成仅包含点坐标的numpy数组。我首先尝试了这个:https://dev59.com/amgt5IYBdhLWcg3w5xg_#11894302,但它存储了一个(3,3)的numpy数组,其中每个条目实际上是组成该特定单元格(在这种情况下是三角形)的三个点的坐标。然而,我不想要单元格,我想要每个点的坐标(不重复)。接下来,我尝试了这个:https://dev59.com/lmAg5IYBdhLWcg3w0Nze#23359921并进行了一些修改。这是我的最终代码。值被存储为元组而不是numpy数组,但我不确定该元组是否代表每个点。
import sys

import numpy
import vtk
from vtk.util.numpy_support import vtk_to_numpy

reader = vtk.vtkPolyDataReader()
reader.SetFileName('Filename.vtk')
reader.ReadAllScalarsOn()
reader.ReadAllVectorsOn()
reader.Update()
nodes_vtk_array= reader.GetOutput().GetPoints().GetData()
print nodes_vtk_array

请提出建议。
2个回答

8
您可以使用来自vtk.numpy_interface的dataset_adapter:
from vtk.numpy_interface import dataset_adapter as dsa

polydata = reader.GetOutput()
numpy_array_of_points = dsa.WrapDataObject(polydata).Points

来自 Kitware 博客

可以通过这种方式访问 PointData、CellData、FieldData 和 Points(仅限 vtkPointSet 的子类)、Polygons(仅限 vtkPolyData)。


6
您可以从 PolyData 对象中获取点坐标的方法如下:
polydata = reader.GetOutput()
points = polydata.GetPoints()
array = points.GetData()
numpy_nodes = vtk_to_numpy(array)

使用 vtk-8.1.0type(polydata) == <class 'vtkCommonDataModelPython.vtkPolyData'>,会导致以下异常:AttributeError: 'NoneType' object has no attribute 'GetData' - alkamid
在获取读取器的输出之前,尝试使用“reader.update()”。 - Deformyer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接