如何更改使用的轴SimpleITK :: ImageSeriesWriter?

时间:2019-01-12 13:35:23

标签: python imaging medical simpleitk

SimpleITK :: ImageSeriesWriter默认沿Z轴对给定的3D体积进行切片,并在XY视图中写入2D图像的切片。

如何更改轴以使输出处于XZ或YZ视图?

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

我尝试了GitHub:FNNDSC/med2image的输出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轴的切片。 如何修改代码,以便可以获取另外2个视图的切片?

2 个答案:

答案 0 :(得分:1)

您应该能够使用PermuteAxesImageFilter交换体积轴。这是该过滤器的文档:

https://itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1PermuteAxesImageFilter.html

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

答案 1 :(得分:0)

好吧,我认为您已经解决了问题。但是我所做的只是导入.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