我正在阅读OpenCV中的函数
solvePnP()
的源代码。当flags
参数使用默认值SOLVEPNP_ITERATIVE
时,它会调用cvFindExtrinsicCameraParams2
函数。在该函数中,首先使用DLT算法(如果我们有一个非平面的3D点集)初始化6DOF相机姿态,然后使用CvLevMarq solver
最小化重投影误差。
我的问题是:DLT将问题公式化为线性最小二乘问题,并使用SVD分解求解,这似乎是一个最优解,为什么我们还要之后使用Lev-Marq迭代方法呢?
或者说,DLT算法的问题/限制在哪里导致其表现较差?为什么闭合形式的解结果是成本函数的一个局部最小值?
opencv
中的CvLevMarq
求解器一样。我的意思是 DLT 似乎是一种闭式形式的最小化代价函数的方法,为什么它仍然比较低级(局部最小值)呢? - zhangxaochen