在 Matlab 中创建 stereoParameters class:相对相机旋转参数应使用什么坐标系?
Creating stereoParameters class in Matlab: what coordinate system should be used for relative camera rotation parameter?
stereoParameters
有两个外部参数:RotationOfCamera2
和 TranslationOfCamera2
.
问题是 the documentation 对 RotationOfCamera2
的真正含义不是很详细,它只说:Rotation of camera 2 relative to camera 1, specified as a 3-by-3 matrix.
这种情况下的坐标系是什么?
可以在任意坐标系下指定旋转矩阵。
"the coordinate system of Camera 1" 到底是什么意思?它的 x、y、z 轴是什么?
也就是说,如果我计算本质矩阵,我如何从本质矩阵中得到对应的RotationOfCamera2
和TranslationOfCamera2
?
RotationOfCamera2
和TranslationOfCamera2
描述了从camera1的坐标到camera2的坐标的转换。 camera's coordinate system 的原点位于相机的光学中心。它的X轴和Y轴在像平面内,Z轴沿光轴指向。
等价地,摄像机1的外参是身份旋转和零平移,而摄像机2的外参是RotationOfCamera2
和TranslationOfCamera2
。
如果你有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 的风格。
stereoParameters
有两个外部参数:RotationOfCamera2
和 TranslationOfCamera2
.
问题是 the documentation 对 RotationOfCamera2
的真正含义不是很详细,它只说:Rotation of camera 2 relative to camera 1, specified as a 3-by-3 matrix.
这种情况下的坐标系是什么?
可以在任意坐标系下指定旋转矩阵。
"the coordinate system of Camera 1" 到底是什么意思?它的 x、y、z 轴是什么?
也就是说,如果我计算本质矩阵,我如何从本质矩阵中得到对应的RotationOfCamera2
和TranslationOfCamera2
?
RotationOfCamera2
和TranslationOfCamera2
描述了从camera1的坐标到camera2的坐标的转换。 camera's coordinate system 的原点位于相机的光学中心。它的X轴和Y轴在像平面内,Z轴沿光轴指向。
等价地,摄像机1的外参是身份旋转和零平移,而摄像机2的外参是RotationOfCamera2
和TranslationOfCamera2
。
如果你有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 的风格。