使用极线几何进行三维三角测量的扩展

6
我目前正在一个项目中工作,需要估计使用单目相机检测到的2D兴趣点的3D坐标。
更准确地说,我有一个图像序列(已校准),当接收到新图像时,需要在左侧(先前)图像和右侧当前图像之间三角化点以获取3D点。
为此,我按照以下步骤进行:
1. 在当前图像中提取关键点 2. 在当前图像和先前图像之间建立对应关系 3. 使用RANSAC和高度点算法计算本质矩阵E 4. 从E中提取变换矩阵R和平移向量T 5. 使用正交回归通过三角测量计算3D点
当我将结果3D点重新投影到图像上时,得到的结果不正确。但是,我已经了解到三角化的点只定义为一个不确定的比例因子。
所以我的问题是: 在这种情况下,“比例尺度”是什么意思?如何获得场景世界坐标系中的真实3D点?
感谢您的帮助!

你的三角测量代码是什么? - aledalgrande
这个链接实际上包含了完成你列表中所有项目所需的代码。 - Alex Kreimer
2个回答

3
您可能遇到了一个错误或者基础矩阵估计不准确的问题。未知的比例因素不应该是导致您看到的重建误差的原因。无论全局尺度如何,从好的匹配中估计出的三维点和有效的基础矩阵投影到图像对上的结果应该是一致的。
在这个背景下,“按比例缩放”的意思是,即使使用内部校准的相机,估计基础矩阵的标准方法也会产生相同的结果,如果您用一个所有物体都放大或缩小相同量级的场景替换您的场景。您可以通过以下两种方式消除这种歧义:
1. 在事前进行消除,通过使用固定比例的方法来校准相机外参参数(即一个相机与另一个相机之间的位置和方向)。例如,使用已知形状和大小的校准物体。 2. 在立体重建时进行消除,例如,通过识别场景中一个已知物理大小的对象,并强制要求您计算的三维重建与该大小匹配。

谢谢Francesco的解释,实际上我需要在世界框架下的正确3D坐标,这与相机框架不同。相机姿态也必须在世界框架中表示。这就是为什么我不能直接使用三角测量后的3D点的原因。 - user75
如果您正在使用现代移动设备,还可以从惯性传感器获取度量尺度。例如:http://cvg.ethz.ch/mobile/LiveMetric3DReconstructionICCV2013.pdf - aledalgrande

0

我的结构运动经验是,通过使用基础矩阵/本质矩阵提取点云会导致不同的点云大小。我理解的原因是因为基础矩阵/本质矩阵仅在以下情况下有效:

x1^t * F * x2 = 0。

如果F的比例发生变化,则此方程也有效。因此,我们没有尺度不变性。

从旧图像对计算出的现有点云中提取新相机位置效果非常好。为此,您必须记住之前图像的2D 3D对应关系。这称为透视n点相机姿态估计(PnP)。OpenCV有一些方法可用于此。

以下是结构运动的一些结论:

结构运动,根据2D图像点对应重建3D点云


非常感谢您提供的链接! - user75
1
据我所知,该方程仅在第二个相机与第一个相机仅有平移不同的情况下才有效。 - aledalgrande
从来没有听说过这个。我们的图像进行了一些旋转,效果很好。 - PeterNL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接