本文目的
在进行dicom文件分析时,往往会对其进行插值或者重采样处理,可以使用SimpleITK轻松完成。
代码如下
import SimpleITK as sitk
def getDicomSeriesVolumeImage(folderPath):
'''
读取dicom序列文件
:para folderPath:dicom文件夹
:return volumeImage:volume
'''
reader = sitk.ImageSeriesReader()
dicomNames = reader.GetGDCMSeriesFileNames(folderPath)
reader.SetFileNames(dicomNames)
volumeImage = reader.Execute()
return volumeImage
def interpolate(volumeImage, newSpacing):
'''
插值处理
:para volumeImage:volume格式
:para newSpaceing:想要插值或者重采样处理后得到的物理间隔,格式为列表
:return newVolumeImage:插值处理后的到的volume文件
'''
resampleFilter = sitk.ResampleImageFilter()
resampleFilter.SetInterpolator(sitk.sitkLinear) ##此处为线性插值,其他插值方式可以去官网查询
resampleFilter.SetOutputDirection(volumeImage.GetDirection())
resampleFilter.SetOutputOrigin(volumeImage.GetOrigin())
newSpacing = np.array(newSpacing, float)
newSize = volumeImage.GetSize() / newSpacing * volumeImage.GetSpacing()
newSize = newSize.astype(np.int)
resampleFilter.SetSize(newSize.tolist())
resampleFilter.SetOutputSpacing(newSpacing)
newVolumeImage = resampleFilter.Execute(volumeImage)
return newVolumeImage