相对于全局姿势的摄影机相对姿势变化

时间:2020-03-28 22:29:18

标签: python opencv computer-vision

在OpenCV中,可以使用recoverPose函数从跟踪点估计摄像机的相对旋转和平移,但是我试图弄清楚是否可以在两个连续点上使用摄像机的位置和方向来做类似的事情时间,例如TUM RGB-D数据集(https://vision.in.tum.de/data/datasets/rgbd-dataset/file_formats)中的地面真实数据,其中每个时间戳提供相对于全局坐标系的摄像机平移和方向。

一个人显然可以简单地减去平移值以获得全局相对平移,但是我想计算摄像机从一帧到下一帧的相对旋转和平移,以获得与recoverPose相当的结果。

据我的理解(来自https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga40919d0c7eaf77b0df67dd76d5d24fa1),人们可以形成一个矩阵,通过一个4x4矩阵从世界坐标转换为相机坐标,其中较高的3x3代表相机的整体旋转,第四列是其翻译源自全球。仅通过矩阵乘法解决我的问题是否有效,换句话说,计算C = AB'其中C是“相对变化”矩阵,A是第二帧的矩阵,B是第一帧的矩阵? / p>

我目前为此使用的代码是

from pyquaternion import Quaternion
import numpy as np

quatA = Quaternion(x=x2, y=y2, z=z2, w=w2)
quatB = Quaternion(x=x1, y=y1, z=z1, w=w1)

matA = quatA.transformation_matrix
matA[0,3] = tx2
matA[1,3] = ty2
matA[2,3] = tz2

matB = quatB.transformation_matrix
matB[0,3] = tx1
matB[1,3] = ty1
matB[2,3] = tz1

matC = matA * np.linalg.inv(matB)

这段代码可以运行,但是我不知道是否可以计算出有用的内容。

如果这是完全错误的,那么使用OpenCV和Python实现此目标的最佳方法是什么?

0 个答案:

没有答案