如何用Python加载指定文件夹中的多个nii.gz格式fMRI图像?
问题解决思路
核心问题:文件路径不完整
os.listdir(folder_dir)仅返回文件夹内的文件名,而非完整路径。执行nib.load(filename)时,Python会在当前工作目录查找文件,而非你指定的folder_dir,因此触发找不到文件的错误。
修复步骤:
拼接完整文件路径
用os.path.join(folder_dir, filename)将文件夹路径与文件名拼接,确保nibabel能准确定位文件。过滤目标文件
文件夹中可能存在无关文件,添加判断仅处理.nii.gz格式的fMRI图像。定义图像保存对象
代码中final_im未赋值,预处理后需将数据转换为Nibabel图像对象(需保留原图像的空间变换信息affine),才能执行保存操作。指定保存路径(可选)
建议拼接完整保存路径,可将处理后的文件存入原文件夹子目录,避免混乱。
修复后代码示例:
import os import nibabel as nib subj = 1 folder_dir = r'C:\Users\myfolder' # 创建处理后文件的保存目录(不存在则自动创建) output_dir = os.path.join(folder_dir, 'processed') os.makedirs(output_dir, exist_ok=True) for filename in os.listdir(folder_dir): # 仅处理nii.gz格式文件 if filename.endswith('.nii.gz'): # 拼接完整文件路径 file_path = os.path.join(folder_dir, filename) img = nib.load(file_path) data = img.get_fdata() ## 写入你的预处理代码 ## # 示例:data = custom_preprocess(data) # 将处理后的数据转换为Nifti图像对象,保留原图像的空间信息和头文件 final_im = nib.Nifti1Image(data, img.affine, img.header) # 拼接保存路径并保存 save_name = f"{subj}.nii" save_path = os.path.join(output_dir, save_name) final_im.save(save_path) subj += 1
额外提示:
- 可用
print(os.getcwd())查看当前工作目录,确认为何直接用文件名无法找到文件。 - 若想压缩保存文件,可将
save_name改为f"{subj}.nii.gz",nibabel会自动处理压缩逻辑。
内容的提问来源于stack exchange,提问作者Ana Gabriela
相关产品推荐
相关产品推荐

