0

我正在做一个关于医学图像分割的项目,并且在对齐蒙版和病变时遇到了麻烦。我正在尝试使用该包根据其元数据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
4

1 回答 1

1

假设您实际上并不打算注册图像。

如果我需要将图像整理到同一个空间中,我只需使用该CopyInformation()功能。

例如:

mask.CopyInformation(image)

这也应该消除对图像空间进行硬编码的需要。

于 2019-05-25T22:48:57.890 回答