Python将.nii格式文件转换为.png格式

Python将.nii格式文件转换为.png格式,第1张

单独转换

一次只转换一个.nii文件

import matplotlib
matplotlib.use('TkAgg')
import nibabel as nib

import os
import imageio

# ---------------------------------------------#
# nii_path : nii文件的路径
# img_save_path : 切片的保存路径
# axis : 说明是沿着哪个方向切片的
# ---------------------------------------------
def nii_to_png(nii_path, img_save_path, axis):
    # 若保存路径不存在,则创建
    if not os.path.exists(img_save_path):
        os.makedirs(img_save_path)

    nii = nib.load(nii_path)
    nii_fdata = nii.get_fdata()

    # 以切片的轴向作为保存png的子文件夹名
    foldername = axis
    png_save_path = os.path.join(img_save_path, foldername)
    if not os.path.exists(png_save_path):
        os.mkdir(png_save_path)

    flag = 100
    if axis == 'x':
        (axis, y, z) = nii.shape
        flag = 0
    elif axis == 'y':
        (x, axis, z) = nii.shape
        flag = 1
    elif axis == 'z':
        (x, y, axis) = nii.shape
        flag = 2
    else:
        print("wrong axis")

    for i in range(axis):
        if flag == 0:
            slice = nii_fdata[i, :, :]
        elif flag == 1:
            slice = nii_fdata[:, i, :]
        elif flag == 2:
            slice = nii_fdata[:, :, i]
        # 以数字1,2,3...为png图片命名
        imageio.imwrite(os.path.join(png_save_path, '{}.png'.format(i)), slice)

                    
批量转换
import matplotlib
matplotlib.use('TkAgg')
import nibabel as nib

import os
import imageio

def nii_to_png(nii_folder_path, img_save_path, axis):
    nii_files = os.listdir(nii_folder_path)
    
    for f in nii_files:
        nii_path = os.path.join(nii_folder_path, f)
        nii = nib.load(nii_path)
        nii_fdata = nii.get_fdata()

        # 以切片的轴向作为保存png的子文件夹名
        foldername = axis
        png_save_path = os.path.join(img_save_path, f, foldername)
        if not os.path.exists(png_save_path):
            os.mkdir(png_save_path)

        flag = 100
        if axis == 'x':
            (axis, y, z) = nii.shape
            flag = 0
        elif axis == 'y':
            (x, axis, z) = nii.shape
            flag = 1
        elif axis == 'z':
            (x, y, axis) = nii.shape
            flag = 2
        else:
            print("wrong axis")

        for i in range(axis):
            if flag == 0:
                slice = nii_fdata[i, :, :]
            elif flag == 1:
                slice = nii_fdata[:, i, :]
            elif flag == 2:
                slice = nii_fdata[:, :, i]
            # 以数字1,2,3...为png图片命名
            imageio.imwrite(os.path.join(png_save_path, '{}.png'.format(i)), slice)
            

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/570321.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-09
下一篇2022-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存