【ITK库学习】使用itk库进行图像配准:变换Transform(一)

1、itkIdentityTransform 一致变换

该类的主要用途是调试,它定义身份转换的通用接口。

它将每个点映射到自身,每个向量映射到自身,每个协变向量映射到自身。

此类主要用作默认 Transform,用于初始化那些支持通用 Transform 的类。

此类是根据坐标表示类型(即用于表示点和向量分量的类型)和空间维度进行模板化的。 在这种情况下,输入和输出空间相同,因此只需要一维。

2、itkTranslationTransform 平移变换

该类实现向量空间的平移变换(例如空间坐标)。

平移变换的有点事计算快速并有很容易解释的参数。

使用仿射变换可以获得相同的功能,但性能差异很大。

  • Set/GetParameters():设置/获取用户指定的变换值的参数
  • Set/GetOffset():设置/获取平移变换的偏移量,将 TranslationTransform 的偏移量设置为用户指定的值
  • Set/GetIdentity():将参数设置/获取为 IdentityTransform
  • GetNumberOfParameters():返回完整定义 Transform 的参数数量
  • SetFixedParameters():设置固定参数并更新内部变换,Translation Transform 不需要固定参数,因此该方法的实现是空操作
  • TransformPoint():通过仿射变换进行变换,该方法将自身给定的仿射变换应用于给定的点或向量,返回变换后的点或向量
  • IsLinear():表明该变换是线性的,即给定两个点 P 和 Q,以及标量系数 a 和 b,则T(aP+bQ)=aT§+bT(Q)
  • GetInverse():求仿射变换的逆,此方法创建并返回一个新的 TranslationTransform 对象,该对象是 self 的逆对象,如果 self 不可逆,则返回 false
  • GetInverseTransform():返回此变换的逆矩阵
typedef itk::TranslationTransform<double, Dimension> TransformType;
typename TransformType::Pointer transform = TransformType::New();
typename TransformType::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
transform->SetParameters(initialParameters);

3、itkScaleTransform 比例变换

该类实现向量空间的尺度变换(例如空间坐标)

它能沿着每一维度应用不同的缩放因数。点通过乘以沿着每一维度方向对应的缩放比例因数来实现坐标变换,
向量变换与点相同。协向量通过相应维的比例因子数区分他们成分的方法进行变换。

点: 变换后坐标 = 变换前坐标 * 每个维度变换系数
在这里插入图片描述

使用仿射变换可以获得相同的功能,但性能差异很大,因为仿射变换将使用对角矩阵的矩阵乘法。

  • Set/GetParameters():设置/获取参数,该方法设置用户指定的变换值的参数,参数的组织方式为scale[i] =parameter[i],在 3D 中,坐标 {x,y,z} 的比例参数分别为 {parameter[0],parameter[1],parameter[2]}
  • SetScale():设置/获取缩放变换的因子,此方法无法使用 SetMacro 完成,因为 itk::Array 未定义运算符==,比例尺数组对应于要应用于每个坐标的因子,例如,在 3D 中,scale[0] 对应于 X,scale[1] 对应于 Y,scale[2] 对应于 Z
  • SetIdentity():将转换设置为 Identity,这会将所有比例设置为 1.0
  • Scale():将这个变换与另一个缩放组合起来。 pre 参数在这里无关紧要,因为尺度变换是可交换的,因此 pre 和 postcomposition 是等价的
  • GetInverse():查找比例变换的逆,创建并返回一个新的 ScaleTransform 对象,该对象是 self 的逆,如果 self 不可逆,则返回 false
  • GetInverseTransform():返回此变换的逆矩阵
int Dimension = 3;
typedef  itk::ScaleTransform<ScalarType, Dimension> ScaleTransformType;
typename ScaleTransformType::Pointer scaleTransform = ScaleTransformType::New();
ScaleTransformType::ParametersType scaleParameters(Dimension);
scaleParameters[0] = 0.6;
scaleParameters[1] = 0.7;
scaleParameters[2] = 0.8;
scaleTransform->SetParameters(scaleParameters);

