【问题标题】:Reading a .VTK polydata file and converting it into Numpy array读取 .VTK 多数据文件并将其转换为 Numpy 数组
【发布时间】:2016-11-25 02:03:54
【问题描述】:

我想将 .VTK ASCII 多数据文件转换为仅包含点坐标的 numpy 数组。我首先尝试了这个:https://stackoverflow.com/a/11894302,但它存储了一个 (3,3) numpy 数组,其中每个条目实际上是使该特定单元格(在本例中为三角形)的三个点的坐标。但是,我不想要单元格,我想要每个点的坐标(不重复)。接下来我尝试了这个:https://stackoverflow.com/a/23359921/6619666 进行了一些修改。这是我的最终代码。这些值不是 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

请提出建议。

【问题讨论】:

    标签: python arrays numpy vtk


    【解决方案1】:

    你可以从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 blog

    可以访问 PointData、CellData、FieldData、Points (仅 vtkPointSet 的子类)、Polygons(仅 vtkPolyData) this 方式。

    【讨论】:

      【解决方案2】:

      您可以像这样从 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'
      • 在获取阅读器的输出之前尝试使用'reader.update()'。
      猜你喜欢
      • 2012-09-19
      • 1970-01-01
      • 2016-03-11
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多