请将LiTS2017数据集的图像和标签处理成2D的png格式,并且标签需要拆分成灰度图,背景灰度值0,肝脏灰度值1,肝脏肿瘤灰度值2,给出完整代码,我的LiTS2017数据集路径为C:\Users\Administrator\Desktop\LiTS2017,里面包含Training Batch 1文件夹和Training Batch 2文件夹,Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii,保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的保存到对应的文件夹
时间: 2023-11-27 16:49:06 浏览: 53
医学图像分割数据:肝肿瘤分割基(LiTS)切片分割【包含切片后的数据集(3类别)、标签文件、可视化代码】
好的,以下是完整代码,注意需要安装pydicom和nibabel库:
```python
import os
import numpy as np
import pydicom
import nibabel as nib
from PIL import Image
# 创建保存路径
save_dir = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
if not os.path.exists(save_dir):
os.makedirs(save_dir)
# 处理Training Batch 1中的图像
img_dir = 'C:/Users/Administrator/Desktop/LiTS2017/Training Batch 1'
for filename in os.listdir(img_dir):
if filename.endswith('.nii'):
# 读取nii文件
nii_file = nib.load(os.path.join(img_dir, filename))
nii_data = nii_file.get_fdata()
n_slices = nii_data.shape[2]
# 将每个切片保存为png图片
for i in range(n_slices):
slice_data = nii_data[:, :, i]
# 归一化
slice_data = (slice_data - np.min(slice_data)) / (np.max(slice_data) - np.min(slice_data))
# 转为灰度图
slice_data = (slice_data * 255).astype(np.uint8)
# 保存为png
slice_img = Image.fromarray(slice_data)
save_path = os.path.join(save_dir, 'img', filename[:-4] + '_slice{}.png'.format(i))
if not os.path.exists(os.path.dirname(save_path)):
os.makedirs(os.path.dirname(save_path))
slice_img.save(save_path)
# 处理Training Batch 2中的标签
label_dir = 'C:/Users/Administrator/Desktop/LiTS2017/Training Batch 2'
for filename in os.listdir(label_dir):
if filename.endswith('.nii'):
# 读取nii文件
nii_file = nib.load(os.path.join(label_dir, filename))
nii_data = nii_file.get_fdata()
n_slices = nii_data.shape[2]
# 将每个切片保存为png图片
for i in range(n_slices):
slice_data = nii_data[:, :, i]
# 将标签拆分成灰度图
# 背景灰度值为0,肝脏灰度值为1,肝脏肿瘤灰度值为2
slice_data[slice_data == 1] = 255
slice_data[slice_data == 2] = 128
# 保存为png
slice_img = Image.fromarray(slice_data.astype(np.uint8))
save_path = os.path.join(save_dir, 'label', filename[:-4] + '_slice{}.png'.format(i))
if not os.path.exists(os.path.dirname(save_path)):
os.makedirs(os.path.dirname(save_path))
slice_img.save(save_path)
```
执行完毕后,你可以在C:/Users/Administrator/Desktop/2D-LiTS2017下看到img和label两个文件夹,分别存储处理好的图像和标签。
阅读全文