将相对相机旋转和平移与已知姿势相结合

Combining relative camera rotations & translations with known pose

我已经使用 OpenCV 的立体校准功能来获取从一个相机到另一个相机的相对旋转和平移。我想做的是改变世界的起源 space 并相应地更新两个相机的外部。我可以轻松地使用与 SolvePnP 共享视图的相机来执行此操作,但我想使用相机来执行此操作,其中每个相机都由它相对于相邻相机的姿势定义,其中它们的所有字段都不重叠 - 就像菊花链一样他们的相对姿势。

我已经确定了相机相对于我希望使用 SolvePnP 的世界原点和方向的位置,这样我就知道最终的外部函数是什么 'should be'。然后,我尝试将来自立体校准的旋转矩阵和平移向量与来自主相机的 SolvePnP 相结合,以使用 ComposeRT 和手动获得相同的值,但无济于事。

编辑: 所以事实证明,无论出于何种原因,StereoCalibration 和 SolvePnP 函数都会产生姿势的镜像版本,因为 StereoCalibration 似乎会产生围绕着 180 度旋转的姿势Y 轴。因此,通过将该旋转应用于生成的相对旋转矩阵和平移向量,一切正常!

如果您通过链知道所有相机之间的相对姿势(相机之间的相对姿势 abb, c), 你可以结合相机 ac[= 的平移和旋转48=] 通过 b 通过

Rac=Rab R bc

t ac = t ab + R ab t bc

换句话说,从ac开始的新旋转首先从a旋转到b 然后从 bc。平移以相同的方式计算,另外第二个平移向量必须旋转 R ab.

预计会出现一些误差,具体取决于成对校准的准确性。相机姿势中的错误会在整个链条上累积。如果你有完整的相机姿势,你通常不会为 starting/ending 相机获得完全相同的姿势。