请将我的数据集的3D图像变成2D的三通道png格式图像(调整窗宽和窗位,以突出所需区域的细节),数据集的3D标签变成(要求背景灰度值0、肝脏灰度值1、肝脏肿瘤灰度值2的)2D的png格式标签。 LiTS2017数据集里面包含Training Batch 1和Training Batch 2两个文件夹。Training Batch 1文件夹里面有图像,图像的拓展名为.nii。Training Batch 2文件夹里面有标签,标签拓展名为.nii。 LiTS2017数据集的路径为C:\Users\Administrator\Desktop\LiTS2017。 保存路径为C:\Users\Administrator\Desktop\2D-LiTS2017,请帮我创建好对应文件夹,并且将转换好的数据保存到对应的文件夹。
时间: 2024-02-03 14:13:26 浏览: 31
好的,您需要安装以下库:SimpleITK, numpy, os, cv2。
以下是代码实现:
```python
import SimpleITK as sitk
import numpy as np
import os
import cv2
# 创建保存转换后数据的文件夹
save_folder = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
if not os.path.exists(save_folder):
os.makedirs(save_folder)
os.makedirs(os.path.join(save_folder, 'image'))
os.makedirs(os.path.join(save_folder, 'label'))
# 加载数据集
data_folder = 'C:/Users/Administrator/Desktop/LiTS2017'
image_folder = os.path.join(data_folder, 'Training Batch 1')
label_folder = os.path.join(data_folder, 'Training Batch 2')
# 窗宽窗位设置
WW = 400
WL = 40
# 循环处理每个数据
for file in os.listdir(image_folder):
# 加载3D图像
itk_img = sitk.ReadImage(os.path.join(image_folder, file))
img_arr = sitk.GetArrayFromImage(itk_img) # z, y, x
origin = np.array(itk_img.GetOrigin())[::-1] # x, y, z
spacing = np.array(itk_img.GetSpacing())[::-1] # x, y, z
# 加载3D标签
label_file = file.replace('volume', 'segmentation')
label_itk_img = sitk.ReadImage(os.path.join(label_folder, label_file))
label_arr = sitk.GetArrayFromImage(label_itk_img) # z, y, x
# 遍历每个切片,转换为2D图像
for z in range(img_arr.shape[0]):
# 读取当前切片的图像和标签
img_slice = img_arr[z, :, :]
label_slice = label_arr[z, :, :]
# 计算窗宽窗位
upper, lower = WL + WW / 2, WL - WW / 2
img_slice = np.clip(img_slice, lower, upper)
img_slice = (img_slice - lower) / WW
# 转换为三通道图像
img_slice_3ch = np.zeros((img_slice.shape[0], img_slice.shape[1], 3), dtype=np.uint8)
img_slice_3ch[:, :, 0] = (img_slice * 255).astype(np.uint8)
img_slice_3ch[:, :, 1] = (img_slice * 255).astype(np.uint8)
img_slice_3ch[:, :, 2] = (img_slice * 255).astype(np.uint8)
# 设置标签值
label_slice[label_slice == 1] = 255
label_slice[label_slice == 2] = 128
# 保存图像和标签
cv2.imwrite(os.path.join(save_folder, 'image', f'{file[:-4]}_{z:03d}.png'), img_slice_3ch)
cv2.imwrite(os.path.join(save_folder, 'label', f'{label_file[:-4]}_{z:03d}.png'), label_slice)
```
运行以上代码后,您将会得到一个2D-LiTS2017文件夹,其中包含两个子文件夹:image和label,分别存储转换好的2D图像和标签。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)