由于blabla问题,需要对医学图像降采样,增加层厚减少数据量。
主要使用SimpleITK完成,程序如下:
import numpy as np
import SimpleITK as sitk
def resize_image_itk(itkimage, newSpacing, originSpcaing, resamplemethod=sitk.sitkNearestNeighbor):
"""
image resize withe sitk resampleImageFilter
:param itkimage:
:param newSpacing:such as [1,1,1]
:param resamplemethod:
:return:
"""
newSpacing = np.array(newSpacing, float)
# originSpcaing = itkimage.GetSpacing()
resampler = sitk.ResampleImageFilter()
originSize = itkimage.GetSize()
factor = newSpacing / originSpcaing
newSize = originSize / factor
newSize = newSize.astype(np.int)
resampler.SetReferenceImage(itkimage) # 将输出的大小、原点、间距和方向设置为itkimage
resampler.SetOutputSpacing(newSpacing.tolist()) # 设置输出图像间距
resampler.SetSize(newSize.tolist()) # 设置输出图像大小
resampler.SetTransform(sitk.Transform(3, sitk.sitkIdentity))
resampler.SetInterpolator(resamplemethod)
itkimgResampled = resampler.Execute(itkimage)
return itkimgResampled
def DownsamplingDicomFixedResolution():
src_path = "待采样路径"
result_path = "采样后路径"
path_list = [1]
newthickspacing = 5.0 # 层厚
for subsetindex in path_list:
dir_path = str(subsetindex)
img = sitk.ReadImage(result_path + dir_path + ".nii.gz")
Spacing = seg.GetSpacing()
print(Spacing)
thickspacing, widthspacing, heightspacing = Spacing[2], Spacing[0], Spacing[1]
srcitk = resize_image_itk(img, newSpacing=(widthspacing, heightspacing, newthickspacing),
originSpcaing=(widthspacing, heightspacing, thickspacing),
resamplemethod=sitk.sitkLinear)
print(src_path + str(subsetindex) + ".nii.gz")
sitk.WriteImage(srcitk, result_path + str(subsetindex) + ".nii.gz")
DownsamplingDicomFixedResolution()