Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如果初始比例已知,是否可以计算后续立体重建的比例因子?_Opencv_Computer Vision_Triangulation_3d Reconstruction - Fatal编程技术网

Opencv 如果初始比例已知,是否可以计算后续立体重建的比例因子?

Opencv 如果初始比例已知,是否可以计算后续立体重建的比例因子?,opencv,computer-vision,triangulation,3d-reconstruction,Opencv,Computer Vision,Triangulation,3d Reconstruction,我正在尝试使用openCV在立体设置中进行相对姿势估计,其中我使用基本矩阵计算姿势,然后尝试使用cv::triangulatePoints重建场景。由于这使我可以重建到任意比例,因此我认为如果初始基线(~scale)已知(并且相机完全转换为X),我可以计算后续的比例因子。但是,即使相机不移动,场景也不改变,如果我拍摄多对图像,每个重建都会产生不同的比例:我通过拍摄两个点并比较它们之间的距离就知道了这一点。整个场景要么放大要么缩小,重建本身并没有错 为了解决这个问题,我尝试了一些简单的方法:我得到

我正在尝试使用openCV在立体设置中进行相对姿势估计,其中我使用基本矩阵计算姿势,然后尝试使用cv::triangulatePoints重建场景。由于这使我可以重建到任意比例,因此我认为如果初始基线(~scale)已知(并且相机完全转换为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又是如何神奇地知道我已经完成了整个重缩放的


编辑:当相机静止时,这种情况似乎比其中一个相机移动时更常见。当摄像机静止不动时,比例因子会遍布整个区域。但是,例如,当基线加倍时,与初始重建相比,比例因子有时返回接近2的值

最后我不明白。。。你用的是两个摄像头还是一个?如果使用两个摄影机,则不会出现任意比例。比例设置为两个摄像机之间的特定距离。两个摄像机,这就是问题所在:即使摄像机没有移动,比例也在变化。这对我来说毫无意义。如果我用基线b固定相机并拍摄10对图像,当重建时,这10对图像有10个不同的比例,但总是b的倍数。