我正在做一个关于医学图像分割的项目,并且在对齐蒙版和病变时遇到了麻烦。我正在尝试使用该包根据其元数据SimpleITK
更正掩码 ( ) 文件。.nrrd
我假设所有图像都具有相同的元数据(间距、方向、原点),由代码中的默认常量指示。
附加的代码没有做我想要的——而不是少量移动掩码,它只是将掩码中的每个元素设置为零。有人知道我做错了什么吗?是ResampleImageFilter
我需要的转换吗?
我也可以使用其他库的解决方案。
import SimpleITK as sitk
import numpy as np
DEFAULT_DIRECTION = (1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)
DEFAULT_SPACE = (1., 1., 1.)
DEFAULT_ORIGIN = (0.0, 0.0, 0.0)
def projectImage(image, mask):
image.SetSpacing(DEFAULT_SPACE)
image.SetDirection(DEFAULT_DIRECTION)
image.SetOrigin(DEFAULT_ORIGIN)
resample = sitk.ResampleImageFilter()
resample.SetReferenceImage(image)
resample.SetInterpolator(sitk.sitkNearestNeighbor)
resampledimg = resample.Execute(mask)
return resampledimg
image = np.load('SAM.npy') # (54, 512, 512)
mask_sitk = sitk.ReadImage('SAM.nrrd')
sitk_image = sitk.GetImageFromArray(image) # Transform fails even if I transpose image.
alignedmask = projectImage(sitk_image, mask_sitk)
alignedmasknpy = sitk.GetArrayFromImage(alignedmask).T # (54, 512, 512)
mask_arr = sitk.GetArrayFromImage(mask_sitk) # (512, 512, 54)
imgnpy = sitk.GetArrayFromImage(sitk_image).T # (54, 512, 512)
print(alignedmasknpy.max()) # 0
print(mask_arr.max()) # 1