我的LiTS2017数据集的路径为E:\LiTS2017。保存路径为E:\2D-LiTS2017,帮我创建保存图像与标签的文件夹,并且将转换好的数据保存到对应的文件夹。 我的LiTS2017数据集里面有命名为Training Batch 1的文件夹和命名为Training Batch 2的文件夹。Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii。 请将我的LiTS2017数据集的3D图像切片成2D、RGB三通道的png格式的图像。数据集的3D标签变成2D单通道的png格式标签。segmentation部分中肝脏加上肿瘤在图中面积占比小于2%的切片不保留。
时间: 2024-02-20 14:01:45 浏览: 70
医学图像分割数据:肝肿瘤分割(LiTS)切片【包含切片后的数据集(3类别)、标签文件、可视化代码】
5星 · 资源好评率100%
好的,我将为您提供Python代码来实现这个任务。请确保您已经安装了以下Python库:numpy、nibabel、Pillow。
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
# 创建保存图像和标签的文件夹
if not os.path.exists('E:/2D-LiTS2017/images'):
os.makedirs('E:/2D-LiTS2017/images')
if not os.path.exists('E:/2D-LiTS2017/labels'):
os.makedirs('E:/2D-LiTS2017/labels')
# 加载数据集
data_path = 'E:/LiTS2017/'
image_folder = 'Training Batch 1'
label_folder = 'Training Batch 2'
image_path = os.path.join(data_path, image_folder)
label_path = os.path.join(data_path, label_folder)
image_files = sorted([os.path.join(image_path, f) for f in os.listdir(image_path) if f.endswith('.nii')])
label_files = sorted([os.path.join(label_path, f) for f in os.listdir(label_path) if f.endswith('.nii')])
# 切片数据并保存为PNG格式
for i, (image_file, label_file) in enumerate(zip(image_files, label_files)):
print('Processing volume', i+1, '...')
image = nib.load(image_file).get_fdata()
label = nib.load(label_file).get_fdata()
num_slices = image.shape[-1]
for j in range(num_slices):
image_slice = image[:, :, j]
label_slice = label[:, :, j]
# 过滤掉标签区域面积占比小于2%的切片
if np.sum(label_slice == 1) / np.prod(label_slice.shape) < 0.02:
continue
# 转成RGB三通道的PNG格式图像
image_slice = np.repeat(np.expand_dims(image_slice, axis=-1), 3, axis=-1)
image_slice = (image_slice / np.max(image_slice) * 255).astype(np.uint8)
label_slice = (label_slice * 255).astype(np.uint8)
# 保存图像和标签
image_filename = os.path.join('E:/2D-LiTS2017/images', f'volume_{i+1}_slice_{j+1}.png')
label_filename = os.path.join('E:/2D-LiTS2017/labels', f'volume_{i+1}_slice_{j+1}.png')
Image.fromarray(image_slice).save(image_filename)
Image.fromarray(label_slice).save(label_filename)
```
这段代码将循环遍历数据集的每个3D体积,然后对每个体积的每个切片进行切片和转换。在切片过程中,我们将过滤掉标签区域面积占比小于2%的切片。最后,我们将保存RGB三通道的PNG格式图像和单通道的PNG格式标签。
阅读全文