请将我的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。 LiTS2017数据集的路径为C:\Users\Administrator\Desktop\LiTS2017。 保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的数据保存到对应的文件夹。
时间: 2024-02-05 21:10:34 浏览: 234
LITS2017肝脏肿瘤分割挑战数据集
5星 · 资源好评率100%
好的,需要使用Python的nibabel库和Pillow库来实现这个任务。以下是代码实现:
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
# 设置LiTS2017数据集路径和保存路径
data_path = 'C:/Users/Administrator/Desktop/LiTS2017'
save_path = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
# 创建保存路径文件夹
if not os.path.exists(save_path):
os.makedirs(save_path)
if not os.path.exists(os.path.join(save_path, 'image')):
os.makedirs(os.path.join(save_path, 'image'))
if not os.path.exists(os.path.join(save_path, 'label')):
os.makedirs(os.path.join(save_path, 'label'))
# 定义窗宽窗位参数
WW = 350
WL = 50
# 循环遍历Training Batch 1文件夹中的所有图像
for file in os.listdir(os.path.join(data_path, 'Training Batch 1')):
if file.endswith('.nii'):
# 读取nii文件
img_nii = nib.load(os.path.join(data_path, 'Training Batch 1', file))
img_array = img_nii.get_fdata()
# 调整窗宽窗位
img_array = np.clip((img_array - (WL - 0.5)) / WW, 0, 1) * 255
img_array = img_array.astype(np.uint8)
# 将3D图像转换为2D RGB图像
for i in range(img_array.shape[2]):
img_slice = img_array[:, :, i]
img_rgb = np.stack((img_slice, img_slice, img_slice), axis=2)
# 保存图像
save_name = file.split('.')[0] + '_' + str(i) + '.png'
save_path_image = os.path.join(save_path, 'image', save_name)
Image.fromarray(img_rgb).save(save_path_image)
# 循环遍历Training Batch 2文件夹中的所有标签
for file in os.listdir(os.path.join(data_path, 'Training Batch 2')):
if file.endswith('.nii'):
# 读取nii文件
label_nii = nib.load(os.path.join(data_path, 'Training Batch 2', file))
label_array = label_nii.get_fdata()
# 将3D标签转换为2D标签
for i in range(label_array.shape[2]):
label_slice = label_array[:, :, i]
label_slice[label_slice == 1] = 255
label_slice[label_slice == 2] = 128
# 保存标签
save_name = file.split('.')[0] + '_' + str(i) + '.png'
save_path_label = os.path.join(save_path, 'label', save_name)
Image.fromarray(label_slice.astype(np.uint8)).save(save_path_label)
```
运行以上代码后,2D-LiTS2017文件夹中会包含image文件夹和label文件夹,分别保存了转换后的2D RGB图像和2D标签。其中,图像文件名与原始nii文件名相同,标签文件名在原始文件名后加上下划线和切片序号。
阅读全文