使用SimpleITK 进行重采样核心代码
def ResampleBySize_view(path1, path2, name, rowSize, colSize):
img = sitk.ReadImage(path1 + name)
# myshow(img,'1')
# pix_resampled = (sitk.GetArrayFromImage(img).astype(dtype=float))
# plot_3d(pix_resampled,0)
original_spacing = img.GetSpacing()
print('original_spacing:', original_spacing)
original_size = img.GetSize()
print('original_size:', original_size)
# VolSize = original_size
rowSize, colSize = rowSize, colSize
factor3 =1
factor1 = rowSize / img.GetSize()[0]
factor2 = colSize / img.GetSize()[1]
factor = [factor1, factor2, factor3]
# we rotate the image according to its transformation using the direction and according to the final spacing we want
newSize = np.asarray(img.GetSize()) * factor +0.00001
dstRes = np.asarray(img.GetSpacing()) / factor
print(dstRes)
print(newSize)
# ret = np.zeros([newSize[0],newSize[1], newSize[2]], dtype=np.float32)
newSize = newSize.astype(dtype=int).tolist()
print(newSize)
T = sitk.AffineTransform(3)
# T.SetMatrix(img.GetDirection())
# T.Scale(factor)
# T.scale(factor)
resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(img)
resampler.SetOutputSpacing([dstRes[0], dstRes[1], dstRes[2]])
resampler.SetSize(newSize)
method = sitk.sitkLinear
resampler.SetInterpolator(method)
resampler.SetTransform(T)
imgResampled = resampler.Execute(img)
new_spacing = imgResampled.GetSpacing()
print('new_spacing:', new_spacing)
print('new_size:', imgResampled.GetSize())
path2 = path2
sitk.WriteImage(imgResampled, path2 + name)