OpenCV 4.5.3(日本語機械翻訳)
|
Singular Value Decomposition [詳解]
#include <core.hpp>
公開型 |
|
enum | Flags { MODIFY_A = 1 , NO_UV = 2 , FULL_UV = 4 } |
公開メンバ関数 |
|
SVD () | |
デフォルトコンストラクタ[【詳解】(英語]
|
|
SVD (InputArray src, int flags=0) | |
SVD & | operator() (InputArray src, int flags=0) |
を実行する演算子.SVD. 先に確保された u, w, vt は解放されます.[【詳解】(英語]
|
|
void | backSubst (InputArray rhs, OutputArray dst) const |
特異値後退代入を行います.[【詳解】(英語]
|
|
静的公開メンバ関数 |
|
static void | compute (InputArray src, OutputArray w, OutputArray u, OutputArray vt, int flags=0) |
行列を分解し,その結果をユーザが用意した行列に格納します.[【詳解】(英語]
|
|
static void | compute (InputArray src, OutputArray w, int flags=0) |
static void | backSubst (InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst) |
背面置換を行います. |
|
static void | solveZ (InputArray src, OutputArray dst) |
は,過小決定された特異な連立方程式を解きます.[【詳解】(英語]
|
|
template<typename _Tp , int m, int n, int nm> | |
static void | compute (const Matx< _Tp, m, n > &a, Matx< _Tp, nm, 1 > &w, Matx< _Tp, m, nm > &u, Matx< _Tp, n, nm > &vt) |
template<typename _Tp , int m, int n, int nm> | |
static void | compute (const Matx< _Tp, m, n > &a, Matx< _Tp, nm, 1 > &w) |
template<typename _Tp , int m, int n, int nm, int nb> | |
static void | backSubst (const Matx< _Tp, nm, 1 > &w, const Matx< _Tp, m, nm > &u, const Matx< _Tp, n, nm > &vt, const Matx< _Tp, m, nb > &rhs, Matx< _Tp, n, nb > &dst) |
公開変数類 |
|
Mat | u |
Mat | w |
Mat | vt |
特異値分解(Singular Value Decomposition)
浮動小数点行列の特異値分解を計算するクラス。特異値分解は,最小二乗問題,過小決定された連立方程式,行列の反転,条件数の計算などに利用されます.
行列の条件数や行列式の絶対値を計算したい場合は、次のようなものは必要ありません。u
およびvt
. flags= を渡すことができます.SVD::NO_UV|... . 別のフラグSVD::FULL_UVは,フルサイズのuとvtを計算しなければならないことを示していますが,ほとんどの場合は必要ありません.
enum cv::SVD::Flags |
cv::SVD::SVD | ( | ) |
デフォルトコンストラクタ
は,空のSVD構造体
cv::SVD::SVD | ( | InputArray | src, |
int |
flags
=
0 |
||
) |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。SVD構造体を初期化し,SVD::operator()を呼び出します.
src | 分解された行列。深さは CV_32F または CV_64F でなければいけません. |
flags | 演算フラグ (SVD::Flags) |
|
static |
void cv::SVD::backSubst | ( | InputArray | rhs, |
OutputArray | dst | ||
) | const |
特異値後退代入を行います.
このメソッドは,指定された右辺に対する後退代入を計算します.
この手法を用いると,便利な連立方程式の非常に正確な解を得ることができます.あるいは,過決定連立方程式の最良の(最小二乗法による)擬似解を得ることができます.
rhs | 線形システムの右辺 (u*w*v')*dst = rhs to be solved, ここでAは事前に分解されている。 |
dst | 連立方程式の発見された解。 |
|
static |
|
static |
|
static |
これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。行列の特異値を計算します。
src | 分解された行列。深さは CV_32F または CV_64F でなければいけません. |
w | 計算された特異値 |
flags | 操作フラグ - 参照SVD::Flags. |
|
static |
行列を分解し,その結果をユーザが用意した行列に格納します.
このメソッド/関数はSVD行列の特異値を計算します.とは異なりSVD::SVDコンストラクタや SVD::operator() とは異なり,これらのメソッド/関数は結果をユーザが指定した行列に格納します.
src | 分解された行列。深さは CV_32F または CV_64F でなければいけません. |
w | 計算された特異値 |
u | 計算された左特異点ベクトル |
vt | 右特異点ベクトルの転置行列。 |
flags | 操作フラグ - 参照SVD::Flags. |
SVD & cv::SVD::operator() | ( | InputArray | src, |
int |
flags
=
0 |
||
) |
を実行する演算子.SVD. 先に確保された u, w, vt は解放されます.
この演算子は,与えられた行列の特異値分解を行います.このとき,u,vt
と,特異値のベクトル w が構造体に格納されます.同じSVD構造体は,異なる行列に対して何度でも再利用できます.毎回,必要に応じて,前の u,vt
, , および w が再生され,新しい行列が作成されますが,これらはすべてMat::create.
src | 分解された行列。深さは CV_32F または CV_64F でなければいけません. |
flags | 演算フラグ (SVD::Flags) |
|
static |
は,過小決定された特異な連立方程式を解きます.
このメソッドは,特異な連立方程式 A*x = 0 の単位長さの解 x を求めます.A のランクに応じて,解が存在しないことも,単一の解であることも,無限の数の解であることもあります.一般的に、このアルゴリズムは以下の問題を解きます。
src | 左辺の行列。 |
dst | 見つかった解。 |