Как прочитать несколько файлов 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()
это многовато, для меня это было удобно, когда я писал это, потому что не нужно было повторно загружать изображения внутри одного сеанса.