计算单目线性三角测量的两个测距位置之间的旋转和平移矩阵

时间:2012-03-28 23:09:47

标签: opencv computer-vision

最近,我一直在尝试实现一个系统来识别和三角测量机器人系统中物体的3D位置。该过程的概要如下:

  • 使用SURF匹配识别对象,从一组“训练”图像到摄像机的实际实时馈送;这也给了我一个仅包含已识别对象的裁剪矩形图像
  • 移动/旋转机器人一定量
  • 在此视图中将起始视图中对象的要素与相机匹配
  • 现在我有:一组相应的2D点(来自两个不同视图的相同对象),世界框架中的两个测距位置(位置+方向),以及相机内在函数(焦距,主点等)它已经预先校准过,所以我应该能够创建2个投影矩阵并使用基本的线性三角测量方法进行三角测量,如Hartley& Zissermann的书多视图几何,pg。 312。
  • 为每个相应的2D点求解AX = 0等式,然后取平均值

在实践中,三角测量仅在旋转几乎没有变化时起作用;如果机器人在移动时甚至稍微旋转一点(由于例如车轮打滑),那么估计就会偏离。这也适用于模拟。由于我只能将两个超链接here's a link发布到包含模拟图像的页面(在地图上,红色方块是模拟机器人的位置和方向,黄色方块是使用线性三角测量估计对象的位置。 )

所以你可以看到,即使是一点旋转,估计也会被抛弃,就像在该页面上的位置2(那是15度;如果我再旋转它,那么估计完全不在地图上),甚至在已知完美校准矩阵的模拟环境中。在真实的环境中,当我真的随机器人移动时,情况更糟。

获得点对应关系没有任何问题,也没有在计算A矩阵时实际求解AX = 0方程,所以我认为它可能与我如何设置两个摄像机投影矩阵有关,具体来说我是如何从我相对于世界框架的位置/方向信息计算平移和旋转矩阵。我现在怎么做的是:

  • 旋转矩阵通过创建1x3矩阵[0,(方向角度改变),0]然后使用OpenCV的Rodrigues函数将其转换为3x3矩阵来构成
  • 通过旋转两个点(起始角度)度数然后从初始位置减去最终位置来组成平移矩阵,以使机器人相对于其起始方向的直线和横向运动

这导致第一个投影矩阵为K [I | 0],第二个是K [R | T],其中R和T如上所述计算。

我在这里做错了吗?或者它可能是其他一些问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

如果没有Hartley和Zisserman在这里,我无法完全理解这个过程,但问题确实是由投影矩阵的成分引起的。请记住,由于矩阵为3x4,因此在平移之前应用旋转。这意味着您首先将相机轴旋转到最终方向,然后使用通过“旋转两个点(起始角度)度数”构建的平移向量。我会尝试通过将点旋转到最终角度来制作平移向量,然后减去它们的位置,看看是否能解决所有麻烦。从您发布的摘要中,我认为您使用的是在错误的轴上定义的平移向量。