【ITK库学习】使用itk库进行图像配准:变换Transform(二)
目录
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,后三个代表offsetSet/GetRotation():设置刚性变换的旋转,此方法将
Rigid3DTransform`的旋转设置为用户使用旋转轴和角度指定的值Set/GetOffset()
:设置偏移值Set/GetFocalDistance()
:设置/获取投影的焦距 此方法将透视投影的焦距设置为用户指定的值SetFixedParameters()
:设置固定参数并更新内部变换,该变换没有固定参数Set/GetFixedOffset()
:设置/获取固定偏移:这允许将要变换的对象居中Set/GetCenterOfRotation()
:设置/获取旋转中心
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!