请将我的数据集里面的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 22:14:54 浏览: 138
好的,您可以使用以下Python代码来实现您的需求:
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
# 定义窗宽窗位
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, "images")):
os.makedirs(os.path.join(save_path, "images"))
if not os.path.exists(os.path.join(save_path, "labels")):
os.makedirs(os.path.join(save_path, "labels"))
# 处理训练集1
image_path = os.path.join(data_path, "training_batch1")
for file in os.listdir(image_path):
if file.endswith(".nii"):
# 读取nii文件
img = nib.load(os.path.join(image_path, file))
img_array = img.get_fdata()
# 调整窗宽窗位
img_array = np.clip((img_array - (WL - 0.5)) / (WW - 0.5) * 255.0, 0, 255).astype(np.uint8)
# 将3D图像变成2D图像
for i in range(img_array.shape[2]):
img_slice = img_array[:, :, i]
# 将灰度值归一化到0-255范围
img_slice = (img_slice - np.min(img_slice)) / (np.max(img_slice) - np.min(img_slice)) * 255.0
img_slice = img_slice.astype(np.uint8)
# 创建PIL Image对象并保存为png格式
img_pil = Image.fromarray(np.stack((img_slice,) * 3, axis=-1))
img_pil.save(os.path.join(save_path, "images", f"{file.split('.')[0]}_{i+1:03}.png"))
# 处理训练集2
label_path = os.path.join(data_path, "training_batch2")
for file in os.listdir(label_path):
if file.endswith(".nii"):
# 读取nii文件
img = nib.load(os.path.join(label_path, file))
img_array = img.get_fdata()
# 将3D标签变成2D标签
for i in range(img_array.shape[2]):
img_slice = img_array[:, :, i]
img_slice[img_slice == 1] = 255 # 将肝脏标签设为255
img_slice[img_slice == 2] = 128 # 将肝脏肿瘤标签设为128
# 创建PIL Image对象并保存为png格式
img_pil = Image.fromarray(img_slice)
img_pil.save(os.path.join(save_path, "labels", f"{file.split('.')[0]}_{i+1:03}.png"))
```
代码中使用了Python第三方库nibabel和Pillow,需要先安装这两个库。您可以使用以下命令进行安装:
```
pip install nibabel Pillow
```
该代码会将训练集1中的3D图像转换成2D、RGB三通道、png格式的图像,并保存到`C:\Users\Administrator\Desktop\2D-LiTS2017\images`文件夹中;将训练集2中的3D标签转换成2D、灰度图像、png格式的标签,并保存到`C:\Users\Administrator\Desktop\2D-LiTS2017\labels`文件夹中。
阅读全文