Как прочитать несколько файлов Nifti из одной папки с помощью Nibabel?

Я видел пару туториалов, связанных с Nibabel, которые отлично работают, когда вы читаете только один образ nii, но мне нужно прочитать 167 файлов из одной папки, и я не понимаю, как это сделать. Я пытался использовать glob, поскольку мы используем его для OpenCV, но он не работает так же с Nibabel.

      data = glob.glob('path to my data' + '*.nii.gz')
print(len(data))
print(data)
data = np.asarray(data)
print(data)

1 ответ

Как упоминается в одном из комментариев выше, описание, которое вы описываете, содержит только имена файлов изображений, а не их пиксели.

Если у вас есть список имен файлов (или несколько контейнеров, где каждая строка имени файла является элементом)dataвы можете сделать это:

      import numpy as np;
import nibabel as nb;

if "imdata" not in locals():    

    for i in range ( len ( data ) ):

        imname = data [ i ];

        if "imdata" not in locals():
            imdata = nb.load ( imname ).get_fdata().flatten();
            imlen  = len ( imdata );
            imdata = imdata.reshape ( 1, imlen );
        else:
            imdata = np.append ( imdata, nb.load ( imname ).get_fdata().flatten().reshape ( 1, imlen ), axis=0 );

Это будет работать, если изображения имеют одинаковый размер — вы получите матрицу#imagesИкс#pixelsperimage. Вы также можете сделать это в 3D или 4D, конечно, в зависимости от того, что вам нужно сделать с данными изображения.

Использованиеlocals()это многовато, для меня это было удобно, когда я писал это, потому что не нужно было повторно загружать изображения внутри одного сеанса.

Другие вопросы по тегам