resample_augmentations.py
- def resample_image_itk(
- ori_img,
- new_spacing=[1.0,1.0,1.0],
- new_size=[0,0,0],
- resamplemethod=sitk.sitkNearestNeighbor):
- """
- @Args:
- :param ori_img: 原始需要对齐的itk图像
- :param new_spacing: 111
- :param new_size: 默认000, 注意非零则自动裁剪
- :param resamplemethod:
- sitk.sitkLinear-线性 - image
- sitk.sitkNearestNeighbor-最近邻 -mask
- @Return:
- 重采样好的itk图像
- """
- ori_size = ori_img.GetSize() # 原始图像大小 [x,y,z]
- ori_spacing = ori_img.GetSpacing() # 原始的体素块尺寸 [x,y,z]
- ori_origin = ori_img.GetOrigin() # 原始的起点 [x,y,z]
- ori_direction = ori_img.GetDirection() # 原始的方向 [冠,矢,横]=[z,y,x]
-
- # 计算改变spacing后的size,用物理尺寸/体素的大小
- if new_size==[0,0,0]:
- new_size[0] = int(ori_size[0]*ori_spacing[0]/new_spacing[0] + 0.5)
- new_size[1] = int(ori_size[1]*ori_spacing[1]/new_spacing[1] + 0.5)
- new_size[2] = int(ori_size[2]*ori_spacing[2]/new_spacing[2] + 0.5)
-
- # itk的方法进行resample
- resampler = sitk.ResampleImageFilter()
- resampler.SetReferenceImage(ori_img) # 需要重新采样的目标图像
- # 设置目标图像的信息
- resampler.SetSize(new_size) # 目标图像大小
- resampler.SetOutputOrigin(ori_origin)
- resampler.SetOutputDirection(ori_direction)
- resampler.SetOutputSpacing(new_spacing)
-
- # 根据需要重采样图像的情况设置不同的dype
- if resamplemethod == sitk.sitkNearestNeighbor:
- resampler.SetOutputPixelType(sitk.sitkUInt16) # 近邻插值用于mask的,保存uint16
- else:
- resampler.SetOutputPixelType(sitk.sitkFloat32) # 线性插值用于PET/CT/MRI之类的,保存float32
- resampler.SetTransform(sitk.Transform(3, sitk.sitkIdentity))
- resampler.SetInterpolator(resamplemethod)
- return resampler.Execute(ori_img) # 得到重新采样后的图像