vtk python icp如何获得变换矩阵

时间:2014-02-04 18:46:24

标签: python numpy vtk

似乎我的问题的答案非常明显,但遗憾的是我无法理解,请帮助我!

我正在尝试使用vtk库来获取python中的icp转换。

我在这里运行此代码: http://www.vtk.org/Wiki/VTK/Examples/Python/IterativeClosestPoints

然后

print icp.GetLandmarkTransform()

结果显示转换矩阵等。

...

Elements:
->        1 4.76975e-10 0 -7.79873e-10 
->       -4.76975e-10 1 -0 1.58991e-10 
->       -0 0 1 0 
->        0 0 0 1 
Mode: RigidBody

...

如何在numpy数组中提取转换矩阵? 我只需要2D数据集的变换。有没有更简单的方法呢?

提前谢谢!

3 个答案:

答案 0 :(得分:3)

在向朋友寻求帮助后,他向我提供了答案。只是发布以防有人需要它:

for i in range(3):
   for j in range(4):
       print icp.GetLandmarkTransform().GetMatrix().GetElement(i, j),
   print
print

答案 1 :(得分:2)

一般来说,vtk矩阵可以作为python列表提取:

temp = [0] * 16 #the matrix is 4x4
vtk_matrix.DeepCopy(temp, vtk_matrix)

答案 2 :(得分:1)

只是一个帮助函数,我用来做同样的事情。

def vtkmatrix_to_numpy(matrix):
    """
    Copies the elements of a vtkMatrix4x4 into a numpy array.

    :param matrix: The matrix to be copied into an array.
    :type matrix: vtk.vtkMatrix4x4
    :rtype: numpy.ndarray
    """
    m = np.ones((4, 4))
    for i in range(4):
        for j in range(4):
            m[i, j] = matrix.GetElement(i, j)
    return m