LiTS2017数据集的路径为C:\Users\Administrator\Desktop\LiTS2017,将数据集的3D图像和3D标签都转换成2D的图像和标签,并且都变成png格式。其中标签灰度图设置成背景灰度值0,肝脏灰度值1,肝脏肿瘤灰度值2,LiTS2017数据集里面包含Training Batch 1和Training Batch 2两个文件夹,Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii,保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的保存到对应的文件夹
时间: 2023-11-27 15:50:03 浏览: 67
LITS2017肝脏肿瘤分割挑战数据集
5星 · 资源好评率100%
好的,可以使用Python代码来完成这个任务。首先,需要引入一些必要的库:`os`用于文件操作,`numpy`和`nibabel`用于读取3D图像和标签数据,`PIL`用于保存2D图片。
以下是完整的Python代码:
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
# 定义数据集路径
data_path = r'C:\Users\Administrator\Desktop\LiTS2017'
# 定义保存路径
save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 定义标签灰度值映射
label_mapping = {0: 0, 1: 1, 2: 2}
# 遍历所有图像和标签
for root, dirs, files in os.walk(data_path):
for file in files:
if file.endswith('.nii'):
# 读取图像或标签数据
img_path = os.path.join(root, file)
img_data = nib.load(img_path).get_fdata()
# 将3D数据转换为2D图片
for i in range(img_data.shape[2]):
img_slice = img_data[:, :, i]
img_slice = np.rot90(img_slice)
img_slice = np.flipud(img_slice)
img_slice = (img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice)) * 255
img_slice = img_slice.astype(np.uint8)
img_slice = Image.fromarray(img_slice)
# 处理标签数据
if 'label' in img_path.lower():
for k, v in label_mapping.items():
img_slice = np.array(img_slice)
img_slice[img_slice == k] = v
img_slice = Image.fromarray(img_slice)
# 保存2D图片
save_dir = os.path.join(save_path, os.path.basename(root))
if not os.path.exists(save_dir):
os.makedirs(save_dir)
save_path_2d = os.path.join(save_dir, f'{file[:-4]}_{i:03d}.png')
img_slice.save(save_path_2d)
```
这段代码会遍历数据集路径下的所有文件和文件夹,找出所有以`.nii`为拓展名的文件,读取其中的3D图像或标签数据,并将其转换为一系列2D图片。对于标签数据,还会进行灰度值映射,将背景、肝脏和肝脏肿瘤分别映射为0、1和2。最后,程序将所有生成的2D图片保存到对应的文件夹中。
阅读全文