批量nii文件转换为png图像

之前介绍过单个nii文件转换成png图像:

https://blog.csdn.net/weixin_43330946/article/details/89501865

这里介绍将多个nii文件(保存在一个文件夹下)转换成png图像。且图像单个文件夹的名称与nii名字相同。


import numpy as np
import os                #遍历文件夹
import nibabel as nib    #nii格式一般都会用到这个包
import imageio           #转换成图像

def nii_to_image(niifile):
    filenames = os.listdir(filepath)  #读取nii文件夹
    slice_trans = []

    for f in filenames:
        #开始读取nii文件
        img_path = os.path.join(filepath, f)
        img = nib.load(img_path)                #读取nii
        img_fdata = img.get_fdata()
        fname = f.replace('.nii','')            #去掉nii的后缀名
        img_f_path = os.path.join(imgfile, fname)
        #创建nii对应的图像的文件夹
        if not os.path.exists(img_f_path):
            os.mkdir(img_f_path)                #新建文件夹

        #开始转换为图像
        (x,y,z) = img.shape
        for i in range(z):                      #z是图像的序列
            silce = img_fdata[i, :, :]          #选择哪个方向的切片都可以
            imageio.imwrite(os.path.join(img_f_path,'{}.png'.format(i)), silce)
                                                #保存图像

if __name__ == '__main__':
    filepath = 'nii的文件夹'
    imgfile = 'image的文件夹'
    nii_to_image(filepath)

代码是我自己写的,用于处理ADNI的nii格式完全有效。

有问题欢迎指教,一起进步哟!

 

这几天总有人问问题,这里总结一下常见问题:

1.出现warning不要紧,数据集处理得没问题就行(个人观点);

2.(x,y,z) = img.shape会报错,

这是因为不同的 nii 的shape不同,比如有的是(256,256,155,1),有的是(256,256,155),这时候先查询nii文件的信息(查询代码:https://blog.csdn.net/weixin_43330946/article/details/91538695),然后修改成(x,y,z,_)、(x,y)就可以了。如果文件夹中nii的shape有多种可能,写一个 if 语句就可以啦。

你可能感兴趣的:(nii文件处理)