【问题标题】:Head Pose Estimation with 2 cameras使用 2 个摄像头进行头部姿势估计
【发布时间】:2012-08-31 10:24:58
【问题描述】:

我正在使用 2 个摄像头进行头部姿势估计项目。对于一个相机系统工作并返回头部相对于每个相机坐标系的旋转矩阵和平移向量。我在 OpenGL 场景中渲染了对象,该对象被旋转和平移以表示头部运动。要显示计算的旋转矩阵和平移向量,我只需使用以下 OpenGL 命令。

glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(pose_matrix);

其中位姿矩阵是由头部的旋转矩阵和平移向量构成的 OpenGL ModelView 矩阵。

现在我正在尝试为 2 个校准的相机执行此操作。当第一个相机丢失了脸部的轨迹但第二个相机估计了头部姿势时,我会显示相对于第二个相机的旋转和平移,反之亦然。我想显示一个 OpenGL 对象并为这两种情况移动它。为此,我需要将姿势矩阵转移到公共坐标系中。

我知道 2 个摄像头之间的相对几何关系。我假设其中一个相机是世界坐标系,我通过将第二个相机的位姿矩阵和第二个相机的校准矩阵与第一个相机相乘,将第二个相机的头部姿势矩阵转移到第一个相机的框架。当我将此相乘矩阵加载到 OpenGL ModelView 矩阵中时,我得到了错误的结果。当第一个摄像头捕捉到人脸时,对象正在向右移动,但对于第二个摄像头,对象被平移和旋转,并且与第一个摄像头的情况不同。

可能是什么问题?可能是 OpenGL 显示部分不对?

【问题讨论】:

    标签: opengl opencv computer-vision camera-calibration pose-estimation


    【解决方案1】:

    安全的默认假设:OpenGL 是正确的,您的代码是错误的。

    在没有看到您的代码的情况下,我可以建议您打印您的矩阵并在 Matlab 或 Octave 中使用它们仔细检查数学。

    一个常见的错误是忘记默认情况下 OpenGL PRE 将 ROW 向量乘以 modelvie 矩阵(实际上是所有矩阵)。也就是说,它乘以 v_row * M,矩阵以 col-major 顺序存储,而您可能正在考虑将向量视为 COLUMN 的常见数学约定,并将它们乘以 M * v_col(存储 M行主要)。

    如果您更喜欢使用后一种约定(推荐),请查找 GL_ARB_transpose_matrix 扩展名。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2020-10-31
      • 1970-01-01
      • 2021-11-01
      • 2014-03-11
      • 2015-09-09
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多