我知道棋盘相机校准技术,并且已经实现了它。
如果我有 2 个摄像机查看同一个场景,并且我用棋盘技术同时校准了两个摄像机,我可以计算它们之间的旋转矩阵和平移向量吗?如何?
我知道棋盘相机校准技术,并且已经实现了它。
如果我有 2 个摄像机查看同一个场景,并且我用棋盘技术同时校准了两个摄像机,我可以计算它们之间的旋转矩阵和平移向量吗?如何?
如果你有对应点的3D相机坐标,你可以通过刚体变换计算出最优的旋转矩阵和平移向量
如果您已经在使用 OpenCV,那么为什么不使用cv::stereoCalibrate
.
它返回旋转和平移矩阵。您唯一需要做的就是确保两个相机都能看到校准棋盘。
确切的方法显示在 OpenCV 库提供的 .cpp 示例中(我有 2.2 版本,并且示例默认安装在 /usr/local/share/opencv/samples 中)。
该代码示例名为 stereo_calib.cpp。尽管没有清楚地解释他们在那里做什么(为此,您可能想查看“学习 OpenCV”),但您可以以此为基础。
如果我理解正确的话,你有两个校准过的相机观察一个共同的场景,你希望恢复它们的空间排列。这是可能的(只要您找到足够的图像对应),但只能达到平移比例的未知因素。也就是说,我们可以恢复旋转(3 个自由度,DOF)和只有平移的方向(2 个 DOF)。这是因为我们无法分辨投影的场景是大摄像机远,还是场景小摄像机近。在文献中,5 DOF 排列被称为相对姿势或相对方向(谷歌是你的朋友)。如果您的测量准确且处于大致位置,则 6 点对应可能足以恢复唯一解。一个相对较新的算法正是这样做的。
Nister, D.,“五点相对位姿问题的有效解决方案”,模式分析和机器智能,IEEE Transactions on,第 26 卷,第 6 期,第 756,770 页,2004 年 6 月 doi: 10.1109/TPAMI.2004.17
更新:
使用Bundler等运动/捆绑调整包中的结构同时求解场景的 3D 位置和相关相机参数。
任何这样的包都需要几个输入:
请注意,该解决方案具有一定程度的模糊性。因此,您需要在摄像机之间或场景中的一对对象之间提供距离测量。
原始答案(主要适用于未校准的相机,因为评论请指出):
加州理工学院的这个相机校准工具箱包含解决和可视化内在因素(镜头参数等)和外在因素(拍摄每张照片时相机如何定位)的能力。后者是你感兴趣的。
Hartley and Zisserman 蓝皮书也是一个很好的参考。特别是,您可能想查看关于极线和基本矩阵的章节,该章节在链接上免费在线。