itk Зарегистрируйте два 3D изображения с разными размерами слишком медленно

0

Я регистрирую два 3D-изображения itk. Фиксированный - 240 * 240 * 285, а движущийся - 80 * 80 * 17. Я пытаюсь использовать affineTransform для их регистрации, но обнаружил, что разница в размерах изображений слишком велика и регистрация не работает. Чтобы перепрограммировать движущееся изображение и установить его размер на фиксированный, используя линейный интерполятор.

Но проблема возникает. Скорость регистрации очень медленная, и для завершения одного набора регистрации данных требуется больше часа. Но у меня 40 комплектов!

Может ли кто-нибудь продвигать более быстрый способ регистрации или я сделал что-то неправильно в регистрации?

Вот код повторной выборки:

ResampleFilterType::Pointer movingResampler = ResampleFilterType::New();
InterpolatorType::Pointer   movingInterpolator  = InterpolatorType::New();
movingResampler->SetInput(movingImg);
movingResampler->SetInterpolator(movingInterpolator);
//set the parameters from the fixed image
movingResampler->SetSize(fixedImg->GetLargestPossibleRegion().GetSize());
movingResampler->Update();

Вот код оптимизатора:

optimizer->SetMaximumStepLength(0.01);
optimizer->SetMinimumStepLength(0.0001);
optimizer->SetNumberOfIterations(300);

optimizer->MinimizeOn();

Большое спасибо, Арвин

Теги:
itk

1 ответ

1

Повторная выборка изображения не требуется, если вы используете достойный интерполятор (линейный, вероятно, уже работает очень хорошо).

То, что вы, возможно, захотите проверить, это то, что изображения сначала пересекаются в мировой системе координат. В противном случае вам нужно выполнить инициализацию, чтобы приблизить их друг к другу. Также вам нужно предоставить достойное значение для центра точки вращения.

Если ваша цель - просто зарегистрировать изображения, вы можете рассмотреть возможность использования elastix (http://elastix.isi.uu.nl/), командной строки, которая, по моему опыту, может регистрировать такие изображения в меньше минуты. Аффинное преобразование в elastix также имеет параметры автоматической инициализации, просто ознакомьтесь с руководством elastix, чтобы начать работу.

Если вы используете ITK, вы можете использовать itk :: CenteredTransformInitializer для инициализации преобразования.

  • 0
    да, я использовал itk :: CenteredTransformInitializer для инициализации преобразования. Но, похоже, не работает. Вот код моей инициализации. //Initialize transform initializer TransformInitializerType::Pointer initializer = TransformInitializerType::New(); initializer->SetTransform(transform); initializer->SetFixedImage(fixedImg); initializer->SetMovingImage(tmpMovingImg); initializer->MomentsOn(); initializer->InitializeTransform();
  • 0
    Я использовал этот пример регистрации 3D-изображений с помощью affineTransform в качестве ссылки. ссылка
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню