我有以下问题:我有一个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 而变化,它不是固定的。你知道为什么会发生这种情况吗?
1条答案
按热度按时间sirbozc51#
如果以不同的旋转中心旋转相同的Angular ,则一个输出将相对于另一个输出进行平移。
由欧拉得到的旋转矩阵将执行以原点为中心的旋转。
ndimage.rotate
方法围绕图像的中心旋转,reshape=True
将扩展边框,使角位于新框中。第一个
您可以通过应用
translate(-c) rotate translate(+c)
序列来更改旋转中心