2015-11-16 2 views
0

Я получил несколько 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. Я пропустил что-нибудь, то есть мне нужно скопировать что-нибудь еще?

ответ

0

Нет, я ничего не пропустил. Вышеупомянутые работы.

+0

Я не уверен, что все это работает во всех случаях ... Я перехожу из трехмерных файлов nifti, и я не верю в правильное TR и (я думаю) масштабирование отключено от одной временной точки до следующий. –

+0

Для полноты nibabel имеет функцию 'nib.concat_images (fnames)', которая будет правильно объединять трехмерные тома в таймсерии. –

+0

Если в отдельных изображениях задано 'header ['pixdim'] [4]', это будет установлено равным TR в объединенном изображении. Итак, я объединил свои файлы, используя 'ni.concat_images()', и сравнил его с моими старыми файлами, и, как и предыдущий код, делает тот же результат в любом случае. Но, тем не менее, спасибо, что указали на эту функцию. –

Смежные вопросы