整个实验过程包括:
1、数据集获取:https://zenodo.org/record/3757476
2、数据预处理:从.nii文件中提取包含目标区域的切片,如果不是很清楚医学图像格式的处理,也可以将.nii文件转换成png格式的图片,.nii代码转png图片代码:
import nibabel as nib
import numpy as np
import imageio
import os
def makedir(path):
if os.path.exists(path):
pass
else:
os.mkdir(path)
def read_niifile(niifile): # 读取niifile文件
img = nib.load(niifile) # 下载niifile文件(其实是提取文件)
img_fdata = img.get_fdata() # 获取niifile数据
return img_fdata
def save_fig(file,savepicdir,name): # 保存为图片
fdata = read_niifile(file) # 调用上面的函数,获得数据
# (x, y, z) = fdata.shape # 获得数据shape信息:(长,宽,维度-切片数量)
# for k in range(z):
silce = fdata[:, :, i] # 三个位置表示三个不同角度的切片
imageio.imwrite(os.path.join(savepicdir, '{}.png'.format(name)), silce)
# 将切片信息保存为png格式
def getName(na):
for i in range(0,len(na)):
if na[i]=='_':
return na[:i]
#传入nii.gz文件所在文件夹
niiGzFolder='/.nii文件夹路径/'
niiGzNames=os.listdir(niiGzFolder)
#存放解压后的分割图片
target='/存放png图片的路径/'
for i in range(0,len(niiGzNames)):
niiGzName=niiGzNames[i]
name=getName(niiGzName)
pred="pred"
gt="gt"
img="img"
if pred in niiGzName:
path=target+pred+'/'
if gt in niiGzName:
path=target+gt+'/'
if img in niiGzName:
path=target+img+'/'
makedir(path)
save_fig(niiGzFolder+niiGzName,path,name)
print("finish",niiGzName)
3、导入自己的数据集,写自己的dataloder,不妨命名为dataset.py,代码如下:
import torch
import cv2
import os
import glob
from torch.utils.data import Dataset
import random
class Loader(Dataset):
def __init__(self, data_path):
# print(data_path)
images = []
image_root = os.path.join(data_path,'images')
# print(image_root)
for image_name in os.listdir(image_root):
image_path = os.path.join(image_root, image_name)
images.append(image_path)
# 初始化函数,读取所有data_path下的图片
self.data_path =