DICOM或NIIGZ(医学图像)转PNG

该代码段定义了读取nii和DICOM文件的函数,然后将数据旋转并保存为jpg图片。它遍历指定目录下的所有文件,对每个文件执行此操作。使用的关键库包括nibabel、numpy、imageio、SimpleITK和os。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import nibabel as nib
import numpy as np
import imageio
import os
import SimpleITK as sitk

#读取nii文件
def read_niifile(niifile):  # 读取niifile文件
    img = nib.load(niifile)  # 下载niifile文件(其实是提取文件)
    img_fdata = img.get_fdata()  # 获取niifile数据
    img90 = np.rot90(img_fdata) #旋转90度
    #return img_fdata
    return img90

#读取dicom文件
def readDICOM(file_path):
    ds_array = sitk.ReadImage(file_path)  # 读取dicom文件的相关信息
    img_array = sitk.GetArrayFromImage(ds_array)  # 获取array

    a = 1
    # img_array = np.rot90(img_array)

    return img_array

#保存jpg文件并输出
def save_fig(file):  # 保存为图片
    fdata = readDICOM(file)  # 调用上面的函数,获得数据

    (y, x, z) = fdata.shape  # 获得数据shape信息:(长,宽,维度-即切片数量)
    for k in range(y):
        # silce = fdata[:, :, k]
        #silce = fdata[:, :, k] original
        silce = fdata[k, :, :]  # 三个位置表示三个不同角度的切片

        silce = np.rot90(silce)
        silce = np.rot90(silce) #旋转(可选)
        silce = np.rot90(silce)

        imageio.imwrite(os.path.join(output, '{}.jpg'.format(os.path.splitext(os.path.splitext(i)[0])[0]+'_'+str(k))), silce)
        # 将切片信息保存为jpg格式
        #i表示获取到的nii文件名(不含路径)
        #os.path.splitext(i)[0]表示去除文件名后缀
        #用两次splitext是因为图像原格式为.nii.gz,需要去两次后缀,如果是.nii形式的文件只用去除一次后缀即可
        #str(k)代表每层切片单独命名,避免重名,以_0,_1,...的形式命名

#读取文件
def findAllFile(base):
    for root, ds, fs in os.walk(base):
        for f in fs:
            yield f

#设置文件路径

base =r'H:\spine\hospitalof9\Mid_term\code\dicom'
#base =r'F:\dataSet\COVID-19-CT-Seg_20cases' # nii文件的路径
#base =r'F:\dataSet\verse_new' # nii文件的路径
output = 'png/' # 保存png的路径
for i in findAllFile(base):
    dir = os.path.join(base,i)
    savepicdir = (os.path.join(output,i))
    #os.mkdir(savepicdir) #新建文件夹,重命名为nii文件名称,无需子文件夹,注释掉

    if not os.path.exists(output):
        os.mkdir(output)

    save_fig(dir)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值