Жесткая регистрация SimpleElastix 3D не может найти такое же изображение
Я некоторое время пытался получить базовую регистрацию, работающую с SimpleElastix, но я не могу заставить ее работать вообще, независимо от используемых настроек. Обратите внимание, что я пытаюсь сравнить SimpleElastix с другими методами, поэтому использование другой библиотеки не вариант.
Вот задача, которую я сейчас пытаюсь выполнить:
- Сделать 3D УЗИ плода (img_scan)
- Замаскируйте часть сканирования и примените жесткое преобразование (img_structure).
- Используйте SimpleElastix для регистрации img_structure в img_scan.
Так как img_structure был создан из img_scan, я точно знаю, что есть идеальное решение для регистрации. Однако, если img_structure не находится очень близко к своему исходному положению, SimpleElastix, кажется, вообще ничего не делает. Например, если я перевожу img_structure только по одной оси, это работает. Но если я поверну его только на 90 градусов, он выйдет из строя, хотя их центры в основном одинаковы. Чтобы уточнить, под отказом я подразумеваю, что он возвращает слегка преобразованную структуру img_structure, но далеко не фактическое решение]
Это основной код, с которого я начал:
elastixImageFilter = sitk.ElastixImageFilter()
elastixImageFilter.SetFixedImage(fixed)
elastixImageFilter.SetMovingImage(moving)
elastixImageFilter.SetMovingMask(mask_moving)
elastixImageFilter.SetFixedMask(mask_fixed)
elastixImageFilter.SetParameterMap(sitk.GetDefaultParameterMap("rigid"))
elastixImageFilter.Execute()
Что я пробовал:
- С/без масок (или их комбинация)
- Различная максимальная длина шага
- Другой ImageSampler
- Аффинный вместо жесткого
- Различные оптимизаторы
Что я мог упустить?