NIfTIファイルの読み込みと保存 with Python

fMRI Data Analysis




NIfTIファイルの読み込みと保存 with Python

pythonを使って、医用画像で使われるNIfTIファイルの出力を行います。

Nipyというライブラリを使用します。

NipyとNIfTIファイル

NIfTIファイルは、NipyのImage型で保持されます。
Imageは、dataとcoordmapに分類できます。
また、coordmapはdomainとrange, affineで構成されています。

NIfTIファイルの読み込み

from nipy import load_image

img = load_image("読み込みたい.nii")

#==== データを取得したい ====
data = img.get_data()

#==== 座標情報(coordmap)を取得したい ====
coord = img.coordmap

NIfTIファイルの保存

読み込んだNIfTIと同じcoordmapの場合

from nipy import load_image, save_image
from nipy.core.api import Image

#==== ファイルの読み込み ==== 
img = load_image("読み込みたい.nii")

#==== Image型 (読み込んだNIfTIのcoordmapを利用)====
new_img = Image(data, img.coordmap)

#==== 保存 ====
save_image(new_img, "保存名.nii")

coordmapを書き換える or 作成する

from nipy import load_image, save_image
from nipy.core.api import Image
from nipy.core.reference.coordinate_map import AffineTransform, CoordinateSystem

#==== domainの設定 ====
function_domain = CoordinateSystem(coord_names=('ijkt'))
#==== rangeの設定 ====
function_range = CoordinateSystem(coord_names=('xyzt'))
#==== affineの設定 ====
affine = np.array([[  -1.,    0.,    0.,    0.,  127.],
                   [   0.,    1.,    0.,    0., -167.],
                   [   0.,    0.,    3.,    0.,  -72.],
                   [   0.,    0.,    0.,    0.,    0.],
                   [   0.,    0.,    0.,    0.,    1.]])

#==== coordmapの作成 ====
coordmap = AffineTransform(function_domain, function_range, affine)

#==== Image型 (読み込んだNIfTIのcoordmapを利用)====
new_img = Image(data, img.coordmap)

#==== 保存 ====
save_image(new_img, "保存名.nii")

参考

  1. https://sites.google.com/site/akamatitechlab/research/tips/nipy
  2. Nipy : core.image.image
  3. Nipy : core.reference.coordinate_map
  4. AffineTransform does not work for 2D image embedded in 3D space #450
タイトルとURLをコピーしました