如何在不加载 fMRI 大数据的情况下访问 .nii (NIFTI) 格式的单个时间样本?
How to access individual time sample of .nii (NIFTI) format without loading fMRI big data?
我可以访问 The Human Connectome Project 数据,其中我有超过 1000 个 .nii
文件。为了分析它们,我需要将它们加载为一个占用大量内存的 numpy 数组。例如,考虑以下代码:
import nibabel as nib
epi_image = nib.load('rfMRI_REST1_LR.nii')
epi_image.shape
out: (91, 109, 91, 1200)
epi_data = epi_image.get_data()
最后一行给出了一个 4d 张量,其中最后一个轴是时间。由于 epi_data
是一种 numpy 格式,我们可以通过将其转换为张量来使用它来训练神经网络,但为此我们需要加载 5Gb
的总数据,这只是其中之一1000。但是,如果我可以将这 1200 个时间样本分解为 1200 .nii
,我将能够加载感兴趣的样本。
有没有办法从原始文件中提取 1200.nii
从原文件中提取1200.nii的方法是分别提取每一帧:
for idx in range(1200):
epi_data = epi_image.get_data()[:,:,:,idx]
nimg = nib.Nifti1Image(epi_data, affine=epi_image.affine, header=epi_image.header)
nimg.to_filename("file%idx.nii"%+int(idx))
我可以访问 The Human Connectome Project 数据,其中我有超过 1000 个 .nii
文件。为了分析它们,我需要将它们加载为一个占用大量内存的 numpy 数组。例如,考虑以下代码:
import nibabel as nib
epi_image = nib.load('rfMRI_REST1_LR.nii')
epi_image.shape
out: (91, 109, 91, 1200)
epi_data = epi_image.get_data()
最后一行给出了一个 4d 张量,其中最后一个轴是时间。由于 epi_data
是一种 numpy 格式,我们可以通过将其转换为张量来使用它来训练神经网络,但为此我们需要加载 5Gb
的总数据,这只是其中之一1000。但是,如果我可以将这 1200 个时间样本分解为 1200 .nii
,我将能够加载感兴趣的样本。
有没有办法从原始文件中提取 1200.nii
从原文件中提取1200.nii的方法是分别提取每一帧:
for idx in range(1200):
epi_data = epi_image.get_data()[:,:,:,idx]
nimg = nib.Nifti1Image(epi_data, affine=epi_image.affine, header=epi_image.header)
nimg.to_filename("file%idx.nii"%+int(idx))