1. 重采样
在医学图像预处理的过程中,常常需要对数据进行重采样,采样到我们需要的尺度。因为医学图像是和真实空间的物理尺寸相对应的。例如一个体素的大小是0.97mm 0.97mm 2.5mm,我们想将体素块的大小采样到1mm 1mm 1mm,这样可以帮助我们进行下一步处理。利用 sitk
可以完成这一项工作。
2. 代码
import SimpleITK as sitk """ resample """ def resampleVolume(outspacing,vol): """ 将体数据重采样的指定的spacing大小\n paras: outpacing:指定的spacing,例如[1,1,1] vol:sitk读取的image信息,这里是体数据\n return:重采样后的数据 """ outsize = [0,0,0] inputspacing = 0 inputsize = 0 inputorigin = [0,0,0] inputdir = [0,0,0] #读取文件的size和spacing信息 inputsize = vol.GetSize() inputspacing = vol.GetSpacing() transform = sitk.Transform() transform.SetIdentity() #计算改变spacing后的size,用物理尺寸/体素的大小 outsize[0] = int(inputsize[0]*inputspacing[0]/outspacing[0] + 0.5) outsize[1] = int(inputsize[1]*inputspacing[1]/outspacing[1] + 0.5) outsize[2] = int(inputsize[2]*inputspacing[2]/outspacing[2] + 0.5) #设定重采样的一些参数 resampler = sitk.ResampleImageFilter() resampler.SetTransform(transform) resampler.SetInterpolator(sitk.sitkLinear) resampler.SetOutputOrigin(vol.GetOrigin()) resampler.SetOutputSpacing(outspacing) resampler.SetOutputDirection(vol.GetDirection()) resampler.SetSize(outsize) newvol = resampler.Execute(vol) return newvol def main(): #读文件 vol = sitk.Image(sitk.ReadImage("input.mha")) #重采样 newvol = resampleVolume([1,1,1],vol) #写文件 wriiter = sitk.ImageFileWriter() wriiter.SetFileName("output.mha") wriiter.Execute(newvol)