OpenCV  4.10.0
开源计算机视觉库
正在加载...
正在搜索...
没有匹配项
静态公有成员函数 | 所有成员列表
cv::ConjGradSolver 类参考

该类用于执行已知梯度的函数的非线性无约束最小化。 更多...

#include <opencv2/core/optim.hpp>

cv::ConjGradSolver 的协作图

静态公有成员函数

static Ptr< ConjGradSolvercreate (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< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 

其他继承成员

- 从 cv::MinProblemSolver 继承的公有成员函数
virtual Ptr< FunctiongetFunction () const =0
 获取优化函数。
 
virtual TermCriteria getTermCriteria () const =0
 获取先前为该算法设置的终止准则。
 
virtual double minimize (InputOutputArray x)=0
 实际运行算法并执行最小化。
 
virtual void setFunction (const Ptr< Function > &f)=0
 设置优化函数。
 
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 的一篇清晰易懂的文章 [An Introduction to the Conjugate Gradient Method Without the Agonizing Pain](http://www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf)。该方法可以看作是对标准共轭梯度法(例如,参见 http://en.wikipedia.org/wiki/Conjugate_gradient_method)的改编,用于数值求解线性方程组。

需要注意的是,该方法虽然是确定性的,但它更像是一种启发式方法,因此可能收敛于局部最小值,而不是全局最小值。更糟糕的是,它的大部分行为都受梯度支配,因此它基本上无法区分局部最小值和最大值。因此,如果它从足够靠近局部最大值的地方开始,它可能会收敛于该局部最大值。另一个明显的限制是,它应该能够在任意点计算函数的梯度,因此最好有梯度的解析表达式,并且计算负担应该由用户承担。

后者是通过 MinProblemSolver::Function 接口(表示被优化的函数)的 getGradient 方法实现的。该方法接受 n 维空间中的一个点(第一个参数表示该点的坐标数组),并计算其梯度(应该将其存储在第二个参数中,作为一个数组)。

注意
ConjGradSolver 因此没有在基本 MinProblemSolver 接口中添加任何新方法。
终止准则应满足以下条件
termcrit.type == (TermCriteria::MAX_ITER + TermCriteria::EPS) && termcrit.epsilon > 0 && termcrit.maxCount > 0
// 或
termcrit.type == TermCriteria::MAX_ITER) && termcrit.maxCount > 0
@ MAX_ITER
同上
定义 types.hpp:894
@ EPS
迭代算法停止所需的精度或参数变化。
定义 types.hpp:895

成员函数文档

◆ create()

static Ptr< ConjGradSolver > cv::ConjGradSolver::create ( const Ptr< MinProblemSolver::Function > &  f = PtrConjGradSolver::Function >(),
TermCriteria  termcrit = TermCriteria(TermCriteria::MAX_ITER+TermCriteria::EPS, 5000, 0.000001) 
)
static

此函数返回指向可直接使用的 ConjGradSolver 对象的引用。

所有参数都是可选的,因此即使没有参数,也可以调用此过程。在这种情况下,将使用默认值。由于终止准则的默认值是唯一合理的值,因此如果未将函数提供给 create(),则应在获得的对象上调用 MinProblemSolver::setFunction()。否则,这两种方式(提交给 create() 或省略它并调用 MinProblemSolver::setFunction())是完全等效的(并且将以相同的方式丢弃相同的错误,如果检测到无效输入)。

参数
f指向要最小化的函数的指针,类似于您通过 MinProblemSolver::setFunction 提交的函数。
termcrit算法的终止准则,类似于您通过 MinProblemSolver::setTermCriteria 提交的准则。

此类的文档是从以下文件生成的