使用 nibabel 合并多个 MRI 图像时复制 header
Copy header when merging multiple MRI images using nibabel
我收到了单个 fMRI session 的多个 Nifti-Images,其中每个体积扫描都已保存到单个 3D-Nifti-file 中。这些被命名为 'foobar_001.nii',...,'foobar_187.nii'。我想合并这些并编写了以下 for-loop 来这样做。
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=header' 真的够了吗?我问是因为 imgs 具有 4 元组形状,但我使用的 header 来自 3 元组形状。我不太熟悉 nibabel 或 Nifti 文件格式的内部结构。我是否遗漏了什么,即我是否需要复制其他任何内容?
不,我没有错过任何东西。以上作品。
我收到了单个 fMRI session 的多个 Nifti-Images,其中每个体积扫描都已保存到单个 3D-Nifti-file 中。这些被命名为 'foobar_001.nii',...,'foobar_187.nii'。我想合并这些并编写了以下 for-loop 来这样做。
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=header' 真的够了吗?我问是因为 imgs 具有 4 元组形状,但我使用的 header 来自 3 元组形状。我不太熟悉 nibabel 或 Nifti 文件格式的内部结构。我是否遗漏了什么,即我是否需要复制其他任何内容?
不,我没有错过任何东西。以上作品。