Reading *.mhd/*.raw format in python

前端 未结 4 1211
太阳男子
太阳男子 2020-12-15 18:26

Can anyone please tell me the way I can read a dataset containing .mhd/.raw files in python?

相关标签:
4条回答
  • 2020-12-15 18:43

    Using skimage may be even easier after you installed SimpleITK

    import skimage.io as io
    img = io.imread('file.mhd', plugin='simpleitk')
    

    This will give you a numpy array with z,y,x sorting.

    0 讨论(0)
  • 2020-12-15 18:55

    You can try to use MedPy or this mhd_utils script

    0 讨论(0)
  • 2020-12-15 19:00

    Adding on the above posts, you can start with a CT-Scan .mhd file downloaded from the here and display / save 29 images with the following code (assuming that you have both the header and the raw files downloaded in the current directory):

    import SimpleITK as sitk
    import matplotlib.pylab as plt
    ct_scans = sitk.GetArrayFromImage(sitk.ReadImage("training_001_ct.mhd", sitk.sitkFloat32))
    plt.figure(figsize=(20,16))
    plt.gray()
    plt.subplots_adjust(0,0,1,1,0.01,0.01)
    for i in range(ct_scans.shape[0]):
        plt.subplot(5,6,i+1), plt.imshow(ct_scans[i]), plt.axis('off')
        # use plt.savefig(...) here if you want to save the images as .jpg, e.g.,
    plt.show()
    

    Here is the same CT-scan .mhd file that is read with SimpleITK and animated:

    0 讨论(0)
  • 2020-12-15 19:01

    The easiest way is to use SimpleITK (MedPy uses ITK for .mhd/.raw files too). Command

    pip install SimpleITK
    

    works for many python versions. For reading .mhd/.raw you can use this code from kaggle

    import SimpleITK as sitk
    import numpy as np
    '''
    This funciton reads a '.mhd' file using SimpleITK and return the image array, origin and spacing of the image.
    '''
    
    def load_itk(filename):
        # Reads the image using SimpleITK
        itkimage = sitk.ReadImage(filename)
    
        # Convert the image to a  numpy array first and then shuffle the dimensions to get axis in the order z,y,x
        ct_scan = sitk.GetArrayFromImage(itkimage)
    
        # Read the origin of the ct_scan, will be used to convert the coordinates from world to voxel and vice versa.
        origin = np.array(list(reversed(itkimage.GetOrigin())))
    
        # Read the spacing along each dimension
        spacing = np.array(list(reversed(itkimage.GetSpacing())))
    
        return ct_scan, origin, spacing
    
    0 讨论(0)
提交回复
热议问题