我正在阅读SimpleITK的图像,但是我在vtk中得到了这些结果吗? 我不确定这里出了什么问题。
请参阅图片here。
####
CODE
def sitk2vtk(img):
size = list(img.GetSize())
origin = list(img.GetOrigin())
spacing = list(img.GetSpacing())
sitktype = img.GetPixelID()
vtktype = pixelmap[sitktype]
ncomp = img.GetNumberOfComponentsPerPixel()
# there doesn't seem to be a way to specify the image orientation in VTK
# convert the SimpleITK image to a numpy array
i2 = sitk.GetArrayFromImage(img)
#import pylab
#i2 = reshape(i2, size)
i2_string = i2.tostring()
# send the numpy array to VTK with a vtkImageImport object
dataImporter = vtk.vtkImageImport()
dataImporter.CopyImportVoidPointer( i2_string, len(i2_string) )
dataImporter.SetDataScalarType(vtktype)
dataImporter.SetNumberOfScalarComponents(ncomp)
# VTK expects 3-dimensional parameters
if len(size) == 2:
size.append(1)
if len(origin) == 2:
origin.append(0.0)
if len(spacing) == 2:
spacing.append(spacing[0])
# Set the new VTK image's parameters
#
dataImporter.SetDataExtent (0, size[0]-1, 0, size[1]-1, 0, size[2]-1)
dataImporter.SetWholeExtent(0, size[0]-1, 0, size[1]-1, 0, size[2]-1)
dataImporter.SetDataOrigin(origin)
dataImporter.SetDataSpacing(spacing)
dataImporter.Update()
vtk_image = dataImporter.GetOutput()
return vtk_image
###
END CODE
答案 0 :(得分:1)
你忽略了两件事:
索引和尺寸的顺序在转换过程中需要特别注意。来自http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/01_Image_Basics.html的SimpleITK笔记本:
ITK的Image类没有括号运算符。它有一个GetPixel,它将一个ITK Index对象作为参数,这是一个按(x,y,z)排序的数组。这是SimpleITK的Image类也用于GetPixel方法的约定。 在numpy中,数组以相反的顺序(z,y,x)索引。