请将我的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 22:10:48 浏览: 61
mnist数据集转为png格式图片
5星 · 资源好评率100%
好的,我可以使用Python中的SimpleITK库来完成你的要求。以下是代码实现:
```python
import os
import numpy as np
import SimpleITK as sitk
# 设置路径
data_path = r'C:\Users\Administrator\Desktop\LiTS2017'
save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017'
train_batch1_path = os.path.join(data_path, 'training_batch1')
train_batch2_path = os.path.join(data_path, 'training_batch2')
# 创建保存路径
if not os.path.exists(save_path):
os.makedirs(save_path)
os.makedirs(os.path.join(save_path, 'image'))
os.makedirs(os.path.join(save_path, 'label'))
# 定义函数,将3D图像保存为2D、RGB三通道、的png格式的图像
def save_image_as_png(image, save_path):
# 将图像的数值范围缩放到0-255
image = (image - np.min(image)) / (np.max(image) - np.min(image)) * 255
# 转换为uint8类型
image = image.astype(np.uint8)
# 创建三通道空白图像
image_3d = np.zeros([image.shape[0], image.shape[1], 3], dtype=np.uint8)
# 将单通道图像赋值到RGB三通道图像的每个通道
image_3d[:, :, 0] = image
image_3d[:, :, 1] = image
image_3d[:, :, 2] = image
# 将RGB三通道图像保存为png格式
sitk.WriteImage(sitk.GetImageFromArray(image_3d), save_path)
# 定义函数,将3D标签变成2D的png格式标签
def save_label_as_png(label, save_path):
# 创建空白图像
label_2d = np.zeros([label.shape[1], label.shape[2]], dtype=np.uint8)
# 将标签中的不同数值赋值为对应的灰度值
label_2d[label == 0] = 0 # 背景
label_2d[label == 1] = 1 # 肝脏
label_2d[label == 2] = 2 # 肝脏肿瘤
# 将2D标签保存为png格式
sitk.WriteImage(sitk.GetImageFromArray(label_2d), save_path)
# 遍历Training Batch 1文件夹里的图像,将其转换为2D、RGB三通道、的png格式的图像并保存
for file_name in os.listdir(train_batch1_path):
if file_name.endswith('.nii'):
image_path = os.path.join(train_batch1_path, file_name)
image = sitk.ReadImage(image_path)
for i in range(image.GetSize()[0]):
save_image_as_png(sitk.GetArrayFromImage(image)[i], os.path.join(save_path, 'image', file_name.split('.')[0] + '_slice{}_rgb.png'.format(i)))
# 遍历Training Batch 2文件夹里的标签,将其转换为(要求背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)2D的png格式标签并保存
for file_name in os.listdir(train_batch2_path):
if file_name.endswith('.nii'):
label_path = os.path.join(train_batch2_path, file_name)
label = sitk.ReadImage(label_path)
for i in range(label.GetSize()[0]):
save_label_as_png(sitk.GetArrayFromImage(label)[i], os.path.join(save_path, 'label', file_name.split('.')[0] + '_slice{}.png'.format(i)))
```
以上代码实现了将LiTS2017数据集里的3D图像和标签转换为2D、RGB三通道、的png格式的图像和2D的png格式标签,并保存到对应文件夹中。
阅读全文