c++ - itk 注册两个不同大小的 3D 图像太慢

标签 c++ itk

我正在注册两个 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();

非常感谢, 阿文

最佳答案

如果您使用合适的插值器,则不需要对图像重新采样(线性插值器可能已经运行良好)。

您可能想要检查的是图像最初是否在世界坐标系中重叠。否则,您需要执行初始化以使它们彼此靠近。您还需要为旋转点的中心提供一个合适的值。

如果您的目标只是注册图像,您可能需要考虑使用 elastix ( http://elastix.isi.uu.nl/ ),这是一个命令行,根据我的经验,它能够在不到一分钟的时间内注册这些类型的图像。 elastix 中的仿射变换也有自动初始化选项,只需查看 elastix 手册即可开始。

如果使用 ITK,您可以考虑使用 itk::CenteredTransformInitializer 来初始化转换。

关于c++ - itk 注册两个不同大小的 3D 图像太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26955480/

相关文章:

c++ - 如何将Scintilla组件添加到Qt Creator C++项目?

c++ - 如何以编程方式永久删除程序上的防火墙检查

c++ - vector<T>::clear 可以抛出吗?

c++ - 图像每一行在 x 方向上的一维卷积

c++ - cvCanny 和 float 32 位 (IPL_DEPTH_32F) 问题

c++ - 返回 const 'this' 指针

c++ - 为什么要使用指针?

c++ - 主对象与itk 4.8工具包的区别

c++ - ITK 中是否有一个表面构建函数,它返回一个 VesselTubeSpatialObject?