Medical Imaging resampling

1. resampling

During medical image preprocessing is often necessary to resample the data, we need to scale the samples. Because medical images and physical dimensions are real space corresponding to. For example, a voxel size is 0.97mm 0.97mm 2.5mm, we want to sample block to the voxel size 1mm 1mm 1mm, this helps further processing. Use sitkto complete this work.

2. Code

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)

Guess you like

Origin www.cnblogs.com/WAoyu/p/12006810.html