ITK图像配准01-学习

来源:互联网 发布:软件编程软件 编辑:程序博客网 时间:2024/05/21 18:40

图像配准的定义:

图像配准是将一幅图像上的点映射到另一幅图像上同源点的空间转换过程。eg:平移、旋转、缩放等变换。下图为镜像变换。


配准框架:

配准框架的基本成员:两个输入图像、一个变换、一个路径选择、一个校对机和一个优化器。

过程:待配准图像通过 变换函数(T(x)) 到参考图像的映射过程。


传递函数T(X)表示从参考图像上的点到待配准图像上的点的空间映射关系。校对机被用来评估待配准图像在非网格位置的程度。成员路径选择S(f, m×T)提供了一种参考图像被待配准图像配准的程度。这种尺度形成了数量上的标准,这种标准可以被优化器通过寻找被传递的参数定义的空间去达到最优化。

一个配准方法要求下面几条:两个输入的图像、转换函数、度量、校对机和优化器
在配准方法中的成分的每种类型都应该首先被实例化。

1.两个输入的图像
const unsigned int Dimension = 2;//图像数据类型参数,维度
typedef float PixelType;//图像数据类型参数,像素类型
输入数据的类型通过下面几行表达:
typedef itk::Image< PixelType, Dimension > FixedImageType;
typedef itk::Image< PixelType, Dimension > MovingImageType;

2.图像转换

把参考图像空间映射到待配准图像空间的转换如下:
typedef itk::TranslationTransform< double, Dimension > TransformType;//转换类型

3.度量

衡量标准为比较两幅图像的搭配质量。衡量标准通常已经参数化,例如说下面对图像类型的声明:
typedef itk::MeanSquaresImageToImageMetric<FixedImageType,MovingImageType > MetricType;

4.选择校对机的类型
typedef itk:: LinearInterpolateImageFunction<MovingImageType,double > InterpolatorType;//选择插值类型
5.配准方法

配准方法的类型是通过参考和待配准图像的类型来表示的。
typedef itk::ImageRegistrationMethod<FixedImageType,MovingImageType > RegistrationType;

配准的要素以上所有要素:转换,度量,校对机,优化方法。
以下为要素:

每一个配准要素都是通过它的New( )创建的,并且通过各自的itk::SmartPointer赋值。
MetricType::Pointer metric = MetricType::New( );
TransformType::Pointer transform = TransformType::New( );
优化器Type::Pointer 优化器 = 优化器Type::New( );
InterpolatorType::Pointer interpolator = InterpolatorType::New( );
RegistrationType::Pointer registration = RegistrationType::New( );
每一个要素被连接到配准方法的程序中:
registration->SetMetric( metric );
registration->SetOptimitor( optimitor);
registration->SetTransform( transform );
registration->SetInterpolator( interpolator );

配准需要的输入图像读取示例:

参考和待配准图像从文件里读取。 这就需要itk::ImageRegistrationMethodreaders的输出中获得它的输入数据。
registration->SetFixedImage( fixedImageReader->GetOutput( ) );
registration->SetMovingImage( movingImageReader->GetOutput( ) );

需要配准的图像可能只是图像中的部分区域,以下为设置指定区域操作:

这样的区域通过参考图像的BufferedRegion定义。注意,在这个区域首先要调用它的Update( )方法:
fixedImageReader->Update( );
registration->SetFixedImageRegion(fixedImageReader->GetOutput( )->GetBufferedRegion( ) );

变换参数设置示例(平移):用于变换的参数队列由沿着每一维的方向的平移值构成。设置参数值到零以便将变换初始成恒等变换。

typedef RegistrationType::ParametersType//变换类型

ParametersType;ParametersTypeinitialParameters(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类协调整体以确保在传递给优化器之前一切都到位了。优化器用于收敛得到配准的参数,需要设置。

以下是配准样例的框架结构:


以下是转自http://blog.sina.com.cn/zijuname的配准总结:

配准就是在基于上述四个部分,针对不同的图形情况,如单模,多模,去用不同的准则,变换,优化器和插值方法。在这个配准框架下,不同的部分在设置参数时有变换,这个也是难点。不同的优化器,往往参数设置不同,这个就需要了解优化器和配准方法的算法。如放射变换有旋转变换的矩阵,平移量。muti-solutionregistration(多分辨率配准)要改变步长等等。

 配准步骤,设置待配准图像和参考图像的像素类型,维数。实例化上述四个部分,并将其组合到registration中,设置各部分的参数,并触发配准开始。通过最终得到的参数重采样带配准图像,得到配准结果。比较配准前后和配准过程后的差异。实例化往往先定义——tyoedef,再指向智能指针,然后通过指针调用set*()函数设置参数。

  在配准过程中,有时会根据具体情况先用*filter对图像进行处理。如在配准中对精度要求高的话,先用cast*filter将图像转化为float型,配准后再转化为char,或int型存储。如果图像噪声比较明显,也可以先用*filter除噪在配准。有的也用filter保留边缘,在配准。



 



1 0
原创粉丝点击