如何计算2台摄像机之间的旋转和平移?

时间:2011-04-06 19:13:44

标签: opencv computer-vision camera-calibration

我知道棋盘相机校准技术,并且已经实现了它。

如果我有2台摄像机观看同一场景,并且我同时使用棋盘技术校准两者,我可以计算它们之间的旋转矩阵和平移向量吗?怎么样?

4 个答案:

答案 0 :(得分:3)

如果您拥有相应点的3D相机坐标,则可以Rigid Body Transformation

计算最佳旋转矩阵和平移向量

答案 1 :(得分:2)

如果您已经使用OpenCV,那么为什么不使用cv::stereoCalibrate

它返回旋转和平移矩阵。您唯一需要做的就是确保两个摄像机都能看到校准棋盘。

在OpenCV库提供的.cpp示例中显示了确切的方法(我有2.2版本,默认情况下在/ usr / local / share / opencv / samples中安装了示例)。

代码示例名为stereo_calib.cpp。虽然没有清楚地解释他们在那里做了什么(为了你可能想要“学习OpenCV”),这是你可以依据的东西。

答案 2 :(得分:1)

如果我理解正确,你有两个校准过的摄像机观察一个共同的场景,你希望恢复它们的空间排列。这是可能的(只要您找到足够的图像对应关系),但在翻译范围内只能达到未知因素。也就是说,我们可以恢复旋转(3个自由度,DOF)并且只恢复平移的方向(2个自由度)。这是因为我们无法判断投影的场景是否很大,相机是否很远,或者场景是否很小以及相机是否接近。在文献中,5自由度安排被称为相对姿势相对方向(Google是你的朋友)。 如果您的测量结果准确且位置一般,则6点对应可能足以恢复独特的解决方案。 A relatively recent algorithm正是这样做的。

Nister,D。,“五点相对姿势问题的有效解决方案”,“模式分析与机器智能”,IEEE Transactions on,vol.26,no.6,pp.756,770,June 2004 doi:10.1109 / TPAMI.2004.17

答案 3 :(得分:0)

<强>更新

使用动作/束调整包中的结构(如Bundler)同时解决场景的3D位置和相关摄像机参数。

任何此类套餐都需要多个输入:

  1. 您拥有的相机校准。
  2. 相机中感兴趣点的2D像素位置(使用兴趣点检测,如Harris,DoG(SIFT的第一部分))。
  3. 每个摄像机的兴趣点之间的对应关系(使用SIFT,SURF,SSD等描述符进行匹配)。
  4. 请注意,解决方案达到了一定的规模歧义。因此,您需要在摄像机之间或场景中的一对物体之间提供距离测量。

    原始回答(主要适用于未经校准的相机,正如评论所指出的那样):

    来自加州理工学院的这个camera calibration toolbox包含解析和可视化内在物质(镜头参数等)和外在物(每张照片拍摄时相机如何定位)的能力。后者是你感兴趣的。

    Hartley and Zisserman blue book也是一个很好的参考。特别是,您可能需要查看关于极线和章节的章节,该章节可以在链接处免费在线。