SlideDataset代码学习
创建嵌套字典,用来存储数据
dataset = {}
'''...得到file_id'''
dataset[file_id]={} # dataset={"file_id":{}}
'''...得到file_name、img'''
dataset[file_id][file_name]=img # dataset={ "file_id": {"file_name": array[...]} }
将数据拼接在一起
self.images=[]
for image_set in dataset:
try:
self.images.append(
np.block([
dataset[imageset]["SHG"],
dataset[image_set]["BF"]
]).astype(np.float32)
)
Tensor保存为nii文件
import nibabel as nib
new_nii = nib.Nifti1Image(data.numpy(), np.eye(4)) # np.eye(4)代表仿射变换参数
nib.save(new_nii, 'test_nii')
自定义Dataset的transform
先定义Transform的类
import scipy.ndimage
class Resize:
def __init__(self, shape, mode="constant", ori_shape=(240,240,155)):
'''定义用到的参数'''
self.factors = (
shape[0] / orig_shape[0],
shape[1] / orig_shape[1],
shape[2] / orig_shape[2]
)
def __call__(self, img)
'''只有一个参数img传入,下面是具体操作方式,return一个img'''
img = scipy.ndimage.zoom(img, self.factors, mode = self.mode)
mean = img.mean()
std = img.std()
return (img - mean) / std
使用时在Dataset类里加入transform类的调用
class MyDataset:
def __init__(self,...):
'''此处定义+计算各种类属性'''
def __getitem__(self, idx):
return self.get(idx)
def get(self, idx, augment=True):
if augment and self.transform:
return self.transform(self.images[idx]) # 自定义的变换类相当于MyDataset的某属性
return self.images[idx]
维度转换
tensorA.permute(a, b, c) # a:原tensor第一个维度应该去的位置