我已经收到了一个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元组的形状,但我使用的标题来自一个三元组的形状。我不太熟悉nibabel的内部结构或Nifti文件格式。我错过了什么吗,也就是说,我还需要复制什么吗?
发布于 2016-10-21 08:11:26
不,我什么都没错过。上面的方法很有效。
https://stackoverflow.com/questions/33737282
复制相似问题