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

发布时间:2024年01月03日

1、itkQuaternionRigidTransform 四元刚性变换

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

该变换将旋转和平移应用于给定四元数和 3D平移的空间,旋转是围绕用户指定的中心进行的。

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

可优化参数的序列化是一个包含 7 个元素的数组,前4个元素是3D旋转的四元数表示的组成部分,最后3个参数定义每个维度的平移。

固定参数的序列化是定义旋转中心的3个元素的数组。

  • Set/GetParameters():设置/获取变换参数,通常由优化器使用,有7个参数,前四个代表四元数,后三个代表偏移量
  • Set/GetRotation():设置/获取刚性变换的旋转,计算某一点处变换的雅可比矩阵,此方法将 QuaternionRigidTransform 的旋转设置为用户指定的值
  • SetIdentity():重置参数以创建和身份转换

2、itkVersorTransform Versor变换

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

此变换对空间应用旋转,旋转是围绕用户指定的中心进行的。

可优化参数的序列化是一个由 3 个元素组成的数组,此变换专门表示3D中的旋转。

注意:需要确保基类中的转换参数不能设置为非零值。

  • Set/GetParameters():设置/获取变换参数,通常由优化器使用,有3个参数,可以看作是平行于旋转轴的向量的分量乘以 std::sin(angle/2)
  • SetRotation():设置变换的旋转部分
  • SetCenter():设置转动中心

3、itkVersorRigid3DTransform Versor刚体3D变换

该类实现向量空间的Versor刚体3D变换(例如空间坐标)

此变换对空间应用旋转和平移,此变换的参数可以使用单独的Set方法设置,也可以使用SetParameters()SetFixedParameters()以序列化形式设置。

可优化参数的序列化是一个包含 6 个元素的数组,前 3 个元素是 3D 旋转的 versor 组成部分,后 3 个参数定义每个维度的平移。

固定参数的序列化是定义旋转中心的 3 个元素的数组。

允许用户指定旋转中心。

  • Set/GetParameters():设置/获取变换参数, 有6个参数, 前3个数代表旋转的 versor 组成部分,后 3 个数定义每个维度的平移
  • SetRotation():设置变换的旋转部分
using TransformType = itk::VersorRigid3DTransform<double>;
auto initialTransform = TransformType::New();
using VersorType = TransformType::VersorType;
using VectorType = VersorType::VectorType;
VersorType rotation;
VectorType axis;
axis[0] = 0.0;
axis[1] = 0.0;
axis[2] = 1.0;
constexpr double angle = 0;
rotation.Set(axis, angle);
initialTransform->SetRotation(rotation);

4、itkEuler3DTransform 欧拉3D变换

该类实现向量空间的欧拉3D变换(例如空间坐标)

此变换将旋转和平移应用于给定3个欧拉角和3D平移的空间,旋转是围绕用户指定的中心进行的。

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

可优化参数的序列化是一个包含 6 个元素的数组,前三个代表分别绕X、Y、Z轴旋转的三个欧拉角,后3个参数定义每个维度的平移。

固定参数的序列化是定义旋转中心的 3 个元素的数组。

  • Set/GetParameters():设置/获取变换参数,有6个参数,前三个表示绕坐标轴旋转的角度,后三个表示XYZ偏移量
  • SetRotation():设置变换的旋转部分
  • SetVarRotation():直接设置角度值,无需重新计算其他参数
  • SetIdentity():重置参数以创建和转换,将角度设置为 0 值
  • Set/GetFixedParameters():设置固定参数
  • Set/GetComputeZYX():设置/获取指示旋转是ZYX 还是ZXY的值,旋转的欧拉角表示不是唯一的,并且取决于旋转的顺序,一般来说有12个选项,该类支持其中两个:ZXY 和 ZYX,默认为 ZXY
using ScalarType = float;
constexpr unsigned int Dimension = 3;
typedef itk::Euler3DTransform<ScalarType> EulerTransformType;
typename EulerTransformType::Pointer eulerTransform = EulerTransformType::New();
EulerTransformType::ParametersType eulerParameters(6);
eulerParameters[0] = 0.1;
eulerParameters[1] = 0.2;
eulerParameters[2] = 0.3;
eulerParameters[3] = 4.0;
eulerParameters[4] = 5.0;
eulerParameters[5] = 6.0;
eulerTransform->SetParameters(eulerParameters);
 
EulerTransformType::FixedParametersType eulerFixedParameters(Dimension);
eulerFixedParameters[0] = -3.5;
eulerFixedParameters[1] = -4.5;
eulerFixedParameters[2] = -5.5;
eulerTransform->SetFixedParameters(eulerFixedParameters);

5、itkSimilarity3DTransform 3D相似变换

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

此变换对空间应用旋转、平移和各向同性缩放。

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

可优化参数的序列化是一个包含 7 个元素的数组,前 3 个元素是 3D 旋转的 versor 表示的组成部分,接下来的 3 个参数定义每个维度的平移,最后一个参数定义各向同性缩放。

固定参数的序列化是定义旋转中心的 3 个元素的数组。

该类可以看做是跟随itkVersorRigid3DTransform之后的一个均匀缩放比例变换。用户可以设置旋转中心,缩放和旋转比例都围绕旋转中心进行,中心坐标在执行过程中不能被修改。

  • Set/GetParameters():设置/获取变换参数,有7个参数,前三个代表versor,后三个代表平移,最后一个代表缩放因子
  • Set/GetScale():设置/获取各向同性缩放因子的值
  • SetMatrix():直接设置变换的旋转矩阵,警告:输入矩阵必须与各向同性缩放正交,且在指定的容差范围内,否则会引发异常
  • SetIdentity():重置参数以创建和转换

6、itkRigid3DPerspectiveTransform 3D刚性透视变换

该类实现向量空间的刚性 3D 变换(例如空间坐标)

此变换对3D空间应用旋转和平移,然后沿 Z 轴投影到 2D 空间。

用户需要提供一个焦距值,用于团购试图变换的计算。可以指定旋转中心,该中心坐标在配准执行最优化时不会被修正

  • Set/GetParameters():设置/获取变换参数, 这通常由优化器使用,有6个参数,前三个代表versor,后三个代表offset
  • Set/GetRotation():设置刚性变换的旋转,此方法将Rigid3DTransform`的旋转设置为用户使用旋转轴和角度指定的值
  • Set/GetOffset():设置偏移值
  • Set/GetFocalDistance():设置/获取投影的焦距 此方法将透视投影的焦距设置为用户指定的值
  • SetFixedParameters():设置固定参数并更新内部变换,该变换没有固定参数
  • Set/GetFixedOffset():设置/获取固定偏移:这允许将要变换的对象居中
  • Set/GetCenterOfRotation():设置/获取旋转中心
文章来源:https://blog.csdn.net/weixin_41804847/article/details/135357843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。