itkScaleLogarithmicTransformitkScaleTransform类似,唯一区别在于变换的参数是尺度的对数,有助于线性化用于优化的表达式。

4、itkRigid2DTransform 刚性2D变换

该类实现向量空间的刚性二维变换(例如空间坐标)。

此变换在 2D 空间中应用刚性变换, 变换被指定为围绕任意中心的旋转,然后是平移,在该类中,平移和旋转是独立的,且旋转使用弧度表示变换方程为:
在这里插入图片描述
其中θ为自转角度,Tx和Ty是变换的成分。旋转以弧度制来进行测量,值在[-π,π]之间;平移使用mm测量。

可以使用单独的 Set 方法或使用 SetParameters() 和 SetFixedParameters() 以序列化形式设置此转换的参数。

可优化参数的序列化是一个由 3 个元素组成的数组,排序如下: p[0] = 角度, p[1] = 平移的 x 分量, p[2] = 平移的 y 分量。

固定参数的序列化是一个由 2 个元素组成的数组,排序如下: p[0] = 中心的 x 坐标, p[1] = 中心的 y 坐标。

中心、平移和底层矩阵偏移向量的访问方法记录在超类 MatrixOffsetTransformBase 中。

  • Set/GetAngle():设置/获取旋转角度(以弧度为单位)
  • SetAngleInDegrees():设置旋转角度(以度为单位)
  • SetIdentity():重置参数以创建和身份转换
  • SetMatrix():设置 Rigid2D Transform 的旋转矩阵,此方法设置表示变换中旋转的 2x2 矩阵,矩阵应是正交的并具有一定的容差
  • Set/GetParameters():设置/获取参数, 有3个参数, p[0] = 角度, p[1] = 平移的 x 分量, p[2] = 平移的 y 分量,旋转中心固定
  • SetVarAngle():更新角度而不重新计算其他内部变量
  • GetInverse():获取该变换的逆变换
  • GetInverseTransform():返回此变换的逆矩阵
typedef itk::Rigid2DTransform<double> TransformType;
typename TransformType::Pointer transform = TransformType::New();
typename TransformType::TranslationType initialTranslation;
initialTranslation[0] = 5.0;      //平移
initialTranslation[1] = 6.0;
typename TransformType::OutputPointType rotationCenter;
rotationCenter[0] = 100;          //旋转中心
rotationCenter[1] = 100;
transform->SetIdentity();
transform->SetCenter(rotationCenter);
transform->SetAngle(1.0);         //旋转角度
transform->SetTranslation(initialTranslation);

5、itkCenteredRigid2DTransform 居中刚性2D变换

该类实现向量空间的居中刚性二维变换(例如空间坐标)

itkRigid2DTransform相似,该变换先围绕任意中心的旋转,然后是平移,主要区别在于,旋转中心可以任意选择进行优化。

可优化参数的序列化是一个由 5 个元素组成的数组,排序如下: p[0] = 角度, p[1] = 中心的 x 坐标, p[2] = 中心的 y 坐标, p[3] = 的 x 分量, 平移 p[4] = 平移的 y 分量。

没有固定的参数。

变换方程为:
在这里插入图片描述
其中θ为自转角度,Cx和Cy为自转中心的坐标,它在自转前被减去在自转后增加恢复,Tx和Ty是变换的成分。旋转以弧度制来进行测量,值在[-π,π]之间;平移使用mm测量。

  • Set/GetParameters():设置/获取变换参数, 有5个参数, p[0] = 角度, p[1] = 中心的 x 坐标, p[2] = 中心的 y 坐标, p[3] = 的 x 分量, 平移 p[4] = 平移的 y 分量

其余函数继承自itkRigid2DTransform

6、itkEuler2DTransform 欧拉2D变换

该类实现向量空间的欧拉二维变换(例如空间坐标)。

此变换应用 2D 空间的刚性变换,变换被指定为平面自转,然后二维平移。

继承自itkRigid2DTransform,与其功能相似。

typedef  itk::Euler2DTransform<double> TransformType;
typename TransformType::Pointer transform = TransformType::New();
transform->SetAngle(0.0);

