给定一组 4x4姿势矩阵,可以得出相机的欧几里德坐标系位置如下:
其中R
是3x3旋转矩阵,t
是姿势的平移向量,按照this question。
当以连续的方式处理姿势组时,例如当每个姿势在某个时间步骤引用相机的姿势时,旋转和平移组件可以如下累积:
和
两者都可插入第一个等式,以在给定的时间步长产生相机的相对位置。
我的问题是如何使用OpenCV或类似工具绘制这些点。对于以圆周运动在物体周围移动的相机,输出图应为圆形,原点位于轨迹的起始点。
虽然我的问题没有明确说明如上图所示绘制轴,但这将是一个奖励。
TL; DR:给定一组姿势,我们如何使用常见工具(如OpenCV,VTK,Matplotlib,MATLAB等)生成如上图所示的图。
答案 0 :(得分:2)
为每个绘图点获取轴向量X,Y,Z
和位置O
简单地从矩阵中提取它们。见Understanding 4x4 homogenous transform matrices。现在我不知道你的矩阵是否已反转。因此,如果您的矩阵代表摄像机坐标系(未反转),则直接提取所需信息。如果不是首先反转矩阵然后提取。
如果你有均匀的变换矩阵,那么你可以通过利用转置操作来做伪逆。有关详细信息,请参阅full pseudo inverse matrix。
渲染每个绘图点
所以首先将轴绘制为线条:
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作为绘图。我会选择 GDI 或 OpenGL ,但这完全取决于你熟悉的内容。
顺便说一句。要改善时间线的avarenes,你可以调制颜色强度(从深色开始,以鲜艳的颜色结束,这样你就可以看到运动开始和结束的位置......)