请将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-22 09:57:02 浏览: 21
好的,可以使用Python中的SimpleITK库来处理.nii文件,具体步骤如下:
1. 导入所需要的库
```python
import os
import numpy as np
import SimpleITK as sitk
import cv2
```
2. 定义函数:读取.nii文件,将其转换为numpy数组
```python
def read_nii_file(filepath):
itkimage = sitk.ReadImage(filepath)
numpyimage = sitk.GetArrayFromImage(itkimage)
return numpyimage
```
3. 定义函数:将三维图像转换为二维图像,并保存为.png格式
```python
def save_2d_image(image, save_path):
if not os.path.exists(save_path):
os.makedirs(save_path)
for i in range(image.shape[0]):
img = image[i, :, :]
img_path = os.path.join(save_path, f"{i}.png")
cv2.imwrite(img_path, img)
```
4. 定义函数:将标签分为三类,分别为背景、肝脏、肝脏肿瘤,并将其转换为灰度图像,并保存为.png格式
```python
def save_2d_label(label, save_path):
if not os.path.exists(save_path):
os.makedirs(save_path)
for i in range(label.shape[0]):
img = label[i, :, :]
background = np.zeros_like(img)
liver = np.where(img == 1, 255, 0)
tumor = np.where(img == 2, 255, 0)
label_img = np.stack([background, liver, tumor], axis=-1)
label_path = os.path.join(save_path, f"{i}.png")
cv2.imwrite(label_path, label_img)
```
5. 定义主函数,遍历所有数据集文件夹,调用上述函数进行处理
```python
if __name__ == '__main__':
data_dir = r"C:\Users\Administrator\Desktop\LiTS2017"
save_dir = r"C:\Users\Administrator\Desktop\2D-LiTS2017"
for batch_num in range(1, 3):
image_dir = os.path.join(data_dir, f"Training Batch {batch_num}")
label_dir = os.path.join(data_dir, f"Training Batch {batch_num}", "segmentations")
for i in range(131):
image_file = os.path.join(image_dir, f"volume-{i:03d}.nii")
label_file = os.path.join(label_dir, f"segmentation-{i:03d}.nii")
image = read_nii_file(image_file)
label = read_nii_file(label_file)
image_save_path = os.path.join(save_dir, f"Batch{batch_num}", "image")
label_save_path = os.path.join(save_dir, f"Batch{batch_num}", "label")
save_2d_image(image, image_save_path)
save_2d_label(label, label_save_path)
```
6. 运行上述代码,成功转换并保存为.png格式的图像和标签将会保存在C:\Users\Administrator\Desktop\2D-LiTS2017文件夹下,其中包含两个子文件夹Batch1和Batch2,每个子文件夹下都有一个image文件夹和一个label文件夹,分别保存着对应的图像和标签。