请将我的数据集的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 08:13:27 浏览: 60
mnist数据集转为png格式图片
5星 · 资源好评率100%
好的,我可以帮您实现这个任务。首先,您需要安装以下库:`numpy`、`SimpleITK`和`os`。
以下是代码实现:
```python
import numpy as np
import SimpleITK as sitk
import os
# 调整窗宽窗位函数
def window_transform(ct_array, wl, ww):
"""
将CT值转换为灰度值
"""
min_value = wl - ww // 2
max_value = wl + ww // 2
ct_array[ct_array < min_value] = min_value
ct_array[ct_array > max_value] = max_value
ct_array = (ct_array - min_value) / ww * 255.0
return ct_array
# 创建对应文件夹
if not os.path.exists('C:/Users/Administrator/Desktop/2D-LiTS2017/train/image/'):
os.makedirs('C:/Users/Administrator/Desktop/2D-LiTS2017/train/image/')
if not os.path.exists('C:/Users/Administrator/Desktop/2D-LiTS2017/train/label/'):
os.makedirs('C:/Users/Administrator/Desktop/2D-LiTS2017/train/label/')
# 读取数据集
ct_path = 'C:/Users/Administrator/Desktop/LiTS2017/Training Batch 1/'
seg_path = 'C:/Users/Administrator/Desktop/LiTS2017/Training Batch 2/'
ct_list = os.listdir(ct_path)
seg_list = os.listdir(seg_path)
ct_list.sort()
seg_list.sort()
# 遍历数据集
for i in range(len(ct_list)):
ct_file = ct_list[i]
seg_file = seg_list[i]
ct = sitk.ReadImage(ct_path + ct_file)
seg = sitk.ReadImage(seg_path + seg_file)
ct_array = sitk.GetArrayFromImage(ct)
seg_array = sitk.GetArrayFromImage(seg)
# 将标签中肝脏和肝脏肿瘤的灰度值设置为1和2
seg_array[seg_array == 1] = 1
seg_array[seg_array == 2] = 2
# 遍历每一张切片
for j in range(ct_array.shape[0]):
ct_slice = ct_array[j, :, :]
seg_slice = seg_array[j, :, :]
# 调整窗宽窗位
ct_slice = window_transform(ct_slice, 50, 350)
# 将背景灰度值设为0
seg_slice[seg_slice > 0] = 1
# 将CT图像和标签保存为png格式
ct_png = sitk.GetImageFromArray(ct_slice)
ct_png = sitk.Cast(ct_png, sitk.sitkUInt8)
sitk.WriteImage(ct_png, 'C:/Users/Administrator/Desktop/2D-LiTS2017/train/image/' + ct_file[:-4] + '_' + str(j) + '.png')
seg_png = sitk.GetImageFromArray(seg_slice)
seg_png = sitk.Cast(seg_png, sitk.sitkUInt8)
sitk.WriteImage(seg_png, 'C:/Users/Administrator/Desktop/2D-LiTS2017/train/label/' + seg_file[:-4] + '_' + str(j) + '.png')
print('已处理完第{}个CT图像的第{}张切片'.format(i+1, j+1))
```
这段代码将会把数据集中的所有CT图像和标签转换成2D的png格式,并保存在指定路径下的对应文件夹。注意,这个程序会运行较长时间,具体时间取决于您的数据集大小。
阅读全文