请将LiTS2017数据集处理成2D的png格式,其中要将我的标签变成灰度图背景灰度值0肝脏1肝脏肿瘤2,给出完整代码,我的LiTS2017数据集路径为C:\Users\Administrator\Desktop\LiTS2017,里面包含Training Batch 1,其中里面有图像,图像格式为volume-0.nii。和Training Batch 2,其中里面有标签,标签格式为segmentation-0.nii,保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,里面有image和mask两个文件夹,请将转换好的保存到对应的文件夹
时间: 2023-11-22 17:56:21 浏览: 151
首先需要安装以下库:numpy、nibabel、matplotlib。
下面是完整代码:
```python
import numpy as np
import nibabel as nib
import matplotlib.pyplot as plt
import os
def save_2d_slices(img, mask, save_path):
"""
将3D图像转换成2D灰度图和二值化标签图,并保存到指定路径中。
:param img: 3D图像
:param mask: 对应的标签
:param save_path: 保存路径
"""
if not os.path.exists(save_path):
os.makedirs(save_path)
# 将3D图像和标签转换成numpy数组
img_arr = np.array(img.get_data())
mask_arr = np.array(mask.get_data())
# 遍历每个slice
for i in range(img_arr.shape[2]):
img_slice = img_arr[:, :, i]
mask_slice = mask_arr[:, :, i]
# 将标签二值化
mask_slice[mask_slice == 1] = 0 # 背景
mask_slice[mask_slice == 2] = 1 # 肝脏
mask_slice[mask_slice == 3] = 2 # 肝脏肿瘤
# 保存到文件中
plt.imsave(os.path.join(save_path, f"img_{i}.png"), img_slice, cmap='gray')
plt.imsave(os.path.join(save_path, f"mask_{i}.png"), mask_slice, cmap='gray')
# 读取数据集路径
data_path = r"C:\Users\Administrator\Desktop\LiTS2017"
# 遍历数据集中Training Batch 1中的每个图像
for i in range(131):
img_path = os.path.join(data_path, "Training Batch 1", f"volume-{i}.nii")
img = nib.load(img_path)
# 对应的标签
mask_path = os.path.join(data_path, "Training Batch 2", f"segmentation-{i}.nii")
mask = nib.load(mask_path)
# 将3D图像转换成2D灰度图和二值化标签图,并保存到指定路径中
save_2d_slices(img, mask, r"C:\Users\Administrator\Desktop\2D-LiTS2017\image")
save_2d_slices(mask, mask, r"C:\Users\Administrator\Desktop\2D-LiTS2017\mask")
```
运行完毕后,LiTS2017数据集就会被处理成2D的png格式,并保存到C:\Users\Administrator\Desktop\2D-LiTS2017文件夹中。其中,image文件夹中保存的是2D灰度图,mask文件夹中保存的是对应的标签。
阅读全文