class Padding(object):
"""
Add padding to the image if size is smaller than patch size
Args:
output_size (tuple or int): Desired output size. If int, a cubic volume is formed
"""
def __init__(self, output_size):
self.name = 'Padding'
assert isinstance(output_size, (int, tuple, list))
if isinstance(output_size, int):
self.output_size = (output_size, output_size, output_size)
else:
assert len(output_size) == 2
self.output_size = output_size
assert all(i > 0 for i in list(self.output_size))
def __call__(self,sample):
image, label = sample['image'], sample['label']
size_old = image[0].GetSize()
if (size_old[0] >= self.output_size[0]) and (size_old[1] >= self.output_size[1]):
return sample
else:
output_size = list(self.output_size)
if size_old[0] > self.output_size[0]:
output_size[0] = size_old[0]
if size_old[1] > self.output_size[1]:
output_size[1] = size_old[1]
output_size = tuple(output_size)
for image_channel in range(len(image)):
resampler = sitk.ResampleImageFilter()
resampler.SetOutputSpacing(image[image_channel].GetSpacing())
resampler.SetSize(output_size)
# resample on image
resampler.SetInterpolator(sitk.sitkLinear)#线性插值
resampler.SetOutputOrigin(image[image_channel].GetOrigin())
resampler.SetOutputDirection(image[image_channel].GetDirection())
image[image_channel] = resampler.Execute(image[image_channel])
# resample on label
resampler = sitk.ResampleImageFilter()
resampler.SetOutputSpacing(image[image_channel].GetSpacing())
resampler.SetSize(output_size)
resampler.SetInterpolator(sitk.sitkNearestNeighbor)#最近邻插值
resampler.SetOutputOrigin(label.GetOrigin())
resampler.SetOutputDirection(label.GetDirection())
label = resampler.Execute(label)
return {'image': image, 'label': label}
医学图像预处理----Padding
最新推荐文章于 2023-11-27 19:56:46 发布