具有测量的外部参数的立体声校正

时间:2014-08-31 10:38:47

标签: opencv

我正在尝试纠正两个图像序列以进行立体匹配。使用带有棋盘图案的stereoCalibrate()的常用方法对我来说没有用,因为我只使用了素材。

我所拥有的是各个摄像机的正确校准数据(摄像机矩阵和失真参数)以及它们之间的距离和角度的测量。

如何构造stereoRectify()?

所需的旋转矩阵和平移向量

使用

的天真方法
Mat T = (Mat_<double>(3,1) << distance, 0, 0);
Mat R = (Mat_<double>(3,3) << cos(angle), 0, sin(angle), 0, 1, 0, -sin(angle), 0, cos(angle));

造成严重扭曲的图像。这些矩阵是否需要与我不知道的不同起源点相关?或者我是否需要以某种方式将距离/角度值转换为像素化?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

目前尚不清楚您是否有足够的相机姿势信息来执行准确的整改。 T和R都是用3D测量的,但在你的情况下:

  • T是一维的(仅沿着x轴),这意味着您确信两个摄像机沿其他轴完美对齐(特别是,y轴上的像素误差小于1) ,即今天标准的几微米);
  • R保持Y坐标不变。因此,您所拥有的只是围绕此轴旋转,它是否与您的实验设置相匹配?

最后,您需要检查用于平移和旋转的单位的一致性,以匹配内在数据中的单位。

如果可行,您可以通过查找两个摄像机之间的一些匹配点并进行投影校准来检查结果:仅对度量重建需要准确了解校准点的3D位置。其他任务依赖于基本矩阵或基本矩阵,可以通过图像到图像点的对应来计算。

答案 1 :(得分:0)

如果已知内在函数和外在函数,我建议使用此方法:http://link.springer.com/article/10.1007/s001380050120#page-1

易于实施。基本上你旋转右边的摄像机,直到两个摄像机具有相同的方向,意味着它们共享一个共同的R.然后,Epipols转换为无限远,并且你有与图像x轴平行的极线。

新R(x)的第一行只是基线,例如减去两个摄像机中心。第二行(y)基线与旧左z轴的叉积。第三行(z)等于前两行的叉积。

最后,您需要计算上述链接中描述的3x3单应性,并使用warpPerspective()来获得纠正的版本。