Как использовать функцию 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)