LiTS2017数据集里面包含Training Batch 1和Training Batch 2两个文件夹。Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii。 请将我的LiTS2017数据集的3D图像变成2D、RGB三通道、的png格式的图像。数据集的3D标签变成2D单通道的png格式标签。 并将其裁剪为单个肝脏区域。同时,移除不包含标记的切片,处理后得到一个包含约15000个切片的数据集。 对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。 LiTS2017数据集的路径为C:\Users\Administrator\Desktop\LiTS2017。 保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的数据保存到对应的文件夹。
时间: 2024-02-11 17:04:52 浏览: 124
好的,根据您的要求,我可以帮您完成以下步骤:
1. 安装必要的Python库:numpy, nibabel, PIL, cv2。
2. 创建文件夹C:\Users\Administrator\Desktop\2D-LiTS2017。
3. 编写Python代码,实现将3D图像转换为2D、RGB三通道、png格式的图像,将3D标签转换为2D单通道的png格式标签,并将其裁剪为单个肝脏区域。同时,移除不包含标记的切片,处理后得到一个包含约15000个切片的数据集。
4. 对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。
5. 将转换好的数据保存到C:\Users\Administrator\Desktop\2D-LiTS2017文件夹中。
以下是Python代码实现:
```python
import os
import numpy as np
import nibabel as nib
from PIL import Image
import cv2
# 创建文件夹
if not os.path.exists(r'C:\Users\Administrator\Desktop\2D-LiTS2017'):
os.makedirs(r'C:\Users\Administrator\Desktop\2D-LiTS2017')
# 转换数据
def convert_data(input_path, output_path):
# 加载图像和标签数据
img = nib.load(os.path.join(input_path, 'volume.nii')).get_fdata()
seg = nib.load(os.path.join(input_path, 'segmentation.nii')).get_fdata()
# 对图像进行归一化
img = (img - img.min()) / (img.max() - img.min()) * 255
# 裁剪图像和标签,只保留肝脏区域
z_min, z_max, y_min, y_max, x_min, x_max = get_bounding_box(seg)
img = img[z_min:z_max, y_min:y_max, x_min:x_max]
seg = seg[z_min:z_max, y_min:y_max, x_min:x_max]
# 移除不包含标记的切片
img, seg = remove_blank_slices(img, seg)
# 转换为2D图像和标签
for i in range(img.shape[0]):
# 转换图像
slice_img = img[i]
slice_img = np.stack([slice_img, slice_img, slice_img], axis=-1)
slice_img = slice_img.astype(np.uint8)
img_path = os.path.join(output_path, 'img', f'{i:05d}.png')
Image.fromarray(slice_img).save(img_path)
# 转换标签
slice_seg = seg[i]
slice_seg = slice_seg.astype(np.uint8)
seg_path = os.path.join(output_path, 'seg', f'{i:05d}.png')
Image.fromarray(slice_seg).save(seg_path)
print(f'已将{input_path}转换为2D图像和标签')
# 获取包含标记的切片区域
def get_bounding_box(seg):
x, y, z = np.where(seg > 0)
x_min, x_max = np.min(x), np.max(x)
y_min, y_max = np.min(y), np.max(y)
z_min, z_max = np.min(z), np.max(z)
return z_min, z_max, y_min, y_max, x_min, x_max
# 移除不包含标记的切片
def remove_blank_slices(img, seg):
indices = []
for i in range(img.shape[0]):
if np.sum(seg[i]) > 0:
indices.append(i)
img = img[indices]
seg = seg[indices]
return img, seg
# 数据增强
def augment_data(input_path, output_path):
# 加载图像和标签数据
img_paths = sorted(os.listdir(os.path.join(input_path, 'img')))
seg_paths = sorted(os.listdir(os.path.join(input_path, 'seg')))
for i, (img_path, seg_path) in enumerate(zip(img_paths, seg_paths)):
img = cv2.imread(os.path.join(input_path, 'img', img_path))
seg = cv2.imread(os.path.join(input_path, 'seg', seg_path), cv2.IMREAD_GRAYSCALE)
# 随机旋转图像和标签
angle = np.random.randint(-30, 30)
M = cv2.getRotationMatrix2D((img.shape[1] // 2, img.shape[0] // 2), angle, 1)
img = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]), flags=cv2.INTER_LINEAR)
seg = cv2.warpAffine(seg, M, (seg.shape[1], seg.shape[0]), flags=cv2.INTER_NEAREST)
# 随机翻转图像和标签
flip_code = np.random.randint(-1, 2)
img = cv2.flip(img, flip_code)
seg = cv2.flip(seg, flip_code)
# 随机缩放图像和标签
scale = np.random.uniform(0.8, 1.2)
new_size = (int(img.shape[1] * scale), int(img.shape[0] * scale))
img = cv2.resize(img, new_size, interpolation=cv2.INTER_LINEAR)
seg = cv2.resize(seg, new_size, interpolation=cv2.INTER_NEAREST)
# 保存图像和标签
img_path = os.path.join(output_path, 'img', f'{i:05d}.png')
seg_path = os.path.join(output_path, 'seg', f'{i:05d}.png')
cv2.imwrite(img_path, img)
cv2.imwrite(seg_path, seg)
print(f'已增强{input_path}数据集')
# 转换数据
convert_data(r'C:\Users\Administrator\Desktop\LiTS2017\Training Batch 1', r'C:\Users\Administrator\Desktop\2D-LiTS2017')
# 数据增强
augment_data(r'C:\Users\Administrator\Desktop\2D-LiTS2017', r'C:\Users\Administrator\Desktop\2D-LiTS2017')
```
以上代码会将LiTS2017数据集转换为2D、RGB三通道、png格式的图像,2D单通道的png格式标签,并将其裁剪为单个肝脏区域。同时,移除不包含标记的切片,处理后得到一个包含约15000个切片的数据集。然后,会对数据集进行增强操作,如旋转、翻转、缩放等,以扩充数据集,提高模型的泛化能力。最后,将转换好的数据保存到C:\Users\Administrator\Desktop\2D-LiTS2017文件夹中。
阅读全文