请将我的数据集里面的3D图像变成2D、RGB三通道、的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:14:57 浏览: 55
好的,以下是Python代码实现该功能:
```python
import os
import numpy as np
import nibabel as nib
import cv2
# 定义窗宽窗位
WW = 400
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
for file in os.listdir(os.path.join(data_path, 'Training Batch 1')):
if file.endswith('.nii'):
# 读取数据
img_path = os.path.join(data_path, 'Training Batch 1', file)
img_data = nib.load(img_path).get_fdata()
# 将3D图像变为2D图像
for i in range(img_data.shape[2]):
img_slice = img_data[:, :, i]
img_slice = np.transpose(img_slice, axes=[1, 0]) # 转置,保证图像方向正确
img_slice = cv2.resize(img_slice, (512, 512)) # 重新调整大小为512*512
img_slice = cv2.normalize(img_slice, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U) # 归一化到0-255之间
img_slice = cv2.cvtColor(img_slice, cv2.COLOR_GRAY2RGB) # 转为RGB三通道图像
# 保存图像
save_name = os.path.join(save_path, 'image', file[:-4] + '_' + str(i+1).zfill(3) + '.png')
cv2.imwrite(save_name, img_slice)
# 处理Training Batch 2
for file in os.listdir(os.path.join(data_path, 'Training Batch 2')):
if file.endswith('.nii'):
# 读取数据
img_path = os.path.join(data_path, 'Training Batch 2', file)
img_data = nib.load(img_path).get_fdata()
# 将3D标签变为2D标签
for i in range(img_data.shape[2]):
img_slice = img_data[:, :, i]
img_slice = np.transpose(img_slice, axes=[1, 0]) # 转置,保证图像方向正确
img_slice = cv2.resize(img_slice, (512, 512)) # 重新调整大小为512*512
# 取肝脏和肝脏肿瘤区域
img_slice[img_slice == 1] = 255
img_slice[img_slice == 2] = 255
# 将标签转为灰度图像
img_slice[img_slice == 0] = 128
img_slice[img_slice == 255] = 255
# 保存标签
save_name = os.path.join(save_path, 'label', file[:-4] + '_' + str(i+1).zfill(3) + '.png')
cv2.imwrite(save_name, img_slice)
```
这段代码可以将`C:/Users/Administrator/Desktop/LiTS2017`路径下的数据集转换为2D、RGB三通道、png格式的图像,并且保存到`C:/Users/Administrator/Desktop/2D-LiTS2017`路径下。其中,Training Batch 1文件夹包含图像,Training Batch 2文件夹包含标签。转换后的图像和标签分别保存在`image`和`label`文件夹下,文件名为原始文件名加上切片号。
阅读全文