请将我的数据集里面的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 09:13:49 浏览: 29
好的,我可以帮您实现这个需求。您需要安装nibabel库和opencv库。
以下是代码实现:
```python
import os
import cv2
import numpy as np
import nibabel as nib
# 定义窗宽窗位
WW = 200
WL = 50
# 定义数据集路径和保存路径
data_path = 'C:/Users/Administrator/Desktop/LiTS2017'
save_path = 'C:/Users/Administrator/Desktop/2D-LiTS2017'
# 创建保存路径文件夹
if not os.path.exists(save_path):
os.makedirs(save_path)
if not os.path.exists(os.path.join(save_path, 'image')):
os.makedirs(os.path.join(save_path, 'image'))
if not os.path.exists(os.path.join(save_path, 'label')):
os.makedirs(os.path.join(save_path, 'label'))
# 遍历Training Batch 1文件夹中的所有.nii文件
for file in os.listdir(os.path.join(data_path, 'Training Batch 1')):
if file.endswith('.nii'):
# 读取.nii文件
img_nii = nib.load(os.path.join(data_path, 'Training Batch 1', file))
img_array = img_nii.get_fdata()
# 将3D图像转换为2D图像
for i in range(img_array.shape[2]):
img_slice = img_array[:, :, i]
# 调整窗宽窗位
img_slice[img_slice > WL + WW//2] = WL + WW//2
img_slice[img_slice < WL - WW//2] = WL - WW//2
img_slice = (img_slice - WL + WW//2) / WW * 255
img_slice = np.clip(img_slice, 0, 255).astype(np.uint8)
# 保存为png格式的图像
cv2.imwrite(os.path.join(save_path, 'image', f'{file[:-4]}_{i:03d}.png'), img_slice)
# 遍历Training Batch 2文件夹中的所有.nii文件
for file in os.listdir(os.path.join(data_path, 'Training Batch 2')):
if file.endswith('.nii'):
# 读取.nii文件
label_nii = nib.load(os.path.join(data_path, 'Training Batch 2', file))
label_array = label_nii.get_fdata()
# 将3D标签转换为2D标签
for i in range(label_array.shape[2]):
label_slice = label_array[:, :, i]
label_slice[label_slice == 1] = 255
label_slice[label_slice == 2] = 128
label_slice = label_slice.astype(np.uint8)
# 保存为png格式的标签
cv2.imwrite(os.path.join(save_path, 'label', f'{file[:-4]}_{i:03d}.png'), label_slice)
```
这段代码会先创建对应的文件夹,然后分别遍历Training Batch 1和Training Batch 2文件夹中的.nii文件,将3D图像和标签转换为2D的png格式的图像和标签,并保存到对应文件夹中。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)