这个问题与“C++中的数值配方”一书有关,所以它会保留给对它以及多维优化有一点了解的人。
我正在编写一个需要搜索多维根的程序,为了解决它,我正在使用多维牛顿根查找方法,即“newt”过程。
对于那些对细节感兴趣的人,我正在尝试根据一些特征点(两个摄像机看到的特征点)将可变形 3D 模型拟合到对象的立体视图中。
为此,我正在使用带有以下内容的蝾螈程序:
- 11 输入参数:我的可变形模型可以用 11 个参数建模(由 5 个几何参数和 3D 对象位置的 6 个自由度组成):
- 14我需要找到根的输出参数:基于相机识别的特征点,并给定一组“输入参数”,我可以计算相机看到的特征点与其理论位置。我有 7 个这样的点,所以这给了我 14 个参数(7 个距离乘以 2,因为我计算了两个相机上的距离)
我的问题是我的输出参数 (14) 比输入参数 (11) 多:每当我调用“newt”时,算法总是收敛,但是它会找到一个几乎完美地最小化 11 个第一个输出参数的解决方案,但这有剩下的 3 个参数有很多错误。
但是,我希望在输出参数之间统一分配错误。
我已经尝试过下面描述的方法:
- 尝试将 14 个输出参数组合成 11 个参数(例如,您取某些距离的平均值,而不是使用两个距离)。但是我对这种方法不是 100% 满意
- 按照以下原则混合几种解决方案:
- 调用 mnewt 并记住找到的根
- 改变14个输出参数的顺序
- 再次调用 mnewt 并记住找到的根
- 计算一个解是两个找到的根的平均值
有谁知道更通用的方法,其中求根算法会支持在输出参数之间均匀划分的错误,而不是支持第一个参数?