在Matlab中创建stereoParameters类:相对相机旋转参数应该使用哪个坐标系?

7

stereoParameters需要两个外参参数:RotationOfCamera2TranslationOfCamera2

问题在于文档没有详细说明RotationOfCamera2的含义,它只说:“相机2相对于相机1的旋转,指定为3x3矩阵。”

那么这种情况下的坐标系是什么?

旋转矩阵可以在任何坐标系中指定。

“相机1的坐标系”到底意味着什么?它的x、y、z轴是什么?

换句话说,如果我计算本质矩阵,如何从本质矩阵得到相应的RotationOfCamera2TranslationOfCamera2

2个回答

4
RotationOfCamera2TranslationOfCamera2描述了从相机1的坐标系到相机2的坐标系的变换。一个相机的坐标系在相机光学中心处有原点,其X轴和Y轴位于图像平面上,Z轴沿着光轴指向外部。
同样地,相机1的外参旋转为单位矩阵,平移为零;而相机2的外参为RotationOfCamera2TranslationOfCamera2
如果你拥有本质矩阵,你可以将其分解为旋转和平移。需要注意的是,平移是缩放的,所以t将是一个单位向量。此外,旋转矩阵将是从estimateCameraParameters得到的矩阵转置,因为向量-矩阵乘法约定不同。
顺便问一下,你想要达到什么目的?你正在使用单个移动摄像头吗?否则,为什么不使用Stereo Camera Calibrator应用程序对相机进行校准,获得免费的旋转和平移?

谢谢Dima的回答,我正在按照Zissman的方法从两张图片中重建场景。Stereo Calibrator应用程序的问题在于它仅适用于立体相机,需要多个图像对进行校准。但是我只有一组图像对,因为相机的相对位置不固定。主要目标是使用同一相机从不同角度拍摄两张图片,然后获得密集的点云。 - jhegedus
@Dima,“其次,旋转矩阵将是从estimateCameraParameters获得的矩阵转置,因为向量-矩阵乘法约定的差异。”你能澄清一下这个说法吗? - Pedro77
这只是一个约定俗成的问题。在大多数教科书中,矩阵乘以列向量。在Matlab中,在图像处理工具箱和计算机视觉系统工具箱中,约定是行向量乘以矩阵。这意味着必须转置矩阵,按照矩阵乘法的规则进行。 - Dima

2
假设左侧相机的第一个棋盘(或任何世界参考系)的旋转为R1,平移为T1,右侧相机的第一个棋盘的旋转为R2,平移为T2,则可以按以下方式计算它们: Camera2的旋转= R2*R1'; Camera2的平移= T2- Camera2的旋转*T1 但请注意,这些计算仅适用于一个相同的棋盘参考。在Matlab中,这两个参数由所有给定的棋盘图像对计算,并计算中位数作为初始猜测。稍后,这些参数将通过非线性优化进行细化。因此,在中位数计算之后,它们可能略有不同。但如果您只有一个参考点变换适用于两个相机,则应使用上述公式。请注意,Dima告诉我们,Matlab的旋转矩阵是正常使用的转置。因此,我按照文献的说法写了它,而不是Matlab的风格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接