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

时间:2014-11-16 09:23:00

标签: 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();

非常感谢, 阿文

1 个答案:

答案 0 :(得分:1)

如果使用合适的内插器(线性可能已经很好地工作),则不需要重新采样图像。

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

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

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