![]() |
OpenCV 4.12.0
开源计算机视觉
|
此类用于执行具有已知梯度的函数的非线性非约束最小化。更多...
#include <opencv2/core/optim.hpp>
静态公共成员函数 | |
| static Ptr< ConjGradSolver > | create (const Ptr< MinProblemSolver::Function > &f=Ptr< ConjGradSolver::Function >(), TermCriteria termcrit=TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5000, 0.000001)) |
| 此函数返回指向随时可用的 ConjGradSolver 对象的引用。 | |
从 cv::Algorithm 继承的静态公共成员函数 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | load (const String &filename, const String &objname=String()) |
| 从文件中加载算法。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | loadFromString (const String &strModel, const String &objname=String()) |
| 从字符串加载算法。 | |
| template<typename _Tp > | |
| static Ptr< _Tp > | read (const FileNode &fn) |
| 从文件节点读取算法。 | |
其他继承的成员 | |
从 cv::MinProblemSolver 继承的公共成员函数 | |
| virtual Ptr< Function > | getFunction () const =0 |
| 优化函数的 Getter。 | |
| virtual TermCriteria | getTermCriteria () const =0 |
| 此算法先前设置的终止标准的 Getter。 | |
| virtual double | minimize (InputOutputArray x)=0 |
| 实际运行算法并执行最小化。 | |
| virtual void | setFunction (const Ptr< Function > &f)=0 |
| 优化函数的 Setter。 | |
| virtual void | setTermCriteria (const TermCriteria &termcrit)=0 |
| 设置求解器的终止标准。 | |
从 cv::Algorithm 继承的公共成员函数 | |
| Algorithm () | |
| virtual | ~Algorithm () |
| virtual void | clear () |
| 清除算法状态。 | |
| virtual bool | empty () const |
| 如果 Algorithm 为空(例如,在最开始或不成功的读取之后),则返回 true。 | |
| virtual String | getDefaultName () const |
| virtual void | read (const FileNode &fn) |
| 从文件存储中读取算法参数。 | |
| virtual void | save (const String &filename) const |
| void | write (const Ptr< FileStorage > &fs, const String &name=String()) const |
| virtual void | write (FileStorage &fs) const |
| 将算法参数存储到文件存储中。 | |
| void | write (FileStorage &fs, const String &name) const |
从 cv::Algorithm 继承的保护成员函数 | |
| void | writeFormat (FileStorage &fs) const |
此类用于执行具有已知梯度的函数的非线性非约束最小化。
定义在 n 维欧几里得空间上,使用非线性共轭梯度法。该实现基于 Jonathan Richard Shewchuk 撰写的精美清晰的解释性文章 [无痛苦的共轭梯度法简介](http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf)。该方法可以看作是标准共轭梯度法的改编(例如,参见 http://en.wikipedia.org/wiki/Conjugate_gradient_method)用于数值求解线性方程组。
应该注意的是,这种方法虽然是确定性的,但更像是一种启发式方法,因此可能会收敛到局部最小值,而不一定是全局最小值。更糟糕的是,它的大部分行为都受梯度控制,因此它本质上无法区分局部最小值和最大值。因此,如果它从足够接近局部最大值的位置开始,它可能会收敛到该最大值。另一个明显的限制是,应该可以在任何点计算函数的梯度,因此最好有梯度的解析表达式,并且计算负担应由用户承担。
后一种责任通过 MinProblemSolver::Function 接口(表示正在优化的函数)的 getGradient 方法完成。此方法采用 n 维空间中的一个点(第一个参数表示该点的坐标数组)并计算其梯度(应将其存储在第二个参数中作为数组)。
|
static |
此函数返回指向随时可用的 ConjGradSolver 对象的引用。
所有参数都是可选的,因此即使没有参数也可以调用此过程。在这种情况下,将使用默认值。由于终止标准的默认值是唯一合理的,因此如果函数未提供给 create(),则应在获得的对象上调用 MinProblemSolver::setFunction()。否则,这两种方式(将其提交给 create() 或忽略它并调用 MinProblemSolver::setFunction())是完全等效的(并且如果检测到无效输入,将以相同的方式删除相同的错误)。
| ◆ hashtableResize() | 指向将被最小化的函数的指针,类似于您通过 MinProblemSolver::setFunction 提交的函数。 |
| 终止条件 | 算法的终止标准,类似于您通过 MinProblemSolver::setTermCriteria 提交的终止标准。 |