//获取参数、矩阵等
typename TransformType::ParametersType parameters = transform->GetParameters();
typename TransformType::MatrixType matrix = transform->GetMatrix();
typename TransformType::OffsetType offset = transform->GetOffset();

7、itkSimilarity2DTransform 2D相似度变换

该类实现向量空间的相似度2D变换(例如空间坐标)

该变换在 2D 空间中应用均匀尺度和刚性变换,变换被指定为围绕任意中心的缩放旋转,然后是平移, 给定一个旋转角度、均匀比例和平移 2D 偏移,变换公式为:
在这里插入图片描述
其中θ为自转角度,CxCy为自转中心的坐标,它在自转前被减去在自转后增加恢复,TxTy是变换的成分,s为缩放的比例因数。

可以使用单独的 Set 方法或使用 SetParameters() SetFixedParameters() 以序列化形式设置此转换的参数。

可优化参数的序列化是一个由4个元素组成的数组,排序如下: p[0] = 比例, p[1] = 角度, p[2] = 平移的 x 分量, p[3] = 平移的 y 分量。

固定参数的序列化是一个由 2 个元素组成的数组,排序如下: p[0] = 中心的 x 坐标, p[1] = 中心的 y 坐标。

中心、平移和底层矩阵偏移向量的访问方法记录在超类 MatrixOffsetTransformBase 中。

角度的访问方法记录在超类 itkRigid2DTransform 中。

  • SetScale():设置/获取变换的缩放比例因数
  • SetVarScale():设置比例而不更新基础变量
  • Set/GetParameters():设置/获取变换参数, 有4个参数, p[0] = 比例, p[1] = 角度, p[2] = 平移的 x 分量, p[3] = 平移的 y 分量, 旋转中心固定

其余函数继承自itkRigid2DTransform

typedef itk::Similarity2DTransform<double> TransformType;
typename TransformType::Pointer transform = TransformType::New();
typename TransformType::InputPointType rotationCenter;
rotationCenter[0] = 5.0;
rotationCenter[1] = 3.0;
typename TransformType::OutputVectorType translation;
translation[0] = 13.0;
translation[1] = 17.0;

transform->SetAngle(angle);     //旋转角度,弧度单位
transform->SetScale(scale);     //缩放因子
transform->SetCenter(rotationCenter);     //旋转中心
transform->SetTranslation(translation);   //平移参数
  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ITK(Insight Segmentation and Registration Toolkit)是一个强大的开源软件,用于图像处理、分割和配准。互信息图像配准ITK中一个常用的配准算法之一。 互信息是一种统计量,用于度量两幅图像之间的相似性。它基于信息论的概念,通过将图像中的像素值看作随机变量来衡量图像之间的相关性。互信息越大,说明图像之间的相似性越高。 互信息图像配准在医学影像领域广泛应用。例如,在脑部MRI图像配准中,互信息可以帮助将两幅图像(例如,不同时间点的MRI扫描)对准以实现更精确的比较和分析。在执行互信息配准时,ITK提供了一些用于计算互信息的方法,例如直方图和正态分布。 ITK的互信息图像配准算法主要包括以下步骤: 1. 加载待配准的图像数据。 2. 预处理图像数据,例如裁剪、平滑和重采样。 3. 定义互信息度量方法,选择合适的参数。 4. 计算图像之间的互信息,可以利用直方图或概率密度函数来实现。 5. 通过最大化互信息来优化配准参数,例如调整图像的平移、旋转和缩放。 6. 应用优化后的参数,将图像进行配准,使其尽可能相似。 7. 检查配准结果是否满足要求,如需要可以进行后处理。 ITK的互信息图像配准提供了一个灵活且可扩展的框架,使用户可以根据具体需求选择适合的参数和方法。同时,ITK还提供了其他类型的配准算法,如基于特征的配准和弹性配准,以便用户根据具体应用场景选择合适的方法。 总之,ITK互信息图像配准是一种有效的配准方法,在医学影像处理中具有广泛的应用和研究价值。它能够提供准确的图像对齐结果,从而帮助医生和研究人员更好地分析和理解图像数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值