请将我的LiTS2017数据集的3D图像变成2D、RGB三通道、的png格式的图像。数据集的3D标签变成2D的png格式标签。(要求背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的) 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 12:11:04 浏览: 151
医学图像分割数据:肝肿瘤分割基(LiTS)切片分割【包含切片后的数据集(3类别)、标签文件、可视化代码】
好的,需要先安装SimpleITK库,可以通过以下命令进行安装:
```
!pip install SimpleITK
```
安装完成后,可以使用以下代码实现图像的转换和保存:
```python
import os
import SimpleITK as sitk
import numpy as np
from PIL import Image
# 定义路径和文件名
data_path = 'C:/Users/Administrator/Desktop/LiTS2017'
save_path = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 定义函数,将3D图像转换为2D图像并保存为png格式
def convert_img_2d(img_path, save_path):
# 读取nii文件
img = sitk.ReadImage(img_path)
# 将图像数据转换为numpy数组
img_arr = sitk.GetArrayFromImage(img)
# 取中心的一张2D图像
img_arr = img_arr[img_arr.shape[0] // 2]
# 将图像数据类型转换为uint8
img_arr = (img_arr / np.max(img_arr) * 255).astype(np.uint8)
# 将2D图像保存为png格式
img_png = Image.fromarray(img_arr)
img_png.save(save_path)
# 定义函数,将3D标签转换为2D标签并保存为png格式
def convert_label_2d(label_path, save_path):
# 读取nii文件
label = sitk.ReadImage(label_path)
# 将标签数据转换为numpy数组
label_arr = sitk.GetArrayFromImage(label)
# 取中心的一张2D标签
label_arr = label_arr[label_arr.shape[0] // 2]
# 将标签数据类型转换为uint8,并根据要求的灰度值进行处理
label_arr = np.where(label_arr == 1, 1, label_arr)
label_arr = np.where(label_arr == 2, 2, label_arr)
label_arr = (label_arr / np.max(label_arr) * 255).astype(np.uint8)
# 将2D标签保存为png格式
label_png = Image.fromarray(label_arr)
label_png.save(save_path)
# 遍历文件夹,将所有图像和标签转换为2D并保存
for i in range(1, 131):
if i <= 99:
num = '0' + str(i)
else:
num = str(i)
img_path = os.path.join(data_path, 'Training Batch 1', 'volume-' + num + '.nii')
label_path = os.path.join(data_path, 'Training Batch 2', 'segmentation-' + num + '.nii')
img_save_path = os.path.join(save_path, 'img-' + num + '.png')
label_save_path = os.path.join(save_path, 'label-' + num + '.png')
convert_img_2d(img_path, img_save_path)
convert_label_2d(label_path, label_save_path)
```
这段代码可以将LiTS2017数据集的所有图像和标签转换为2D,并保存到指定的文件夹中。注意,需要将路径和文件名根据自己的实际情况进行修改。
阅读全文