醫學影像重采樣


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM