Math 三维刚体变换分解重排序

Math 三维刚体变换分解重排序,math,image-processing,linear-algebra,Math,Image Processing,Linear Algebra,我脑子里有这个想法,我正在努力想办法实现它。我正在努力解决的一个问题是如何进行三维刚体变换,并将其分解为dx、dy、dz、θX、θY和θZ 这当然是一个非常好的文档算法。我的问题是矩阵代数是非交换的。我想对组件进行重新排序,使其成为(dx*dy*theta\u Z)*(dz*theta\u X*theta\u Y) 对于任何想知道我为什么要这样做的人来说,是因为我想在3D图像上应用变换(dx*dy*thetaz),然后再进行另一个操作,然后完成刚体变换。有人知道怎么做吗?如果我做对了,你想将XY

我脑子里有这个想法,我正在努力想办法实现它。我正在努力解决的一个问题是如何进行三维刚体变换,并将其分解为dx、dy、dz、θX、θY和θZ

这当然是一个非常好的文档算法。我的问题是矩阵代数是非交换的。我想对组件进行重新排序,使其成为(dx*dy*theta\u Z)*(dz*theta\u X*theta\u Y)


对于任何想知道我为什么要这样做的人来说,是因为我想在3D图像上应用变换(dx*dy*thetaz),然后再进行另一个操作,然后完成刚体变换。有人知道怎么做吗?

如果我做对了,你想将XY平面变换与3D变换分开,这只有在首先应用
theta_Z
旋转时才可能(因为你希望它是第一个)。如果不是,则需要首先转换欧拉角的顺序,例如:

如果您不知道这些翻译,可以直接从矩阵中获取,请参见:

现在只需在corect坐标系中使用平移(取决于变换的顺序)


由于您没有提供任何具体数据,也没有提供MCVE,因此我无法提供更多详细信息,因为可能的解决方案有很多种组合。

如果我没有弄错,您希望将XY平面变换与3D变换分开,而3D变换只有在首先应用
theta_Z
旋转时才可能(如您所希望的那样)。如果不是,则需要首先转换欧拉角的顺序,例如:

如果您不知道这些翻译,可以直接从矩阵中获取,请参见:

现在只需在corect坐标系中使用平移(取决于变换的顺序)


由于您没有提供任何具体数据,也没有提供MCVE,因此我无法提供更多详细信息,因为可能的解决方案有很多种组合。

如果您首先将旋转分解为所需的顺序(
theta_Z*theta_X*theta_Y
),则按照您想要的方式重新排序任何翻译是相当简单的:

let:   t' = theta_Z^-1 * t * theta_Z

then:  t * theta_Z = theta_Z * t' 

and:   t * theta_Z * theta_X * theta_Y
     = theta_Z * t' * theta_X * theta_Y
但是,对于所需的特定重新排序,请注意,围绕Z轴旋转不应影响围绕Z轴的纯平移!即使一般刚体变换不进行转换,您的
dz
theta_Z
变换也会:

commutative:  dz * theta_Z = theta_Z * dz

and:  my_transform = dx * dy * dz * theta_Z * theta_X * theta_Y
                   = dx * dy * theta_Z * dz * theta_X * theta_Y

如果您首先将旋转分解为所需的顺序(
theta_Z*theta_X*theta_Y
),则按照您想要的方式对任何平移进行重新排序相当简单:

let:   t' = theta_Z^-1 * t * theta_Z

then:  t * theta_Z = theta_Z * t' 

and:   t * theta_Z * theta_X * theta_Y
     = theta_Z * t' * theta_X * theta_Y
但是,对于所需的特定重新排序,请注意,围绕Z轴旋转不应影响围绕Z轴的纯平移!即使一般刚体变换不进行转换,您的
dz
theta_Z
变换也会:

commutative:  dz * theta_Z = theta_Z * dz

and:  my_transform = dx * dy * dz * theta_Z * theta_X * theta_Y
                   = dx * dy * theta_Z * dz * theta_X * theta_Y