请将我的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-03 13:15:16 浏览: 174
好的,您可以使用以下代码实现此功能。请注意,此代码需要安装SimpleITK库。
```python
import os
import numpy as np
import SimpleITK as sitk
# 定义窗宽窗位的范围
WW = 400
WL = 40
# 定义路径
data_path = "C:/Users/Administrator/Desktop/LiTS2017"
output_path = "C:/Users/Administrator/Desktop/2D-LiTS2017"
# 创建输出文件夹
if not os.path.exists(output_path):
os.makedirs(output_path)
# 遍历Training Batch 1文件夹里的所有图像
for file in os.listdir(os.path.join(data_path, "training_batch1")):
if file.endswith(".nii"):
# 读取图像
image = sitk.ReadImage(os.path.join(data_path, "training_batch1", file))
# 获取图像数据和元数据
image_array = sitk.GetArrayFromImage(image)
origin = np.array(image.GetOrigin())[::-1]
spacing = np.array(image.GetSpacing())[::-1]
# 调整窗宽窗位
image_array = (image_array - (WL - 0.5)) / WW + 0.5
image_array = np.clip(image_array, 0, 1)
# 遍历每个切片并保存为2D图像
for i in range(image_array.shape[0]):
# 将单通道图像转换为RGB三通道图像
rgb_image_array = np.stack([image_array[i]]*3, axis=-1)
# 将图像数组保存为png格式
output_file = os.path.join(output_path, file.split(".")[0] + f"_slice{i:03d}.png")
sitk.WriteImage(sitk.GetImageFromArray(rgb_image_array), output_file, True)
# 遍历Training Batch 2文件夹里的所有标签
for file in os.listdir(os.path.join(data_path, "training_batch2")):
if file.endswith(".nii"):
# 读取标签
label = sitk.ReadImage(os.path.join(data_path, "training_batch2", file))
# 获取标签数据和元数据
label_array = sitk.GetArrayFromImage(label)
origin = np.array(label.GetOrigin())[::-1]
spacing = np.array(label.GetSpacing())[::-1]
# 将标签数组转换为0-2的灰度值
label_array[label_array == 1] = 2
label_array[label_array == 2] = 1
# 遍历每个切片并保存为2D标签
for i in range(label_array.shape[0]):
# 将单通道标签转换为RGB三通道标签
rgb_label_array = np.stack([label_array[i]]*3, axis=-1) * 255
# 将标签数组保存为png格式
output_file = os.path.join(output_path, file.split(".")[0] + f"_slice{i:03d}_label.png")
sitk.WriteImage(sitk.GetImageFromArray(rgb_label_array), output_file, True)
```
此代码将遍历Training Batch 1文件夹里的所有图像和Training Batch 2文件夹里的所有标签,对它们进行处理并将它们保存到2D-LiTS2017文件夹中。处理后的图像将被调整为RGB三通道、png格式,并带有窗宽窗位的调整。处理后的标签将被转换为0-2的灰度值,并使用灰度值为0、1和2的RGB三通道进行编码,然后保存为png格式。
阅读全文