我正在尝试使用 Open CV(EPNP、迭代等)中的 PNP 算法实现来获取两个摄像机对中摄像机的度量姿态估计(不是传统的立体装置,摄像机可以相互独立地自由移动) . 我目前的图像来源是机器人模拟器(Gazebo),其中两个摄像头在物体场景中进行模拟。图像几乎是理想的:即零失真,无伪影。
所以首先,这是我的第一对图像。
我假设正确的相机是“原点”。在公制世界坐标中,左相机位于 (1,1,1),右相机位于 (-1,1,1)(沿 X 的 2m 基线)。使用特征匹配,我构造了基本矩阵,从而构造了左相机的 R 和 t 右对齐。这就是我得到的。
R in euler angles: [-0.00462468, -0.0277675, 0.0017928]
t matrix: [-0.999999598978524; -0.0002907901840156801; -0.0008470441900959029]
这是正确的,因为位移仅沿相机框架中的 X 轴。对于第二对,左侧相机现在位于 (1,1,2)(向上移动 1m)。
现在左右的 R 和 t 变为:
R in euler angles: [0.0311084, -0.00627169, 0.00125991]
t matrix: [-0.894611301085138; -0.4468450866008623; -0.0002975759140359637]
这又是有道理的:没有旋转;沿 Y 轴的位移是基线(沿 X)的一半,依此类推,尽管这个 t 并没有给我真正的度量估计。
因此,为了在案例 2 中获得姿态的度量估计,我在案例 1 中使用来自摄像机 1 和摄像机 2 的点构建了 3D 点(考虑到已知基线:即 2m),然后使用这些点运行 PNP 算法案例 2 中的 3D 点和图像点。奇怪的是,ITERATIVE 和 EPNP 算法都给了我类似且完全错误的结果,如下所示:
Pose according to final PNP calculation is:
Rotation euler angles: [-9.68578, 15.922, -2.9001]
Metric translation in m: [-1.944911461358863; 0.11026997013253; 0.6083336931263812]
我在这里缺少一些基本的东西吗?我认为这对于 PNP 来说应该是一个相对简单的计算,因为没有失真等。任何意见或建议都会非常有帮助,谢谢!