1、从路径中读取图片
从路径中读取图片
CurvatureFlow实现了一个曲率驱动的图像去噪算法。灰度输入图像中的等亮度轮廓被视为一个水平集。然后使用基于曲率的速度函数进化水平集
将图片转化为一个数组 在将矩阵进行转置,图片的形式 slice 长 宽 通道 转化为 slice 通道 长 宽
def sitk_reader(path):
image_nii = sitk.ReadImage(str(path), sitk.sitkFloat32)
if not 'mask' in str(path) and not 'seg' in str(path) : # only for volumes / scalar images
image_nii = sitk.CurvatureFlow(image1 = image_nii, timeStep = 0.125, numberOfIterations = 3)
#实现了一个曲率驱动的图像去噪算法。灰度输入图像中的等亮度轮廓被视为一个水平集。然后使用基于曲率的速度函数进化水平集:
vol = sitk.GetArrayFromImage(image_nii).transpose(2,1,0)
return vol, None
vol=tio.ScalarImage(path,reader=sitk_reader)
2、将图片转ScalarImage类 LabelMap类
ScalarImage 类可以存储多种信息
vol=tio.ScalarImage(path,reader=sitk_reader)
mask = tio.LabelMap(mask_path,reader=sitk_reader)
3、封装subject 图像对象
subjects=[]
subject_dict = {
'vol' : vol,
'mask' : mask,
'other_info':"....."
}
subject = tio.Subject(subject_dict)
4、subjectDataSet 对象 构建loader
subjects.append(subject)
ds = tio.SubjectsDataset(subjects, transform = get_transform({"unisotropic_sampling":True,"resizedEvaluation":True}))
dl=DataLoader(ds, batch_size=1)
5、transform 操作
##在transform过程中 调整图像大小
#基于单张图像的直方图均衡化操作,允许设置原直方图数值区间(如:(-1000, 1000))或者在不清楚数值情况下的百分比区间(如:(0.5,99.5)),并指定输出强度区间(如:(0.0,1.0))
# 重采样图像 重采样,改变图像像素的物理尺度,需要指定各个维度的像素长度。
#CropOrPad:给定目标维度,如果原图大则裁剪,若小则填充,需要注意这一操作在拆分batch之前进行以同一维度,允许指定pad方法。
#允许通过mask指定裁剪的中心位置(若不指定,则crop操作从各维度中心向外计算,若指定mask,则crop操作会从mask的各维度非0中心向外计算)
## compose 中的图像是从最后一个定义的操作顺序进行到第一个操作