①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格式标签。并将其裁剪为单个肝脏区域。同时,移除标签中无肝脏的图片以及肝脏在图片中面积占比小于2%的切片,对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。
时间: 2024-02-20 14:58:43 浏览: 59
好的,根据您的要求,我会帮您完成以下任务:
1. 创建保存图像与标签的文件夹,并将转换好的数据保存到对应的文件夹。
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
from skimage import morphology, measure
from scipy import ndimage
import random
data_folder = 'E:/LiTS2017'
save_folder = 'E:/2D-LiTS2017'
if not os.path.exists(save_folder):
os.makedirs(save_folder)
# load data and labels
data_files = os.listdir(os.path.join(data_folder, 'Training Batch 1'))
label_files = os.listdir(os.path.join(data_folder, 'Training Batch 2'))
for i in range(len(data_files)):
# load data
data_path = os.path.join(data_folder, 'Training Batch 1', data_files[i])
data = nib.load(data_path).get_fdata()
# load label
label_path = os.path.join(data_folder, 'Training Batch 2', label_files[i])
label = nib.load(label_path).get_fdata()
# convert 3D images to 2D and save as RGB images
for j in range(data.shape[2]):
# skip slices with no liver
if np.sum(label[:, :, j]) == 0:
continue
# skip slices with liver area less than 2%
liver_area = np.sum(label[:, :, j] > 0)
if liver_area < 0.02 * data.shape[0] * data.shape[1]:
continue
# crop liver area
liver_mask = label[:, :, j] > 0
liver_mask = morphology.binary_closing(liver_mask, morphology.disk(5))
liver_mask = ndimage.binary_fill_holes(liver_mask)
liver_props = measure.regionprops(liver_mask.astype(int))[0]
min_row, min_col, max_row, max_col = liver_props.bbox
data_slice = data[min_row:max_row, min_col:max_col, j]
label_slice = label[min_row:max_row, min_col:max_col, j]
# save as PNG
data_png = Image.fromarray((data_slice * 255 / np.max(data_slice)).astype(np.uint8))
data_png = data_png.convert('RGB')
label_png = Image.fromarray((label_slice * 255 / np.max(label_slice)).astype(np.uint8))
label_png = label_png.convert('L')
data_png.save(os.path.join(save_folder, 'data', f'{i+1:03d}_{j:03d}.png'))
label_png.save(os.path.join(save_folder, 'label', f'{i+1:03d}_{j:03d}.png'))
```
2. 将LiTS2017数据集的3D图像变成2D、RGB三通道的png格式的图像。数据集的3D标签变成2D单通道的png格式标签。并将其裁剪为单个肝脏区域。同时,移除标签中无肝脏的图片以及肝脏在图片中面积占比小于2%的切片,对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。
阅读全文