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 11:15:34 浏览: 58
医学图像分割数据:肝肿瘤分割基(LiTS)切片分割【包含切片后的数据集(3类别)、标签文件、可视化代码】
好的,以下是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)
# 定义窗宽窗位
WW = 350
WL = 50
# 定义标签灰度值对应关系
label_dict = {0: 0, 1: 1, 2: 2}
# 遍历Training Batch 1文件夹里面的图像
for subdir, _, files in os.walk(os.path.join(data_path, 'Training Batch 1')):
for file in files:
if file.endswith('.nii'):
# 读取nii格式图像
img_nii = nib.load(os.path.join(subdir, file))
img = img_nii.get_fdata()
# 转换成2D RGB图像
for i in range(img.shape[2]):
# 取出每张2D图像
img_2d = img[:, :, i]
# 窗宽窗位调整
img_2d = np.clip((img_2d - (WL - 0.5)) / (WW - 0.5) * 255, 0, 255).astype(np.uint8)
# 转换成RGB三通道图像
img_2d = np.stack([img_2d] * 3, axis=-1)
# 保存图像
save_name = os.path.splitext(file)[0] + '_' + str(i) + '.png'
save_folder = os.path.join(save_path, 'image')
if not os.path.exists(save_folder):
os.makedirs(save_folder)
Image.fromarray(img_2d).save(os.path.join(save_folder, save_name))
# 遍历Training Batch 2文件夹里面的标签
for subdir, _, files in os.walk(os.path.join(data_path, 'Training Batch 2')):
for file in files:
if file.endswith('.nii'):
# 读取nii格式标签
label_nii = nib.load(os.path.join(subdir, file))
label = label_nii.get_fdata()
# 转换成2D灰度图像
for i in range(label.shape[2]):
# 取出每张2D图像
label_2d = label[:, :, i]
# 灰度值转换
label_2d = np.vectorize(label_dict.get)(label_2d)
# 保存标签
save_name = os.path.splitext(file)[0] + '_' + str(i) + '.png'
save_folder = os.path.join(save_path, 'label')
if not os.path.exists(save_folder):
os.makedirs(save_folder)
Image.fromarray(label_2d.astype(np.uint8), mode='L').save(os.path.join(save_folder, save_name))
```
以上代码会遍历数据集里的图像和标签,并将其转换成2D、RGB三通道或灰度图像,并保存到对应的文件夹中。
其中,`data_path`和`save_path`需要根据实际情况修改,`WW`和`WL`是窗宽窗位的参数,`label_dict`是标签灰度值对应关系字典。
阅读全文