将2D投影旋转角度转换为3D对象

时间:2015-03-28 17:35:04

标签: math matrix rotation transformation voxel

我正在将密度值的3D矩阵投影到3个2D平面(ZX,ZY,XY)中。然后我使用下面的旋转矩阵将每个投影旋转3个不同的角度:Pzx,Pzy,Pxy:​​

2D Rotation Matrix

如何转换这三个单独的角度,以便我可以将它们应用于3D变换矩阵,该矩阵将围绕X,Y,Z(或Z,Y,X)旋转3D对象,例如下面的旋转矩阵: / p>

3D Rotation Matrix about X,Y,Z

要清楚,我不希望将角度Pzx,Pzy,Pxy应用于3D对象,而是计算2D中的单个旋转将在3D中转换为什么。

1 个答案:

答案 0 :(得分:1)

这个问题产生了一个方程组。设R_3d为三维空间中的旋转,R_xy平面中的旋转为xy[*]_xy*xy的投影飞机。然后对于任何点v

I:   [R_3d v]_zx = R_zx [v]_zx
II:  [R_3d v]_zy = R_zy [v]_zy
III: [R_3d v]_xy = R_xy [v]_xy

我们看到每个坐标都存在于两个方程中。让我们检查x坐标的相关方程:

a := alpha, b := beta, c := gamma
I:   cos b cos c x - cos b sin c y + sin b z = sin Pzx z + cos Pzx x
III: cos b cos c x - cos b sin c y + sin b z = cos Pxy x - sin Pxy y

我们看到以下关系适用于任何v(两个方程的右侧):

sin Pzx z + cos Pzx x = cos Pxy x - sin Pxy y

其他两个坐标存在类似的方程式。只有满足这些条件,才能存在精确的3d旋转。如果我没有弄错的话,那只有Pzx=Pzy=Pxy=0的情况。通常,可以计算近似解。我建议基于以下能量的最小二乘解决方案:

E(a, b, c) = Sum { for all v in data set } ( || [R_3d v]_zx - R_zx [v]_zx ||^2
                                           + || [R_3d v]_zy - R_zy [v]_zy ||^2
                                           + || [R_3d v]_xy - R_xy [v]_xy ||^2 )

最佳旋转参数为:

{a, b, c}* = arg min {a, b, c} E(a,b,c)

此解决方案将最小化相应点的两个投影的距离。

不幸的是,问题不是一个容易解决的线性最小二乘问题。相反,迭代方法可以解决这个问题(例如Levenberg-Marquardt)。在您的编程语言中寻找该算法的实现,插入能量并求解最佳旋转参数。