![]() |
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 提交的終止標準。 |