变成
注意是针对nii图像,普通的图像用opencv就能做。
相当于是图像缩放的操作,并不是图像裁剪 。这是为了将数据集统一裁剪至同一尺寸,便于网络设计。
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 = r"D:/Datasets/Lung/Ieee8023/Lung_Mask/coronacases_001.nii.gz"
itkimage = sitk.ReadImage(image_path)
# 这里要注意:mask用最近邻插值,CT图像用线性插值
itkimgResampled = resize_image_itk(itkimage, (160, 224, 192), resamplemethod = sitk.sitkLinear) # 线性插值
# itkimgResampled = resize_image_itk(itkimage, (128,128,64),resamplemethod= sitk.sitkNearestNeighbor)
sitk.WriteImage(itkimgResampled, r"D:/Datasets/Lung/Ieee8023/resize_label/coronacases_001.nii.gz")'''
#带循环的部分
image_path = r"D:/Datasets/LIVER/RCN/nii/val_image/"
image_file = glob(image_path + '*.nii')
for i in range(len(image_file)):
itkimage = sitk.ReadImage(image_file[i])
print(image_file[i])
itkimgResampled = resize_image_itk(itkimage, (160, 192, 224), resamplemethod = sitk.sitkLinear) #这里要注意:mask用最近邻插值,CT图像用线性插值
sitk.WriteImage(itkimgResampled,'D:/Datasets/LIVER/RCN/nii/resize_image/' + image_file[i][len(image_path):])