LiTS2017数据集的路径为C:\Users\Administrator\Desktop\LiTS2017。 保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的数据保存到对应的文件夹。 将LiTS2017数据集的3D图像变成2D、RGB三通道、的png格式的图像(调整窗宽窗位,以突出所需区域的细节)。数据集的3D标签变成(要求背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)2D的png格式标签。 LiTS2017数据集里面包含Training Batch 1和Training Batch 2两个文件夹。Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii。
时间: 2024-02-03 19:15:28 浏览: 158
道路 含贴图 3dmax格式,可以自行转为gltf obj fbx 格式,Threejs、cesium可用
5星 · 资源好评率100%
好的,我来帮你完成这个任务。
首先,我们需要先创建对应的文件夹。你可以在命令行中输入以下命令来完成这个步骤:
```
mkdir C:\Users\Administrator\Desktop\2D-LiTS2017
mkdir C:\Users\Administrator\Desktop\2D-LiTS2017\train
mkdir C:\Users\Administrator\Desktop\2D-LiTS2017\val
mkdir C:\Users\Administrator\Desktop\2D-LiTS2017\test
```
这样就可以创建好对应的文件夹了,其中train文件夹用于存放训练集,val文件夹用于存放验证集,test文件夹用于存放测试集。
接下来,我们需要将LiTS2017数据集的3D图像变成2D、RGB三通道、的png格式的图像,并且调整窗宽窗位,以突出所需区域的细节。同时,将数据集的3D标签变成(要求背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)2D的png格式标签。
你可以使用Python的SimpleITK库来读取.nii文件,使用Pillow库来保存.png文件。以下是一个示例代码:
```python
import os
import numpy as np
import SimpleITK as sitk
from PIL import Image
# 定义窗宽窗位
WW = 350
WL = 50
# 定义保存路径
save_path = 'C:/Users/Administrator/Desktop/2D-LiTS2017/'
# 定义字典,用于将原始标签值映射为新的标签值
label_map = {0: 0, 1: 1, 2: 2, 3: 2, 4: 2}
# 定义函数,用于将3D图像转换为2D、RGB三通道、的png格式的图像
def convert_image(volume, save_path, patient_id, mode):
for i in range(volume.shape[0]):
image = volume[i, :, :]
image = np.clip(image, WL - 0.5 - WW / 2, WL - 0.5 + WW / 2) # 调整窗宽窗位
image = (image - (WL - 0.5)) / WW * 255 # 归一化到[0, 255]
image = np.uint8(image)
image = Image.fromarray(image, mode='L') # 转换为灰度图像
image = image.convert(mode) # 转换为RGB图像
if i < 100:
filename = f'0{i}'
else:
filename = str(i)
if mode == 'RGB':
image.save(os.path.join(save_path, mode, patient_id + '_' + mode + '_' + filename + '.png'))
else:
image.save(os.path.join(save_path, mode, patient_id + '_' + mode + '_' + filename + '.png'))
# 读取Training Batch 1文件夹中的图像
patient_ids = os.listdir('C:/Users/Administrator/Desktop/LiTS2017/Training Batch 1')
for patient_id in patient_ids:
# 读取图像
image_path = os.path.join('C:/Users/Administrator/Desktop/LiTS2017/Training Batch 1', patient_id, patient_id + '_000.nii')
image = sitk.ReadImage(image_path)
volume = sitk.GetArrayFromImage(image)
# 转换图像
convert_image(volume, save_path, patient_id, 'RGB')
# 将图像划分为训练集、验证集、测试集
if int(patient_id) < 20:
convert_image(volume, os.path.join(save_path, 'train'), patient_id, 'L')
elif int(patient_id) < 25:
convert_image(volume, os.path.join(save_path, 'val'), patient_id, 'L')
else:
convert_image(volume, os.path.join(save_path, 'test'), patient_id, 'L')
# 读取Training Batch 2文件夹中的标签
patient_ids = os.listdir('C:/Users/Administrator/Desktop/LiTS2017/Training Batch 2')
for patient_id in patient_ids:
# 读取标签
label_path = os.path.join('C:/Users/Administrator/Desktop/LiTS2017/Training Batch 2', patient_id, patient_id + '_segmentation.nii')
label = sitk.ReadImage(label_path)
volume = sitk.GetArrayFromImage(label)
# 映射标签值
for k, v in label_map.items():
volume[volume == k] = v
# 转换标签
convert_image(volume, save_path, patient_id, 'L')
# 将标签划分为训练集、验证集、测试集
if int(patient_id) < 20:
convert_image(volume, os.path.join(save_path, 'train'), patient_id, 'L')
elif int(patient_id) < 25:
convert_image(volume, os.path.join(save_path, 'val'), patient_id, 'L')
else:
convert_image(volume, os.path.join(save_path, 'test'), patient_id, 'L')
```
运行以上代码后,会在指定的文件夹中生成训练集、验证集、测试集的图像和标签。其中图像为2D、RGB三通道、的png格式的图像,标签为2D的png格式标签,背景灰度值为0、肝脏灰度值为1、肝脏肿瘤灰度值为2。
阅读全文