医学影像重采样
1. 重采樣
在醫學圖像預處理的過程中,常常需要對數據進行重采樣,采樣到我們需要的尺度。因為醫學圖像是和真實空間的物理尺寸相對應的。例如一個體素的大小是0.97mm 0.97mm 2.5mm,我們想將體素塊的大小采樣到1mm 1mm 1mm,這樣可以幫助我們進行下一步處理。利用 sitk 可以完成這一項工作。
2. 代碼
import SimpleITK as sitk
"""
resample
"""
def resampleVolume(outspacing,vol):
"""
將體數據重采樣的指定的spacing大小
paras:
outpacing:指定的spacing,例如[1,1,1]
vol:sitk讀取的image信息,這里是體數據
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)
總結
- 上一篇: 社会转型
- 下一篇: C# 委托:把方法组合到一个数组中使用