单独转换

一次只转换一个.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)
            
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