Python 如何使用更改轴SimpleTk::ImageSeriesWriter?

Python 如何使用更改轴SimpleTk::ImageSeriesWriter?,python,imaging,medical,simpleitk,Python,Imaging,Medical,Simpleitk,SimpleTk::ImageSeriesWriter默认沿Z轴切片给定的三维体积,并在XY视图中写入二维图像的切片 如何更改轴以使输出在XZ或YZ视图中 换句话说,如果默认的Z轴切片在轴向视图中,如何获得冠状视图和矢状视图的切片 我尝试了的输出xyz函数。 但是图像数组是盲目写入的,所以有时X和Y会被转置,或者其中一个轴会反转。 因此,我觉得有必要编写自己的代码来完全控制 def slice(dcm_folder, output_stem): print('Reading Dicom

SimpleTk::ImageSeriesWriter默认沿Z轴切片给定的三维体积,并在XY视图中写入二维图像的切片

如何更改轴以使输出在XZ或YZ视图中

换句话说,如果默认的Z轴切片在轴向视图中,如何获得冠状视图和矢状视图的切片

我尝试了的输出xyz函数。 但是图像数组是盲目写入的,所以有时X和Y会被转置,或者其中一个轴会反转。 因此,我觉得有必要编写自己的代码来完全控制

def slice(dcm_folder, output_stem):
    print('Reading Dicom directory:', path.abspath(dcm_folder))
    reader = sitk.ImageSeriesReader()

    dicom_names = reader.GetGDCMSeriesFileNames(dcm_folder)
    reader.SetFileNames(dicom_names)

    image = reader.Execute()

    # cast the bit depth to PNG compatible "unsigned char"
    image = sitk.Cast(sitk.RescaleIntensity(image), sitk.sitkUInt8)

    size = image.GetSize()
    print( "Image size:", size[0], size[1], size[2] )

    # need Z filenames to write
    series_filenames = list([output_stem + '-slice' + str(i).zfill(3) + '.png' for i in range(size[2])])

    print('Writing {} image slices'.format(size[2]))
    writer = sitk.ImageSeriesWriter()
    writer.SetFileNames( series_filenames )
    writer.Execute(image)
上面的代码将成功地写出Z轴的切片。
如何修改代码,以便获得另外两个视图的切片?

您应该能够使用PermuteAxesImageFilter交换卷的轴。以下是该过滤器的文档:


或者,如果您像我一样喜欢过程接口,您可以使用PermuteAxes函数。

好吧,我想您已经解决了这个问题。但我所做的只是导入一个.mha文件或简单ITK支持的另一个扩展名,并将其转换为3D数组。然后你需要做的就是一次在不同的轴上切片这个数组。看看python代码:

import SimpleITK as sitk #importing package
path = '/current/folder/mha/file'
ct = sitk.ReadImage(path) #var_type is SimpleITK.Image
ndarray = sitk.GetArrayFromImage(ct) #converting from SimpleITK.Image to numpy ndarray
# Axial view:
plt.imshow(ndarray[100,:,:], cmap='gray') # plotting 100º image from axial view
#Coronal view:
plt.imshow(ndarray[:,100,:], cmap='gray') # plotting 100º image from coronal view
#Sagittal view:
plt.imshow(ndarray[:,:,100], cmap='gray') # plotting 100º image from sagittal view

如果您能提供一个小的代码片段来解释PermuteAX是如何工作的,那就更好了。谢谢!