将LiTS2017数据集处理成2D的png格式,标签是灰度图背景灰度值0肝脏1肝脏肿瘤2,给出完整代码
时间: 2024-05-10 10:18:22 浏览: 167
以下是将LiTS2017数据集处理为2D png格式,并将标签转换为灰度图的完整代码。需要注意的是,本代码中使用的是Python3.6及以上版本。
```python
import os
import numpy as np
import SimpleITK as sitk
from PIL import Image
# 数据集路径
data_path = '/path/to/LiTS2017'
# 保存路径
save_path = '/path/to/save'
# 处理函数
def process_data(file_path, save_path):
# 读取nii文件
itk_img = sitk.ReadImage(file_path)
img_array = sitk.GetArrayFromImage(itk_img)
# 获取每个切片的像素大小、间距和方向
spacing = itk_img.GetSpacing()
origin = itk_img.GetOrigin()
direction = itk_img.GetDirection()
# 将像素值缩放到0-255之间
img_array = (img_array / np.max(img_array)) * 255
img_array = img_array.astype(np.uint8)
# 将标签转换为灰度图
label_array = np.zeros_like(img_array)
label_array[img_array == 0] = 0 # 背景
label_array[img_array == 1] = 1 # 肝脏
label_array[img_array == 2] = 2 # 肝脏肿瘤
# 保存2D png格式的图像和标签
for i in range(img_array.shape[0]):
img = Image.fromarray(img_array[i])
img.save(os.path.join(save_path, f'{i+1:03d}.png'))
label = Image.fromarray(label_array[i])
label.save(os.path.join(save_path, f'label_{i+1:03d}.png'))
print(f'{file_path} processed successfully.')
# 遍历数据集并处理数据
for file_name in os.listdir(data_path):
if file_name.endswith('.nii'):
file_path = os.path.join(data_path, file_name)
save_folder = os.path.join(save_path, file_name.split('.')[0])
if not os.path.exists(save_folder):
os.makedirs(save_folder)
process_data(file_path, save_folder)
```
在运行代码前需要先安装SimpleITK和Pillow库,可使用以下命令进行安装:
```
pip install SimpleITK Pillow
```
执行完毕后,数据集将被处理成2D的png格式,并且标签将被转换为灰度图,保存在指定的路径下。
阅读全文