registration->SetInterpolator( interpolator );
在 这 个 例 子 里 , 参 考 和 待 配 准 图 像 从 文 件 里 读 取 。 这 就 需 要
itk::ImageRegistrationMethod 从 readers 的输出中获得它的输入数据。
registration->SetFixedImage( fixedImageReader->GetOutput( ) );
registration->SetMovingImage( movingImageReader->GetOutput( ) );
如果仅仅考虑一些输入的参考图像的特别区域能够达到要求,配准可能要受
到一定的限制。这些区域通过 SetFixedImageRegion( )方法定义。可以用这些模型
减少配准的计算时间,或者避免不想要的对象出现在图像中。这样的区域通过参
考图像的 BufferedRegion 定义。注意,在这个区域首先要调用它的 Update( )方法:
fixedImageReader->Update( );
registration->SetFixedImageRegion(
fixedImageReader->GetOutput( )->GetBufferedRegion( ) );
变换参数通过将它们在队列里传递来初始化,这能用来调整开始时引入的变
化。在这种情况下,平移变换用于配准。用于变换的参数队列由沿着每一维的方
向的平移值构成。设置参数值到零以便将变换初始成恒等变换。注意:队列的结
构要求作为一个 argument 来传递元素的数量。
typedef RegistrationType::ParametersType ParametersType;
ParametersType initialParameters( transform->GetNumberOfParameters( ) );
initialParameters[0] = 0.0; // Initial offset in mm along X
initialParameters[1] = 0.0; // Initial offset in mm along Y
registration->SetInitialTransformParameters( initialParameters );
这 时 , 准 备 执 行 配 准 方 法 , 优 化 器 用 来 驱 动 配 准 的 执 行 , 而
ImageRegistrationMethod 类协调整体以确保在传递给优化器之前一切都到位了。
通常要对优化器的参数进行微调。每一个优化器都有特别的参数,参数要在
执行的优化策略里进行解释。这个例子里的优化器一个梯度下降的变量,可以使
振幅不要太大。每一次迭代,优化器就会沿着 itk::ImageToImageMetric 派生的方
向产生一个振幅。振幅的初始长度由用户定义。每次派生方向随机变化,优化器
假设局部极值已经被传递并且已经将振幅减为一半。在振幅减半若干次之后,优
化器也许将会在参数空间的有限区域内活动。用户可以定义振幅减小到多少可以
评论3