请将我的数据集里面的3D图像变成2D、三通道、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-03 09:13:50 浏览: 74
好的,为了完成这个任务,我们需要使用Python中的一些库来实现。具体的步骤如下:
1. 安装必要的库
我们需要安装以下库:
- SimpleITK:用于读取和处理医学图像数据
- numpy:用于处理图像数组
- os:用于处理文件和文件夹
可以使用以下命令安装这些库:
```
pip install SimpleITK numpy
```
2. 创建文件夹
我们需要创建一个名为“2D-LiTS2017”的文件夹,并在其中创建两个子文件夹:“images”和“labels”。可以使用以下代码创建这些文件夹:
```python
import os
# 创建根文件夹
root_folder = r'C:\Users\Administrator\Desktop\2D-LiTS2017'
os.makedirs(root_folder, exist_ok=True)
# 创建图像文件夹
image_folder = os.path.join(root_folder, 'images')
os.makedirs(image_folder, exist_ok=True)
# 创建标签文件夹
label_folder = os.path.join(root_folder, 'labels')
os.makedirs(label_folder, exist_ok=True)
```
3. 将3D图像转换为2D图像
我们需要逐个读取每个.nii文件,并将其转换为2D.png格式的图像。我们还需要调整窗宽和窗位以突出所需区域的细节。
```python
import SimpleITK as sitk
import numpy as np
# 定义窗宽和窗位
WW = 400
WL = 50
# 遍历所有图像
for i in range(1, 131):
# 读取图像
image_path = os.path.join(r'C:\Users\Administrator\Desktop\LiTS2017\Training Batch 1', 'volume-' + str(i) + '.nii')
image = sitk.ReadImage(image_path)
image_array = sitk.GetArrayFromImage(image)
# 调整窗宽和窗位
image_array[image_array < (WL - WW/2)] = WL - WW/2
image_array[image_array > (WL + WW/2)] = WL + WW/2
image_array = (image_array - (WL - WW/2)) / WW * 255
image_array = np.clip(image_array, 0, 255).astype(np.uint8)
# 将3D图像转换为2D图像并保存
for j in range(image_array.shape[0]):
image_slice = image_array[j]
image_slice_path = os.path.join(image_folder, 'volume-' + str(i) + '-' + str(j) + '.png')
sitk.WriteImage(sitk.GetImageFromArray(image_slice), image_slice_path)
```
4. 将3D标签转换为2D标签
我们需要逐个读取每个.nii文件,并将其转换为2D.png格式的标签。同时,我们需要将背景灰度值设为0、肝脏灰度值设为1、肝脏肿瘤灰度值设为2。
```python
# 遍历所有标签
for i in range(1, 131):
# 读取标签
label_path = os.path.join(r'C:\Users\Administrator\Desktop\LiTS2017\Training Batch 2', 'segmentation-' + str(i) + '.nii')
label = sitk.ReadImage(label_path)
label_array = sitk.GetArrayFromImage(label)
# 转换标签
label_array[label_array == 1] = 0
label_array[label_array == 2] = 1
label_array[label_array == 3] = 2
# 将3D标签转换为2D标签并保存
for j in range(label_array.shape[0]):
label_slice = label_array[j]
label_slice_path = os.path.join(label_folder, 'segmentation-' + str(i) + '-' + str(j) + '.png')
sitk.WriteImage(sitk.GetImageFromArray(label_slice), label_slice_path)
```
现在,我们已经成功地将LiTS2017数据集的3D图像和标签转换为2D.png格式的图像和标签,并将它们保存到对应的文件夹中。
阅读全文