Как использовать функцию SimpleITK.WarpImageFilter в Python

Я не могу найти документацию по Python для этой функции.

Я попробовал следующий код, но вывод абсолютно неверный.

warp = sitk.WarpImageFilter()
warp.SetInterpolator(sitk.sitkLinear)
out = warp.Execute(reference_img, transform_img)

это дает мне именно reference_img, но не преобразованное изображение.

Вы когда-нибудь использовали эту функцию? Не могли бы вы помочь мне в этом вопросе?

1 ответ

WarpImageFilter, как и все другие фильтры SimpleITK, строго протестирован в инфраструктуре сборки SimpleITK. Обтекание фильтра включает описания нескольких тестов, в которых проверяются результаты и проверяется поведение на разных языках. Кроме того, в SimpleITK все фильтры автоматически тестируются на согласованность нескольких вариантов поведения, что достигается с помощью процесса генерации кода SimpleITK.

ResampleImageFilter теперь является предпочтительным методом по сравнению с WarpImageFilter. Он применяет любое преобразование для повторной выборки изображения, где DisplacementFieldTransform содержит изображение поля смещения. Это отличается от WarpImageFilter который просто принимает поле смещения.

Кажется, есть некоторая путаница для "контрольного изображения". И ресэмпл, и фильтр деформации должны знать выходную информацию для изображения. Это включает источник вывода, размер вывода, интервал вывода и направление вывода. Они могут быть установлены вручную индивидуально или от "эталонного изображения". Здесь ResampleImageFilter.SetRefenceImage() и WarpImageFilter.SetOutputParametersFromImage методы, которые делают то же самое. опорное изображение является необязательным.

Пример использования WarpImageFilter используя данные теста SimpleITK:

img = sitk.ReadImage("cthead1-Float.mha")
dis = sitk.ReadImage("cthead1-dis1.nrrd")
warper = sitk.WarpImageFilter()
warper.SetOutputParameteresFromImage(img)
out = warper.Execute(img,dis)

Вот та же операция, выполненная с ResampleImageFilter. Это требует преобразования изображения поля смещения в float64 для использования с преобразованием:

resampler = sitk.ResampleImageFilter()
resampler.SetReferenceImage(img)
dis_tx = sitk.DisplacementFieldTransform(sitk.Cast(dis,sitk.sitkVectorFloat64))
resampler.SetTransform(dis_tx)
out = resampler.Execute(img)
Другие вопросы по тегам