LiTS2017数据集的路径为D:\BaiduNetdiskDownload\LiTS2017,将数据集的3D图像转换成2D的三通道png格式图像,3D标签转换成(背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)2D的png格式标签。,LiTS2017数据集里面包含Training Batch 1和Training Batch 2两个文件夹,Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii,保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的保存到对应的文件夹
时间: 2024-01-21 16:17:11 浏览: 123
好的,下面是Python代码实现,你可以在本地运行:
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
# 设置路径
data_path = r'D:\BaiduNetdiskDownload\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'))
# 定义函数将3D图像转换成2D的三通道png格式图像
def save_2d_image(data, save_dir, prefix):
for i in range(data.shape[0]):
# 将每一层的二维数据转换成三通道
img = np.stack([data[i]]*3, axis=2)
img = (img * 255).astype(np.uint8)
# 保存为png格式
Image.fromarray(img).save(os.path.join(save_dir, prefix + '_slice_{:03d}.png'.format(i)))
# 定义函数将3D标签转换成2D的png格式标签
def save_2d_label(data, save_dir, prefix):
for i in range(data.shape[0]):
# 将每一层的二维数据转换成1通道
img = data[i].astype(np.uint8)
# 保存为png格式
Image.fromarray(img).save(os.path.join(save_dir, prefix + '_slice_{:03d}.png'.format(i)))
# 遍历Training Batch 1文件夹里面的图像
for file_name in os.listdir(os.path.join(data_path, 'Training Batch 1')):
if file_name.endswith('.nii'):
# 读取nii文件
img_path = os.path.join(data_path, 'Training Batch 1', file_name)
img = nib.load(img_path).get_fdata()
# 将3D图像转换为2D的三通道png格式图像并保存
prefix = os.path.splitext(file_name)[0]
save_2d_image(img, os.path.join(save_path, 'images'), prefix)
# 遍历Training Batch 2文件夹里面的标签
for file_name in os.listdir(os.path.join(data_path, 'Training Batch 2')):
if file_name.endswith('.nii'):
# 读取nii文件
label_path = os.path.join(data_path, 'Training Batch 2', file_name)
label = nib.load(label_path).get_fdata()
# 将3D标签转换为2D的png格式标签并保存
prefix = os.path.splitext(file_name)[0]
save_2d_label(label, os.path.join(save_path, 'labels'), prefix)
```
该代码将会遍历数据集文件夹中的所有.nii文件,将3D图像转换成2D的三通道png格式图像并保存在`save_path/images`文件夹中,将3D标签转换成2D的png格式标签并保存在`save_path/labels`文件夹中。
阅读全文