在 Matlab 中创建 stereoParameters class:相对相机旋转参数应使用什么坐标系?

Creating stereoParameters class in Matlab: what coordinate system should be used for relative camera rotation parameter?

stereoParameters 有两个外部参数:RotationOfCamera2TranslationOfCamera2.

问题是 the documentationRotationOfCamera2 的真正含义不是很详细,它只说:Rotation of camera 2 relative to camera 1, specified as a 3-by-3 matrix.

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

可以在任意坐标系下指定旋转矩阵。

"the coordinate system of Camera 1" 到底是什么意思?它的 x、y、z 轴是什么?

也就是说,如果我计算本质矩阵,我如何从本质矩阵中得到对应的RotationOfCamera2TranslationOfCamera2

RotationOfCamera2TranslationOfCamera2描述了从camera1的坐标到camera2的坐标的转换。 camera's coordinate system 的原点位于相机的光学中心。它的X轴和Y轴在像平面内,Z轴沿光轴指向。

等价地,摄像机1的外参是身份旋转和零平移,而摄像机2的外参是RotationOfCamera2TranslationOfCamera2

如果你有Essential矩阵,你可以decompose it into the rotation and a translation。要记住两件事。首先,平移是按比例缩放的,所以 t 将是一个单位向量。其次,由于向量矩阵乘法约定的差异,旋转矩阵将是您从 estimateCameraParameters 获得的内容的转置。

出于好奇,您想要完成什么?您正在使用单个移动相机吗?否则,何不使用 Stereo Camera Calibrator 应用程序来校准您的相机,并免费获得旋转和平移?

假设左摄像机的第一个棋盘(或任何世界参考)旋转为R1和平移为T1,右摄像机的第一个棋盘旋转为R2和平移为T2,则可以按如下方式计算;

RotationOfCamera2 = R2*R1'; TranslationOfCamera2= T2-RotationOfCamera2*T1

但请注意,此计算仅针对一个相同的棋盘格参考。在 matlab 内部,这两个参数由所有给定的棋盘图像对计算,并计算中值作为初始猜测。稍后将通过非线性优化来细化这些参数。因此,经过中位数计算后,它们可能会略有不同。但是如果你对两个相机只有一个参考点转换,你应该使用上面的公式。注意Dima告诉,matlab的旋转矩阵是正常使用的转置。所以我把它写成文献讲述的方式而不是 matlab 的风格。