OpenCV 4.12.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
 最佳化函式的 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 維空間中的一個點(第一個引數表示該點的座標陣列)並計算其梯度(應將其儲存在第二個引數中作為陣列)。

注意
因此,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:901
@ EPS
迭代演算法停止時所需的精度或引數變化
定義 types.hpp:902

成員函式文件

◆ 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())是完全等效的(並且如果檢測到無效輸入,將以相同的方式刪除相同的錯誤)。

引數
◆ hashtableResize()指向將被最小化的函式的指標,類似於您透過 MinProblemSolver::setFunction 提交的函式。
終止條件演算法的終止標準,類似於您透過 MinProblemSolver::setTermCriteria 提交的終止標準。

此類文件由以下檔案生成