SimpleITK: как переводить маску в соответствии с исходной точкой, интервалом, направлением по умолчанию

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

person Sam Shleifer    schedule 05.05.2019    source источник
comment
resample нужно указать, как выполнять ресамплинг - какое преобразование требуется. Если ваши данные не находятся в источнике (0,0,0), он не знает, как переместить изображение в указанное вами пространство. В результате это не дает результата. Вам необходимо предоставить преобразование - см. Здесь simpleitk.github.io/SPIE2018_COURSE/images_and_resampling.pdf/ а>   -  person g.stevo    schedule 10.05.2019


Ответы (1)


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

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

Например:

mask.CopyInformation(image)

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

person Czorio    schedule 25.05.2019