欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

批量更改nii文件的层数

程序员文章站 2022-04-01 09:54:50
...

问题描述:
有一批fMRI文件,需要批量更改时间点个数。
思路:
时间点即4D nii文件的时间维度,读取nii文件后更改第4个维度即可。
步骤:

import os
import numpy as np
import nibabel as nib
"""
作用:
读取子文件夹中的nii文件,改变时间点个数,输出nii文件到各个被试子文件夹,覆盖原文件。
说明:
总文件夹和子文件夹中不可包含其他文件,如.mat文件等
操作会覆盖原文件,注意备份。
文件夹结构为:
path - sub001 - 1.nii
     - sub002 - 2.nii
     ...
"""

#读取nii文件
path= (r'C:\Users\FunImg') #nii文件所在路径
fileList = os.listdir(path) #提取文件名为list格式变量

for i in fileList:
    path1 = (path + os.sep + i)
    fileList2 = os.listdir(path1)
    example_filename = os.path.join(path1, fileList2[0])
    
    img = nib.load(example_filename)
    
    img_data = img.get_fdata()
    
    #提取前240个时间点,删除后面的时间点
    #预处理时仍需remove first 10 points.
    img_data_1 = img_data[:,:,:,:240]
    
    
    #保存仿射矩阵和头文件
    affine = img.affine.copy()
    hdr = img.header.copy()
    
    #生成新的nii文件
    new_nii = nib.Nifti1Image(img_data_1, affine, hdr)
    
    #保存nii文件,后面的参数是保存的文件名
    nib.save(new_nii, path1 + os.sep + fileList2[0])