![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
このクラスは、勾配が既知の関数に対する非線形・無制約の最小化を実行するために用いる。 詳細...
#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 オブジェクトへの参照を返す。 | |
Static Public Member Functions inherited from 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) |
| ファイルノードからアルゴリズムを読み込む。 | |
Additional Inherited Members | |
Public Member Functions inherited from cv::MinProblemSolver | |
| virtual Ptr< Function > | getFunction () 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 |
| ソルバの終了条件を設定する。 | |
Public Member Functions inherited from 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 |
Protected Member Functions inherited from cv::Algorithm | |
| void | writeFormat (FileStorage &fs) const |
このクラスは、勾配が既知の関数に対する非線形・無制約の最小化を実行するために用いる。
n 次元ユークリッド空間上で定義された関数に対し、非線形共役勾配法 (Nonlinear Conjugate Gradient method) を用いる。実装は、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 次元空間内の1点を受け取り(第1引数がその点の座標の配列を表す)、その勾配を計算する(結果は第2引数に配列として格納される)。
|
static |
この関数は、すぐに使用できる状態の ConjGradSolver オブジェクトへの参照を返す。
すべての引数は省略可能であるため、この処理は引数をまったく指定せずに呼び出すこともできる。その場合はデフォルト値が用いられる。意味のあるデフォルト値が存在するのは終了条件だけであるため、関数を create() に渡さなかった場合は、得られたオブジェクトに対して MinProblemSolver::setFunction() を呼び出す必要がある。それ以外の場合、2つの方法(create() に渡す方法と、省略して MinProblemSolver::setFunction() を呼び出す方法)は完全に等価である(そして不正な入力が検出された場合は、同じエラーを同じ方法で出力する)。
| f | 最小化される関数へのポインタ。MinProblemSolver::setFunction を通じて渡すものと同様。 |
| termcrit | アルゴリズムの終了条件。MinProblemSolver::setTermCriteria を通じて渡すものと同様。 |