3D肝脏分割数据集LiTS17下载及nii文件转PNG

        昨日网上找LiTS数据集找了半天,要么失效链接,要么将免费数据集收费出售(确实有点掉价)。费尽周折终于在谷歌网盘上将数据集下载了下来,为了方便学习我将此数据集打包上传到了百度云盘供大家下载。

链接:https://pan.baidu.com/s/10kS0B9gMLUmTlu-C7gZtjA 
提取码:phbp

       数据来源:

前30个nii文件:LiTS17 肝脏肿瘤分割数据集 - 数据集下载 - 超神经 (hyper.ai)

剩余nii文件:LITS17 - Google 云端硬盘 (需科学上网)

        另外,我将nii文件按照z轴切割出来了2D的PNG图片,以供使用。博主新手入门所以想要先拿二分类试试手,所以2D图片中肿瘤以及肝脏均视作了肝脏部分,如果想做肿瘤、肝脏以及其他部分的三分类问题,大家可以自行切分nii文件。另外值得一提的是,segmentation部分无肝脏以及肝脏在图中面积占比小于1.5%的切片并未保留,切割图像也在百度云盘分享的2D文件夹中,切分的python代码如下:

import os
import numpy as np
import nibabel as nib
import imageio
import cv2


def read_niifile(niifilepath):  # 读取niifile文件
    img = nib.load(niifilepath)  # 提取niifile文件
    img_fdata = img.get_fdata(dtype='float32')
    return img_fdata


def save_fig(niifilepath, savepath, num, name):  # 保存为图片
    name = name.split('-')[1]
    filepath_seg = niifilepath + "segmentation\\"  + "segmentation-" + name
    filepath_vol = niifilepath + "volume\\" + "volume-" +name
    savepath_seg = savepath + "segmentation\\"
    savepath_vol = savepath + "volume\\"

    if not os.path.exists(savepath_seg):
        os.makedirs(savepath_seg)
    if not os.path.exists(savepath_vol):
        os.makedirs(savepath_vol)

    fdata_vol = read_niifile(filepath_vol)
    fdata_seg = read_niifile(filepath_seg)
    (x, y, z) = fdata_seg.shape
    total = x * y

    for k in range(z):
        silce_seg = fdata_seg[:, :, k]  # 三个位置表示三个不同角度的切片
        if silce_seg.max() == 0:
            continue
        else:
            silce_seg = (silce_seg-silce_seg.min())/(silce_seg.max() - silce_seg.min())*255
            silce_seg  = cv2.threshold(silce_seg, 1, 255, cv2.THRESH_BINARY)[1]

            if  (np.sum(silce_seg == 255) / total) > 0.015:
                silce_vol = fdata_vol[:, :, k]
                silce_vol = (silce_vol - silce_vol.min()) / (silce_vol.max() - silce_vol.min()) * 255

                imageio.imwrite(os.path.join(savepath_seg, '{}.png'.format(num)), silce_seg)
                imageio.imwrite(os.path.join(savepath_vol, '{}.png'.format(num)), silce_vol)
                num += 1
        # 将切片信息保存为png格式
    return num


if __name__ == '__main__':

    path= 'E:\\dataset\\LiTS17\\'
    savepath = 'E:\\dataset\\LiTS17\\2d\\'
    filenames = os.listdir(path + "segmentation")
    num = 0
    for filename in filenames:
        num = save_fig(path, savepath, num, filename)

  • 27
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
好的,下面是Python代码实现,你可以在本地运行: ```python import os import numpy as np import nibabel as nib from PIL import Image # 设置路径 data_path = r'D:\BaiduNetdiskDownload\LiTS2017' save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017' # 创建保存结果的文件夹 if not os.path.exists(save_path): os.makedirs(save_path) if not os.path.exists(os.path.join(save_path, 'images')): os.makedirs(os.path.join(save_path, 'images')) if not os.path.exists(os.path.join(save_path, 'labels')): os.makedirs(os.path.join(save_path, 'labels')) # 定义函数将3D图像换成2D的三通道png格式图像 def save_2d_image(data, save_dir, prefix): for i in range(data.shape[0]): # 将每一层的二维数据换成三通道 img = np.stack([data[i]]*3, axis=2) img = (img * 255).astype(np.uint8) # 保存为png格式 Image.fromarray(img).save(os.path.join(save_dir, prefix + '_slice_{:03d}.png'.format(i))) # 定义函数将3D标签换成2D的png格式标签 def save_2d_label(data, save_dir, prefix): for i in range(data.shape[0]): # 将每一层的二维数据换成1通道 img = data[i].astype(np.uint8) # 保存为png格式 Image.fromarray(img).save(os.path.join(save_dir, prefix + '_slice_{:03d}.png'.format(i))) # 遍历Training Batch 1文件夹里面的图像 for file_name in os.listdir(os.path.join(data_path, 'Training Batch 1')): if file_name.endswith('.nii'): # 读取nii文件 img_path = os.path.join(data_path, 'Training Batch 1', file_name) img = nib.load(img_path).get_fdata() # 将3D图像换为2D的三通道png格式图像并保存 prefix = os.path.splitext(file_name)[0] save_2d_image(img, os.path.join(save_path, 'images'), prefix) # 遍历Training Batch 2文件夹里面的标签 for file_name in os.listdir(os.path.join(data_path, 'Training Batch 2')): if file_name.endswith('.nii'): # 读取nii文件 label_path = os.path.join(data_path, 'Training Batch 2', file_name) label = nib.load(label_path).get_fdata() # 将3D标签换为2D的png格式标签并保存 prefix = os.path.splitext(file_name)[0] save_2d_label(label, os.path.join(save_path, 'labels'), prefix) ``` 该代码将会遍历数据集文件夹中的所有.nii文件,将3D图像换成2D的三通道png格式图像并保存在`save_path/images`文件夹中,将3D标签换成2D的png格式标签并保存在`save_path/labels`文件夹中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩好学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值