如何将vtkimage转换为numpy数组
我尝试用Python和python-vtk处理MHD图像文件。这个文件放在谷歌云盘上:mhd。
我想把它转换成numpy数组,然后根据一个给定的值(比如500)来拆分这些数据。接着,我想计算一些汇总信息。我按照这个帖子里的说明去做,但对我来说不太管用。
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 个回答
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
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 数组,用来存放图像数据。