nnUnet肾脏肿瘤分割实战(KiTS19)

"0": "CT",

}
json_dict[‘labels’] = {
“0”: “background”,
“1”: “Kidney”,
“2”: “Tumor”
}
json_dict[‘numTraining’] = 210
json_dict[‘numTest’] = 90
json_dict[‘training’] = [{‘image’: “./imagesTr/%s.nii.gz” % i, “label”: “./labelsTr/%s.nii.gz” % i} for i in
cases[:210]]
json_dict[‘test’] = [“./imagesTs/%s.nii.gz” % i for i in
cases[210:]]

save_json(json_dict, os.path.join(out, “dataset.json”))



> 
> 这里只是对数据集进行一个拷贝和重命名,不对原始数据进行修改。
> 
> 
> 


运行代码后,整理好的数据集结构如下:



nnUNet_raw_data_base/nnUNet_raw_data/Task040_KiTS
├── dataset.json
├── imagesTr
│ ├── case_00000_0000.nii.gz
│ ├── case_00001_0000.nii.gz
│ ├── …

├── imagesTs
│ ├── case_00210_0000.nii.gz
│ ├── case_00211_0000.nii.gz
│ ├── …

├── labelsTr
│ ├── case_00000.nii.gz
│ ├── case_00001.nii.gz
│ ├── …



> 
> `dataset.json`文件保存了训练集图像、训练集标签、测试集图像等信息。
> 
> 
> 


预处理阶段会根据`dataset.json`读取图像,如果想要剔除某个病例,直接在`dataset.json`修改就好。



{
“description”: “kidney and kidney tumor segmentation”,
“labels”: {
“0”: “background”,
“1”: “Kidney”,
“2”: “Tumor”
},
“licence”: “”,
“modality”: {
“0”: “CT”
},
“name”: “KiTS”,
“numTest”: 90,
“numTraining”: 210,
“reference”: “KiTS data for nnunet”,
“release”: “0.0”,
“tensorImageSize”: “4D”,
“test”: [
“./imagesTs/case_00210.nii.gz”,
“./imagesTs/case_00211.nii.gz”,

],
“training”: [
{
“image”: “./imagesTr/case_00000.nii.gz”,
“label”: “./labelsTr/case_00000.nii.gz”
},
{
“image”: “./imagesTr/case_00001.nii.gz”,
“label”: “./labelsTr/case_00001.nii.gz”
},

]
}


提前准备三个文件夹,分别存放数据集、预处理数据和训练结果,配置好环境变量,具体细节可以参考我的[第一篇博文](https://bbs.csdn.net/topics/618545628)。




---


#### 2.数据预处理


nnUnet可以读取CT图像的模态信息、体素间距、灰度分布,自动进行重采样、裁剪以及归一化。


![在这里插入图片描述](https://img-blog.csdnimg.cn/b2cbea6c5bf24e12b2e9e14ba1ae3173.png#pic_center)



 nnUnet图像分割的自动方法配置(https://www.nature.com/articles/s41592-020-01008-z) 

##### 重采样


不同时期,不同仪器的CT扫描仪,采样得到的CT图像具有不同的空间分辨率,重采样的目的是将所有的病例采样到相同的空间分辨率(体素间距)。


nnUnet的数据预处理`preprocess`自带重采样,但我试过两次之后效果并不好,重采样之后的图像尺寸太大了,于是我按照冠军论文里的方法自己写了个重采样,将所有病例的体素间距重采样为 `3.22 x 1.62 x 1.62`.


另外,论文中有提到case15和case37标签的错误,本来打算去掉,不过后来我去[KiTS19的github官网](https://bbs.csdn.net/topics/618545628)看了一下,官方已经作了修正。



import numpy as np
import SimpleITK as sitk

def transform(image,newSpacing, resamplemethod=sitk.sitkNearestNeighbor):
# 设置一个Filter
resample = sitk.ResampleImageFilter()
# 初始的体素块尺寸
originSize = image.GetSize()
# 初始的体素间距
originSpacing = image.GetSpacing()
newSize = [
int(np.round(originSize[0] * originSpacing[0] / newSpacing[0])),
int(np.round(originSize[1] * originSpacing[1] / newSpacing[1])),
int(np.round(originSize[2] * originSpacing[2] / newSpacing[2]))
]
print(‘current size:’,newSize)

# 沿着x,y,z,的spacing(3)
# The sampling grid of the output space is specified with the spacing along each di
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值