请将我的LiTS2017数据集的3D图像变成2D、RGB三通道、的png格式的图像。数据集的3D标签变成2D(背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)的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 08:11:56 浏览: 163
LITS2017肝脏肿瘤分割挑战数据集.txt
4星 · 用户满意度95%
好的,你可以使用Python中的SimpleITK和numpy库来完成这个任务。具体操作步骤如下:
1. 导入必要的库:
```python
import os
import numpy as np
import SimpleITK as sitk
```
2. 定义数据集路径和保存路径:
```python
data_path = r'C:\Users\Administrator\Desktop\LiTS2017'
save_path = r'C:\Users\Administrator\Desktop\2D-LiTS2017'
```
3. 创建对应的文件夹:
```python
if not os.path.exists(save_path):
os.mkdir(save_path)
os.mkdir(os.path.join(save_path, 'image'))
os.mkdir(os.path.join(save_path, 'label'))
```
4. 定义函数将3D图像转换为2D RGB图像:
```python
def convert_image(image_path, save_path):
# 读取nii文件
itk_img = sitk.ReadImage(image_path)
# 获取图像数据和元数据
img_array = sitk.GetArrayFromImage(itk_img) # z, y, x
origin = itk_img.GetOrigin()
spacing = itk_img.GetSpacing()
direction = itk_img.GetDirection()
# 将图像数据转换为RGB格式
img_array = (img_array - np.min(img_array)) / (np.max(img_array) - np.min(img_array)) * 255 # 归一化到0~255
img_array = np.transpose(img_array, (1, 2, 0)) # y, x, z
img_array = np.repeat(img_array[:, :, np.newaxis, :], 3, axis=2) # 增加RGB通道
img_array = img_array.astype(np.uint8)
# 保存图像
for i in range(img_array.shape[2]):
img = sitk.GetImageFromArray(img_array[:, :, i, :])
img.SetOrigin(origin)
img.SetSpacing(spacing)
img.SetDirection(direction)
sitk.WriteImage(img, os.path.join(save_path, f'{i:03d}.png'))
```
5. 定义函数将3D标签转换为2D灰度图像:
```python
def convert_label(label_path, save_path):
# 读取nii文件
itk_img = sitk.ReadImage(label_path)
# 获取标签数据和元数据
label_array = sitk.GetArrayFromImage(itk_img) # z, y, x
origin = itk_img.GetOrigin()
spacing = itk_img.GetSpacing()
direction = itk_img.GetDirection()
# 将标签数据转换为0~2的灰度值
label_array[label_array == 1] = 255
label_array[label_array == 2] = 128
# 保存标签
for i in range(label_array.shape[0]):
label = sitk.GetImageFromArray(label_array[i, :, :])
label.SetOrigin(origin)
label.SetSpacing(spacing)
label.SetDirection(direction)
sitk.WriteImage(label, os.path.join(save_path, f'{i:03d}.png'))
```
6. 遍历数据集,将所有图像和标签转换为2D格式并保存到对应的文件夹:
```python
for i in range(1, 3):
# 读取图像和标签的路径
image_folder = os.path.join(data_path, f'Training Batch {i}', 'volume')
label_folder = os.path.join(data_path, f'Training Batch {i}', 'segmentation')
# 遍历图像和标签,将其转换为2D格式并保存
for file_name in os.listdir(image_folder):
image_path = os.path.join(image_folder, file_name)
label_path = os.path.join(label_folder, file_name)
convert_image(image_path, os.path.join(save_path, 'image', f'Batch{i}', os.path.splitext(file_name)[0]))
convert_label(label_path, os.path.join(save_path, 'label', f'Batch{i}', os.path.splitext(file_name)[0]))
```
最终,你将得到一个包含2D RGB图像和2D灰度标签的数据集,保存在C:\Users\Administrator\Desktop\2D-LiTS2017文件夹中。其中,2D RGB图像保存在C:\Users\Administrator\Desktop\2D-LiTS2017\image文件夹中,2D灰度标签保存在C:\Users\Administrator\Desktop\2D-LiTS2017\label文件夹中。每个文件夹都按照Training Batch进行了分类。
阅读全文