Я получил несколько Nifti-изображений одного сеанса fMRI, где каждое сканирование тома было сохранено в один файл 3D-Nifti. Они называются, например, foobar_001.nii, ..., foobar_187.nii. Я хочу объединить их и написал для этого цикл for-loop.Скопируйте заголовок при слиянии нескольких изображений MRI с помощью nibabel
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. Я пропустил что-нибудь, то есть мне нужно скопировать что-нибудь еще?
Я не уверен, что все это работает во всех случаях ... Я перехожу из трехмерных файлов nifti, и я не верю в правильное TR и (я думаю) масштабирование отключено от одной временной точки до следующий. –
Для полноты nibabel имеет функцию 'nib.concat_images (fnames)', которая будет правильно объединять трехмерные тома в таймсерии. –
Если в отдельных изображениях задано 'header ['pixdim'] [4]', это будет установлено равным TR в объединенном изображении. Итак, я объединил свои файлы, используя 'ni.concat_images()', и сравнил его с моими старыми файлами, и, как и предыдущий код, делает тот же результат в любом случае. Но, тем не менее, спасибо, что указали на эту функцию. –