使用2个摄像头进行头部姿势估计

时间:2012-09-06 14:53:18

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

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

glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(pose_matrix);

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

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

我知道2个摄像机相对于彼此的相对几何形状。我假设其中一个摄像机是世界坐标系,我通过将第二个摄像机的姿势矩阵和校准矩阵相对于第一个摄像机相乘,将第二个摄像机的头部姿势矩阵传送到第一个摄像机的帧。当我将这个乘法矩阵加载到OpenGL ModelView矩阵中时,我得到错误的结果。当第一个相机捕捉到脸部时,物体向右移动但是第二个相机物体被平移和旋转,并且与第一个相机的情况不同。

可能是什么问题?也许OpenGL显示部分是错误的?

1 个答案:

答案 0 :(得分:0)

安全默认假设:OpenGL是对的,你的代码是错误的。

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

一个常见的错误是忘记了默认情况下,OpenGL PRE通过modelvie矩阵(实际上是所有矩阵)乘以ROW向量。也就是说,它与v_row * M相乘,矩阵以col-major顺序存储,而你可能会考虑将向量处理为COLUMN的常见数学约定,并将它们作为M * v_col进行POST乘以(存储M行优先)。

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

相关问题