web-dev-qa-db-ja.com

pythonで* .mhd / *。raw形式を読み取る

Pythonで。mhd /。rawファイルを含むデータセットを読み取る方法を誰かに教えてもらえますか?

19
Avijit Dasgupta

最も簡単な方法は SimpleITK を使用することです(MedPyは.mhd/.rawファイルにもITKを使用します)。コマンド

pip install SimpleITK

多くのpythonバージョンで動作します。mhd/ .rawを読み取るには、このコードを使用できます 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
16
savfod

SimpleITKをインストールすると、skimageの使用がさらに簡単になる場合があります

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

これにより、z、y、xの並べ替えを使用した数の多い配列が得られます。

9
pietz

上記の投稿に加えて、 here からダウンロードしたCT-Scan .mhdファイルから始めて、次のコードで29個の画像を表示/保存できます(ヘッダーと生ファイルの両方があると仮定します)現在のディレクトリにダウンロード):

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()

enter image description here

これは、SimpleITKで読み込まれ、アニメーション化された同じCT-scan .mhdファイルです。 enter image description here

2
Sandipan Dey

MedPy またはこれを使用してみることができます mhd_utilsスクリプト

0
johngull