绘制相机轨迹

Plot Camera Trajectory

给定一组 4x4 位姿矩阵,可以推导出相机的欧氏坐标系位置,如下所示:

其中 R 是 3x3 旋转矩阵,t 是姿势的平移矢量,根据 this question

当以顺序方式处理一组姿势时,例如当每个姿势在某个时间步指代相机的姿势时,旋转和平移分量可以按如下方式累积:

两者都可以代入第一个等式,以得出相机在给定时间步长的相对位置。

我的问题是如何使用 OpenCV 或类似工具绘制这些点。对于以圆周运动围绕物体移动的相机,输出图应该是圆形的,原点在轨迹的起点。

例子如下:-

虽然我的问题不是明确地关于如上所示绘制坐标轴,但这将是一个奖励。

TL;DR:给定一组姿势,我们如何使用 OpenCV、VTK、Matplotlib、MATLAB 等常用工具生成像上面那样的图

  1. 为每个绘图点获取坐标轴向量X,Y,Z和位置O

    简单地从矩阵中提取它们。参见 。现在我不知道你的矩阵是否已经逆了。因此,如果您的矩阵表示相机坐标系(未倒置),则直接提取所需信息。如果不是先反转矩阵再提取。

    如果你有齐次变换矩阵,那么你可以通过利用转置操作来进行伪逆。有关详细信息,请参阅 .

  2. 渲染每个情节点

    所以首先将轴绘制为线:

      red_line(O,O+a*X);
    green_line(O,O+a*Y);
     blue_line(O,O+a*Z);
    

    其中 a 是轴线尺寸。在此之后为位置绘制一个点

    black_circle(O,r);
    

    其中 r 是一些半径。您可以使用任何 gfx lib/engine 进行绘图。我会选择 GDIOpenGL 但这完全取决于你熟悉什么。

    顺便说一句。要改善时间线的变化,您可以调节颜色强度(从深色开始,以亮色结束,这样您就可以看到运动开始和结束的位置...)