前言
Resize是图像处理中经常使用的一个操作,就是将图像缩放到一个固定尺寸,比如分类神经网络的输入大小必须保持一致,就要用到resize;比如有的网络训练学习需要整个图像,但计算机显卡资源不足,不能将整幅图像输入网络,这时也可用到resize。
python代码
SimpleITK中一般采用ResampleImageFilter过滤器,需要注意的是resize前后的图像应遵循以下公式,即:originsize * originspacing = newsize * newspacing。
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() //获取原图size
originSpacing = itkimage.GetSpacing() //获取原图spacing
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:\\image' //文件夹路径
image_file = glob(image_path +"/*") //遍历该文件夹下所有的文件
for i in range(len(image_file)):
itkimage = sitk.ReadImage(image_file[i]) //遍历文件夹下每一张图片
itkimgResampled = resize_image_itk(itkimage, (128,128,128),
resamplemethod= sitk.sitkNearestNeighbor)
//目标size为(128,128,128)
//这里要注意:mask用最近邻插值,CT图像用线性插值
sitk.WriteImage(itkimgResampled,'F:\\image' + image_file[i][len(image_path):])