scipy.spatial.transform.RigidTransform.

from_matrix#

classmethod RigidTransform.from_matrix(cls, matrix)#

从 4x4 变换矩阵初始化。

参数:
matrixarray_like, 形状 (4, 4) 或 (N, 4, 4)

单个变换矩阵或变换矩阵堆栈。

返回值:
transformRigidTransform 实例

注释

4x4 刚性变换矩阵的形式为

[R | t] [0 | 1]

其中 R 是 3x3 旋转矩阵,t 是 3x1 平移向量 [tx, ty, tz]。由于旋转矩阵必须是真正交的,因此在初始化之前,使用奇异值分解对旋转分量进行正交化。

示例

>>> from scipy.spatial.transform import RigidTransform as Tf
>>> import numpy as np

从单个矩阵创建变换

>>> m = np.array([[0, 1, 0, 2],
...               [0, 0, 1, 3],
...               [1, 0, 0, 4],
...               [0, 0, 0, 1]])
>>> tf = Tf.from_matrix(m)
>>> tf.as_matrix()
array([[0., 1., 0., 2.],
       [0., 0., 1., 3.],
       [1., 0., 0., 4.],
       [0., 0., 0., 1.]])
>>> tf.single
True

从矩阵堆栈创建变换

>>> m = np.array([np.eye(4), np.eye(4)])
>>> tf = Tf.from_matrix(m)
>>> tf.as_matrix()
array([[[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.]],
       [[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.]]])
>>> tf.single
False
>>> len(tf)
2

具有非真正交旋转分量的矩阵在使用奇异值分解正交化后才进行初始化

>>> tf = Tf.from_matrix(np.diag([2, 2, 2, 1]))
>>> tf.as_matrix()
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])