SimpleITK: Как перевести маску на основе исходного положения, расстояния, направления по умолчанию - PullRequest
0 голосов
/ 05 мая 2019

Я делаю проект по сегментации медицинского изображения и у меня проблемы с выравниванием масок и повреждений. Я пытаюсь использовать пакет 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

1 Ответ

0 голосов
/ 26 мая 2019

Если вы на самом деле не собираетесь регистрировать изображения.

Если мне нужно перетаскивать изображения в одно и то же пространство, я просто использую функцию CopyInformation().

Например:

mask.CopyInformation(image)

Это должно устранить необходимость в жестком кодировании пространств изображений, а также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...