请将我的数据集里面的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-03 14:14:12 浏览: 22
好的,您可以使用Python中的SimpleITK库来读取.nii格式的3D图像和标签,并将其转换为2D、RGB三通道、png格式的图像和标签。以下是代码实现:
```python
import os
import numpy as np
import SimpleITK as sitk
# 定义窗宽和窗位
WW = 150
WL = -50
# 定义读取路径和保存路径
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)
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'))
# 读取数据集
for i in range(1, 3):
if i == 1:
data_folder = 'Training Batch 1'
data_type = 'image'
else:
data_folder = 'Training Batch 2'
data_type = 'label'
data_path_i = os.path.join(data_path, data_folder)
# 遍历对应文件夹下的.nii文件
for file in os.listdir(data_path_i):
if file.endswith('.nii'):
# 读取.nii文件
img = sitk.ReadImage(os.path.join(data_path_i, file))
# 将3D图像转换为2D、RGB三通道、png格式的图像
img_array = sitk.GetArrayFromImage(img)
img_array = img_array[img_array.shape[0] // 2, :, :]
img_array = np.transpose(img_array, (1, 0))
img_array = (img_array - WL) / WW * 255
img_array = np.clip(img_array, 0, 255).astype(np.uint8)
img_array = np.stack([img_array] * 3, axis=-1)
img_png = sitk.GetImageFromArray(img_array)
# 将3D标签转换为2D、png格式的标签
if data_type == 'label':
img_array[img_array < 64] = 0
img_array[img_array == 64] = 1
img_array[img_array == 192] = 2
img_png = sitk.GetImageFromArray(img_array)
# 设置保存路径和文件名
save_file_name = file.split('.nii')[0] + '_slice.png'
save_folder = os.path.join(save_path, data_type)
# 保存为png格式
sitk.WriteImage(img_png, os.path.join(save_folder, save_file_name))
print('Save file:', os.path.join(save_folder, save_file_name))
```
这段代码可以将LiTS2017数据集中的.nii格式的3D图像和标签转换为2D、RGB三通道、png格式的图像和标签,并保存到对应的文件夹中。