Can anyone please tell me the way I can read a dataset containing .mhd/.raw files in python?
MHD filename suffix is mostly used for Fallout 3 files. Bethesda Softworks LLC defined the Fallout 3 format standard. MHD file format is compatible with software that can be installed on Windows system platform. MHD file belongs to the Game Files category just like 1509 other filename extensions listed in our database.
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
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.
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With