1

単一の fMRI セッションの複数の Nifti イメージを受け取りました。各ボリューム スキャンは単一の 3D-Nifti ファイルに保存されています。これらの名前は、たとえば、「foobar_001.nii」、...、「foobar_187.nii」です。それらをマージしたいので、そのために次の for ループを作成しました。

import numpy as np
import nibabel as ni

def merge_nii_files (sfile, ns):
    # This will load the first image for header information
    img = ni.load(sfile % (3, ns[0]))
    dshape = list(img.shape)
    dshape.append(len(ns))
    data = np.empty(dshape, dtype=img.get_data_dtype())

    header = img.header
    equal_header_test = True

    # Now load all the rest of the images
    for n, i in enumerate(ns):
        img = ni.load(sfile % (3,i))
        equal_header_test = equal_header_test and img.header == header
        data[...,n] = np.array(img.dataobj)

    imgs = ni.Nifti1Image(data, img.affine, header=header)
    if not equal_header_test:
        print("WARNING: Not all headers were equal!")
    return(imgs)

nii_files = "example_%0*d.nii"
images = merge_nii_files(nii_files, range(1,187))

ご覧のとおり、ヘッダー情報もコピーされていることを確認したいと思います。私の質問: この 'header=header' は本当に十分ですか? imgs は 4 タプルの形状なので質問していますが、使用しているヘッダーは 3 タプルの形状です。私は nibabel や Nifti ファイル形式の内部構造にあまり詳しくありません。他にコピーする必要があるものはありますか?

4

1 に答える 1