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 21:16:18 浏览: 126
好的,可以使用以下Python代码来完成您的需求:
```python
import os
import nibabel as nib
import numpy as np
from PIL import Image
root_dir = r'D:\BaiduNetdiskDownload\LiTS2017'
save_dir = r'C:\Users\Administrator\Desktop\2D-LiTS2017'
# 创建对应文件夹
os.makedirs(os.path.join(save_dir, 'Training Batch 1'), exist_ok=True)
os.makedirs(os.path.join(save_dir, 'Training Batch 2'), exist_ok=True)
# 转换图像
for i in range(1, 131):
img_path = os.path.join(root_dir, 'Training Batch 1', f'volume-{i:03d}.nii')
img = nib.load(img_path).get_data()
img = np.transpose(img, (2, 0, 1)) # 转为Z轴为第一维度的顺序
for j in range(img.shape[0]):
save_path = os.path.join(save_dir, 'Training Batch 1', f'volume-{i:03d}-{j:03d}.png')
Image.fromarray(img[j]).convert('L').save(save_path)
# 转换标签
for i in range(1, 131):
label_path = os.path.join(root_dir, 'Training Batch 2', f'segment-{i:03d}.nii')
label = nib.load(label_path).get_data()
label = np.transpose(label, (2, 0, 1)) # 转为Z轴为第一维度的顺序
for j in range(label.shape[0]):
save_path = os.path.join(save_dir, 'Training Batch 2', f'segment-{i:03d}-{j:03d}.png')
label_2d = np.zeros_like(label[j], dtype=np.uint8)
label_2d[label[j] == 1] = 255 # 肝脏标签设为255
label_2d[label[j] == 2] = 128 # 肝脏肿瘤标签设为128
Image.fromarray(label_2d).convert('L').save(save_path)
```
这段代码使用了nibabel库来读取.nii格式的图像和标签,并将其转换为numpy数组。然后使用PIL库将numpy数组转换为png格式的图像和标签,并保存到对应的文件夹中。请注意,由于图像和标签的文件名中包含了序号,因此我们使用了f-string来动态生成文件名。
希望这可以帮助到您。
阅读全文