昨日网上找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)