我正在尝试使用openCV在立体设置中进行相对姿势估计,其中我使用基本矩阵计算姿势,然后尝试使用cv :: triangulatePoints重建场景 . 由于这使我可以重建到任意比例,我认为如果初始基线(〜比例)已知(并且相机在X中纯粹翻译),我可以计算后续比例因子 . 但是即使相机没有移动,并且场景没有改变,如果我拍摄多对图像,每个重建都会产生不同的比例:我知道通过取两个点并比较它们之间的距离 . 整个场景要么放大要么缩小,重建本身本身并没有错 .

为了解决这个问题,我尝试了一些天真的东西:我得到了pair1和pair2之间规模变化的比例,并尝试了这个:

1. Say distance between 3d points A and B in pair 2 = s*distance between same points in pair 1,
2. Rescale whole scene obtained from pair2 by s.
3. Use perspective n point algorithm (solvePnP in opencv) with these rescaled 3d points and 2d correspondences from pair 2.

但我得到的答案是s * t1,其中t1是第一种情况下的翻译 . 这让我很困惑 . 因为场景没有太多变化,所以1和2之间的2d点对应没有太大变化 . 因此,即使我知道最初的“规模”(我认为这将是直截了当的),仍然无法确定重建的规模吗?为什么重建在每一步都给我任意结果,而且PnP如何神奇地知道我已经完成了整个重新缩放?

编辑:当相机静止时,而不是当其中一个相机移动时,这似乎更常发生 . 当摄像机静止时,比例因子到处都是 . 但是,例如,当基线加倍时,与初始重建相比,比例因子SOMETIMES返回接近2的值 .