在做医学图像配准时,需要将数据集的三维医学图像进行重采样。
在对“EMPIRE10”数据集进行预处理时,将每幅图像都重采样为192*160*192。
“EMPIRE10”数据集用于做肺部图像配准的挑战数据集
import SimpleITK as sitk
import os
"""
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]
outspacing = [1, 1, 1]
# 读取文件的size和spacing信息
inputsize = vol.GetSize()
inputspacing = vol.GetSpacing()
print(inputsize)
print(inputspacing)
transform = sitk.Transform()
transform.SetIdentity()
# 需要重采样后的尺寸大小
outsize[0] = 192
outsize[1] = 160
outsize[2] = 192
# 计算得到改变size后的spacing
outspacing[0] = float(inputsize[0] / 192)
outspacing[1] = float(inputsize[1] / 160)
outspacing[2] = float(inputsize[2] / 192)
# 设定重采样的一些参数
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():
# 读文件
file = './EMPIRE10/empire_export_data' # 你的nii或者nii.gz文件路径
savepath = './EMPIRE10/after'
for filename in os.listdir(os.path.join(file)):
niipath = os.path.join(os.path.join(file), filename)
vol = sitk.Image(sitk.ReadImage(niipath))
print(filename)
print(niipath)
print(vol)
# 重采样
newvol = resampleVolume([1, 1, 1], vol)
# 写文件
wriiter = sitk.ImageFileWriter()
wriiter.SetFileName( os.path.join(savepath, '{}''{}'.format("output-",filename)))
wriiter.Execute(newvol)
if __name__ == '__main__':
main()