如何将vtkimage转换为numpy数组

7

我尝试用Python和Python-VTK处理MHD图像文件。该文件位于Google Drive中:MHD

我想将其转换为numpy数组,然后根据给定值(例如“500”)将它们分割。然后计算摘要信息。我按照这篇文章的说明操作:
如何将3D vtkDataSet转换为numpy数组?
但是对于我的情况不起作用。

import vtk
imageReader = vtk.vtkMetaImageReader()
imageReader.SetFileName(testfile1)
imageReader.Update() 
# from vtk.util.numpy_support import numpy_to_vtk, vtk_to_numpy does not work for the data type issue

image = imageReader.GetOutput()
# List the dimensions of the image, for example
print image.GetDimensions()
pixelspace = imageReader.GetPixelSpacing()

这里出现了一个错误:

AttributeError: GetPixelSpacing

我该如何实现转换?
当我完成数据分割后,我该如何将它们保存回mhd文件(或者原始数据更好?)

2个回答

7

这个帖子中适应,您可以执行以下操作:

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

imr = vtk.vtkMetaImageReader()
imr.SetFileName('t10-Subvolume-resample_scale-1.mhd')
imr.Update()

im = imr.GetOutput()
rows, cols, _ = im.GetDimensions()
sc = im.GetPointData().GetScalars()
a = vtk_to_numpy(sc)
a = a.reshape(rows, cols, -1)

assert a.shape==im.GetDimensions()

其中a将是包含图像数据的NumPy数组。


@WarrenWeckesser 谢谢您指出这一点... 对于 mhd 文件,它对我也起作用了... - Saullo G. P. Castro

2
为了将通道正确地用作OpenCV图像的后续使用:
import vtk
import numpy as np
from vtk.util import numpy_support

def vtkImgToNumpyArray(vtkImageData):
    rows, cols, _ = vtkImageData.GetDimensions()
    scalars = vtkImageData.GetPointData().GetScalars()
    resultingNumpyArray = numpy_support.vtk_to_numpy(scalars)
    resultingNumpyArray = resultingNumpyArray.reshape(cols, rows, -1)
    red, green, blue, alpha = np.dsplit(resultingNumpyArray, resultingNumpyArray.shape[-1])
    resultingNumpyArray = np.stack([blue, green, red, alpha], 2).squeeze()
    resultingNumpyArray = np.flip(resultingNumpyArray, 0)
    return resultingNumpyArray

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