scipy 3D阵列和点云的旋转不匹配

eyh26e7m  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(184)

我有以下问题:我有一个3d numpy数组代表一堆图像。我还有一个3d数组中一些相关位置的点云(n,3),我已经在那里画好了。我想绕x轴旋转一个Angular 。我做以下操作:

表示点云

rotation_matrix = scipy.spatial.transform.Rotation.from_euler('x', x_rot, degrees=True)
rotated_stack_points = rotation_matrix.apply(stack_points)

用于三维堆栈

rotated_marked_xy = scipy.ndimage.interpolation.rotate(gfp_stack, angle=-x_rot, axes=(1, 2), reshape=True)

然后我在旋转的3d数组中绘制旋转的点云。问题是旋转前后绘制的点之间总是有一个xy偏移,并且无法找出原因。这个偏移随着旋转Angular 而变化,它不是固定的。你知道为什么会发生这种情况吗?

sirbozc5

sirbozc51#

如果以不同的旋转中心旋转相同的Angular ,则一个输出将相对于另一个输出进行平移。
由欧拉得到的旋转矩阵将执行以原点为中心的旋转。

import scipy.spatial.transform
rotation_matrix = scipy.spatial.transform.Rotation.from_euler('x', 30, degrees=True)
rotation_matrix.apply([0,0,0])

ndimage.rotate方法围绕图像的中心旋转,reshape=True将扩展边框,使角位于新框中。
第一个

您可以通过应用translate(-c) rotate translate(+c)序列来更改旋转中心

相关问题