Resize是图像处理中经常使用的一个操作,就是将图像缩放到一个固定尺寸,比如分类神经网络的输入大小必须保持一致,就要用到resize;比如有的网络训练学习需要整个图像,但计算机显卡资源不足,不能将整幅图像输入网络,这时也可用到resize,废话不多说,直接看代码,用就是了:
import numpy as np
import SimpleITK as sitk
from glob import glob
def resize_image_itk(itkimage, newSize, resamplemethod=sitk.sitkNearestNeighbor):
resampler = sitk.ResampleImageFilter()
originSize = itkimage.GetSize() # 原来的体素块尺寸
originSpacing = itkimage.GetSpacing()
newSize = np.array(newSize,float)
factor = originSize / newSize
newSpacing = originSpacing * factor
newSize = newSize.astype(np.int) #spacing肯定不能是整数
resampler.SetReferenceImage(itkimage) # 需要重新采样的目标图像
resampler.SetSize(newSize.tolist())
resampler.SetOutputSpacing(newSpacing.tolist())
resampler.SetTransform(sitk.Transform(3, sitk.sitkIdentity))
resampler.SetInterpolator(resamplemethod)
itkimgResampled = resampler.Execute(itkimage) # 得到重新采样后的图像
return itkimgResampled
image_path = 'F:\lung_lobe\data\data\mask/'
image_file = glob(image_path + '*.nrrd')
for i in range(len(image_file)):
itkimage = sitk.ReadImage(image_file[i])
itkimgResampled = resize_image_itk(itkimage, (128,128,64),resamplemethod= sitk.sitkNearestNeighbor) #这里要注意:mask用最近邻插值,CT图像用线性插值
sitk.WriteImage(itkimgResampled,'F:\lung_lobe\data\data\mask_resize/' + image_file[i][len(image_path):])
这里有两个点需要注意:
(1)图像的Spacing不要设置成整数;
(2)插值过程中,mask图像用最近邻插值,CT图像用线性插值
本文深入讲解了图像处理中Resize操作的实现方法,特别是在神经网络输入标准化及资源受限情况下的应用。通过具体代码示例,展示了如何使用SimpleITK库进行图像尺寸调整,包括对mask和CT图像采用不同插值方式的技巧。

2万+

被折叠的 条评论
为什么被折叠?



