我就废话不多说了,大家还是直接看代码吧~

    1. ## using simpleITK to load and save data.
    2. import SimpleITK as sitk
    3. itk_img = sitk.ReadImage('./nifti.nii.gz')
    4. img = sitk.GetArrayFromImage(itk_img)
    5. print("img shape:",img.shape)
    6. ## save
    7. out = sitk.GetImageFromArray(img)
    8. # # out.SetSpacing(itk_img.GetSpacing())
    9. # # out.SetOrigin(itk_img.GetOrigin())
    10. sitk.WriteImage(out,'simpleitk_save.nii.gz')

    读取DICOM序列

    1. import sys
    2. import SimpleITK as sitk
    3. import numpy as np
    4. dcm_directory = "./flair_dicom"
    5. series_ids = sitk.ImageSeriesReader.GetGDCMSeriesIDs(dcm_directory)
    6. print("series ids:",series_ids)
    7. if not series_ids:
    8. print("ERROR: given directory dose not a DICOM series.")
    9. sys.exit(1)
    10. series_file_names = sitk.ImageSeriesReader.GetGDCMSeriesFileNames(dcm_directory,series_ids[0])
    11. series_reader = sitk.ImageSeriesReader()
    12. series_reader.SetFileNames(series_file_names)
    13. image3D = series_reader.Execute()
    14. size = image3D.GetSize()
    15. print( "Image size:", size[0], size[1], size[2] )
    16. image_array = sitk.GetArrayFromImage(image3D)
    17. # SimpleITK读取的图像数据的坐标顺序为zyx,即从多少张切片到单张切片的宽和高;
    18. # 而据SimpleITK Image获取的origin和spacing的坐标顺序则是xyz
    19. origin = image3D.GetOrigin()
    20. spacing = image3D.GetSpacing()
    21. print("origin:",origin," spacing:",spacing)

    读取DICOM单个文件

    1. import SimpleITK as sitk
    2. import numpy as np
    3. image = sitk.ReadImage(slice_path)
    4. image_array = sitk.GetArrayFromImage(image) # z, y, x

    补充知识:itk 读取图像,两种格式之间转换
    我就废话不多说了,大家还是直接看代码吧~

    1. /*******************************************************
    2. 控制台运行程序
    3. 输入:
    4. 程序名称
    5. 读取图像文件名
    6. 保存图像文件名
    7. 输出:
    8. 保存另一种类型的图像
    9. 功能:
    10. 图像在jpeg和bmp两种格式之间互换
    11. ********************************************************/
    12. #include "itkImageFileReader.h"
    13. #include "itkImageFileWriter.h"
    14. #include "itkImageIOFactory.h"
    15. #include "itkBMPImageIOFactory.h"
    16. #include "itkJPEGImageIOFactory.h"
    17. #include <iostream
    18. int main(int argc , char *argv[])
    19. {
    20. if (argc < 3)
    21. {
    22. std::cerr << "Usage: " << std::endl;
    23. std::cerr << argv[0] << " inputImageFile outputImageFile " << std::endl;
    24. return EXIT_FAILURE;
    25. }
    26. itk::BMPImageIOFactory::RegisterOneFactory();
    27. itk::JPEGImageIOFactory::RegisterOneFactory();
    28. typedef itk::Image< unsigned char, 2 ImageType;
    29. typedef itk::ImageFileReader< ImageType ReaderType;
    30. typedef itk::ImageFileWriter< ImageType WriterType;
    31. ReaderType::Pointer reader = ReaderType::New();
    32. WriterType::Pointer writer = WriterType::New();
    33. const char * inputFilename = argv[1];
    34. const char * outputFilename = argv[2];
    35. reader- SetFileName( inputFilename );
    36. writer- SetFileName( outputFilename );
    37. writer- SetInput( reader- GetOutput() );
    38. try
    39. {
    40. writer- Update();
    41. }
    42. catch( itk::ExceptionObject & err )
    43. {
    44. std::cerr << "ExceptionObject caught !" << std::endl;
    45. std::cerr << err << std::endl;
    46. return EXIT_FAILURE;
    47. }
    48. system("pause");
    49. return 0;
    50. }

    以上这篇使用SimpleITK读取和保存NIfTI/DICOM文件实例就是小编分享给大家的全部内容了,希望能给大家一个参考。