LiTS2017数据集的路径为C:\Users\Administrator\Desktop\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%的切片,对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。 保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,帮我创建保存图像与标签的文件夹,并且将转换好的数据保存到对应的文件夹。
时间: 2024-02-11 08:08:59 浏览: 79
好的,我可以为您提供一个Python实现的代码示例。请注意,这个任务需要用到一些第三方库,你需要先安装以下库:SimpleITK、numpy、Pillow。
``` python
import os
import numpy as np
import SimpleITK as sitk
from PIL import Image
def crop(image, label):
# 获取标签中肝脏的位置
liver_mask = np.where(label > 0, 1, 0)
z, y, x = np.nonzero(liver_mask)
# 获取肝脏在z轴上的最小和最大位置
z_min, z_max = np.min(z), np.max(z)
# 获取肝脏在y轴上的最小和最大位置
y_min, y_max = np.min(y), np.max(y)
# 获取肝脏在x轴上的最小和最大位置
x_min, x_max = np.min(x), np.max(x)
# 裁剪图像和标签
cropped_image = image[z_min:z_max+1, y_min:y_max+1, x_min:x_max+1]
cropped_label = label[z_min:z_max+1, y_min:y_max+1, x_min:x_max+1]
return cropped_image, cropped_label
def preprocess_lits2017(input_dir, output_dir):
# 创建保存图像与标签的文件夹
os.makedirs(os.path.join(output_dir, 'images'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'labels'), exist_ok=True)
# 加载数据集
image_files = sorted(os.listdir(os.path.join(input_dir, 'Training Batch 1')))
label_files = sorted(os.listdir(os.path.join(input_dir, 'Training Batch 2')))
# 对于每个3D图像,将其转换为2D、RGB三通道的png格式图像,并保存到指定路径。
# 对于每个3D标签,将其转换为2D单通道的png格式标签,并保存到指定路径。
for i, (image_file, label_file) in enumerate(zip(image_files, label_files)):
print(f'Processing image {i+1}/{len(image_files)} ...')
# 加载图像和标签
image_path = os.path.join(input_dir, 'Training Batch 1', image_file)
label_path = os.path.join(input_dir, 'Training Batch 2', label_file)
image = sitk.GetArrayFromImage(sitk.ReadImage(image_path))
label = sitk.GetArrayFromImage(sitk.ReadImage(label_path))
# 将图像和标签裁剪为单个肝脏区域
image, label = crop(image, label)
# 移除标签中无肝脏的图片以及肝脏在图片中面积占比小于2%的切片
liver_mask = np.where(label > 0, 1, 0)
liver_area = np.sum(liver_mask)
total_area = np.prod(liver_mask.shape)
if liver_area / total_area < 0.02:
continue
# 对图像和标签进行增强操作
# TODO: 实现增强操作
# 将图像和标签转换为png格式,并保存到指定路径
image = np.transpose(image, (1, 2, 0))
label = np.transpose(label, (1, 2, 0))
image = Image.fromarray(image.astype(np.uint8))
label = Image.fromarray(label.astype(np.uint8))
image.save(os.path.join(output_dir, 'images', f'{i+1}.png'))
label.save(os.path.join(output_dir, 'labels', f'{i+1}.png'))
if __name__ == '__main__':
input_dir = 'C:/Users/Administrator/Desktop/LiTS2017'
output_dir = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
preprocess_lits2017(input_dir, output_dir)
```
这段代码将会根据您提供的路径,依次处理图像和标签,并在指定路径下创建保存图像与标签的文件夹,将转换好的数据分别保存到对应的文件夹中。
阅读全文