gpt4 book ai didi

opencv - 为什么直接线性变换 (DLT) 不能给出最佳的相机外部参数?

转载 作者:太空宇宙 更新时间:2023-11-03 20:45:11 30 4
gpt4 key购买 nike

我正在阅读函数的源代码 solvePnP()在 OpenCV 中,当 flags 参数使用默认值 SOLVEPNP_ITERATIVE 时,它会调用 cvFindExtrinsicCameraParams2 ,其中它首先使用 DLT 算法(如果我们有一组非平面的 3D 点)来初始化 6DOF 相机姿势,第二个使用 CvLevMarq 求解器 来最小化重投影误差。

我的问题是:DLT把问题表述为线性最小二乘问题,用SVD分解求解,貌似是最优解,为什么后来还是用Lev-Marq迭代法?

或者,DLT 算法劣势的问题/限制是什么?为什么封闭形式的解决方案会导致成本函数的局部最小值?

最佳答案

当您想要找到问题的解决方案时,第一步是用数学术语表达这个问题,然后您可以使用现有的数学工具来找到方程式的解决方案。然而,有趣的问题通常可以用许多不同的数学方式来表达,每一种方式都可能导致略有不同的解决方案。然后需要分析不同的方法,以了解哪种方法提供最稳定/准确/高效等解决方案。

在 PnP 问题的情况下,我们希望在给定 3D 点及其投影图像平面之间的关联的情况下找到相机位姿。

从数学上表达此问题的第一种方法是将其转化为线性最小二乘问题。这种方法被称为 DLT 方法,它很有趣,因为线性最小二乘法有一个封闭形式的解决方案,可以使用奇异值分解稳健地找到它。然而,这种方法假设相机姿势 P 有 12 个自由度,而实际上它只有 6 个(3 个用于 3D 旋转加上 3 个用于 3D 平移)。要从这种方法的结果中获得 6DOF 相机姿态,需要一个近似值(这不包括在 DLT 的线性成本函数中),从而导致不准确的解决方案。

从数学上表达 PnP 问题的第二种方法是使用几何误差作为成本函数,并找到使几何误差最小的相机位姿。由于几何误差是非线性的,因此该方法使用迭代求解器(例如 Levenberg Marquardt 算法)来估计解。此类算法可以考虑相机姿势的 6 个自由度,从而得出准确的解决方案。然而,由于它们是迭代方法,因此需要为它们提供解决方案的初始估计,这在实践中通常是使用 DLT 方法获得的。

现在回答你的问题标题:当然,DLT 算法给出了最佳的相机外部参数,但它仅在 DLT 算法求解的线性成本函数的意义上是最佳的。多年来,科学家们发现了更复杂的成本函数,可以得到更准确的解决方案,但也更难解决。

关于opencv - 为什么直接线性变换 (DLT) 不能给出最佳的相机外部参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827812/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com