![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
主成分分析。 詳細...
#include <opencv2/core.hpp>
公開型 | |
| enum | Flags { DATA_AS_ROW = 0 , DATA_AS_COL = 1 , USE_AVG = 2 } |
公開メンバ関数 | |
| PCA () | |
| デフォルトコンストラクタ | |
| PCA (InputArray data, InputArray mean, int flags, double retainedVariance) | |
| PCA (InputArray data, InputArray mean, int flags, int maxComponents=0) | |
| Mat | backProject (InputArray vec) const |
| PC 射影からベクトルを再構成する。 | |
| void | backProject (InputArray vec, OutputArray result) const |
| PCA & | operator() (InputArray data, InputArray mean, int flags, double retainedVariance) |
| PCA & | operator() (InputArray data, InputArray mean, int flags, int maxComponents=0) |
| PCA を実行する | |
| Mat | project (InputArray vec) const |
| ベクトルを主成分部分空間へ射影する。 | |
| void | project (InputArray vec, OutputArray result) const |
| void | read (const FileNode &fn) |
| PCA オブジェクトを読み込む | |
| void | write (FileStorage &fs) const |
| PCA オブジェクトを書き出す | |
公開変数類 | |
| Mat | eigenvalues |
| 共分散行列の固有値 | |
| Mat | eigenvectors |
| 共分散行列の固有ベクトル | |
| Mat | mean |
| 射影の前に減算され、逆射影の後に加算される平均値 | |
主成分分析。
このクラスは、ベクトルの集合に対する特別な基底を計算するために用いる。基底は、入力ベクトル集合から計算した共分散行列の固有ベクトルで構成される。PCAクラスは、その基底で定義される新しい座標空間へのベクトルの変換、およびその逆変換も行える。通常、この新しい座標系では、元の集合に含まれる各ベクトル(およびそれらの線形結合)は、共分散行列の最も大きい固有値に対応する先頭のいくつかの成分だけで、かなり正確に近似できる。幾何学的には、共分散行列の支配的な固有値に対応するいくつかの固有ベクトルが張る部分空間へのベクトルの射影を計算することを意味する。そして通常、その射影は元のベクトルに非常に近い。したがって、高次元空間の元のベクトルを、部分空間における射影ベクトルの座標から成る、はるかに短いベクトルで表現できる。この変換はカルーネン・レーベ変換(Karhunen-Loeve Transform, KLT)としても知られる。http://en.wikipedia.org/wiki/Principal_component_analysis を参照。
以下のサンプルは、2つの行列を受け取る関数である。1つ目の関数は、PCA の計算に用いるベクトルの集合(1行が1ベクトル)を格納する。2つ目の関数は、別の「テスト」用ベクトルの集合(1行が1ベクトル)を格納する。まずこれらのベクトルを PCA で圧縮し、次に復元し、各ベクトルについて復元誤差ノルムを計算して表示する。:
| enum cv::PCA::Flags |
| cv::PCA::PCA | ( | ) |
デフォルトコンストラクタ
デフォルトコンストラクタは空のPCA構造体を初期化する。その他のコンストラクタは構造体を初期化し、PCA::operator()() を呼び出す。
| cv::PCA::PCA | ( | InputArray | data, |
| InputArray | mean, | ||
| int | flags, | ||
| int | maxComponents = 0 ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| data | 行列の行または行列の列として格納された入力サンプル。 |
| mean | 省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。 |
| flags | 操作フラグ。現在このパラメータはデータレイアウト(PCA::Flags)の指定にのみ使用される |
| maxComponents | PCA が保持すべきコンポーネントの最大数。デフォルトではすべてのコンポーネントが保持される。 |
| cv::PCA::PCA | ( | InputArray | data, |
| InputArray | mean, | ||
| int | flags, | ||
| double | retainedVariance ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| data | 行列の行または行列の列として格納された入力サンプル。 |
| mean | 省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。 |
| flags | 操作フラグ。現在このパラメータはデータレイアウト(PCA::Flags)の指定にのみ使用される |
| retainedVariance | PCA が保持すべき分散の割合。このパラメータを使用すると、保持するコンポーネント数を PCA に決めさせるが、常に最低でも2つは保持する。 |
| Mat cv::PCA::backProject | ( | InputArray | vec | ) | const |
主成分(PC)への射影からベクトルを復元する。
これらのメソッドは PCA::project の逆演算である。射影されたベクトルのPC座標を受け取り、元のベクトルを復元する。すべての主成分を保持していない限り、復元されたベクトルは元のベクトルと異なる。しかし通常、成分数が十分大きければ(それでも元のベクトルの次元数よりはるかに小さくても)その差は小さい。その結果として PCA が用いられる。
| vec | 主成分部分空間におけるベクトルの座標。レイアウトとサイズは PCA::project の出力ベクトルと同じである。 |
| void cv::PCA::backProject | ( | InputArray | vec, |
| OutputArray | result ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| vec | 主成分部分空間におけるベクトルの座標。レイアウトとサイズは PCA::project の出力ベクトルと同じである。 |
| result | 再構成されたベクトル。レイアウトとサイズは PCA::project の入力ベクトルと同じである。 |
| PCA & cv::PCA::operator() | ( | InputArray | data, |
| InputArray | mean, | ||
| int | flags, | ||
| double | retainedVariance ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| data | 行列の行または行列の列として格納された入力サンプル。 |
| mean | 省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。 |
| flags | 操作フラグ。現在このパラメータはデータレイアウトの指定にのみ使用される。(PCA::Flags) |
| retainedVariance | PCA が保持すべき分散の割合。このパラメータを使用すると、保持するコンポーネント数を PCA に決めさせるが、常に最低でも2つは保持する。 |
| PCA & cv::PCA::operator() | ( | InputArray | data, |
| InputArray | mean, | ||
| int | flags, | ||
| int | maxComponents = 0 ) |
PCAを実行する
この演算子は、与えられたデータセットに対してPCAを実行する。同じ PCA 構造体を複数のデータセットに対して再利用しても安全である。すなわち、その構造体が以前に別のデータセットで使われていた場合、既存の内部データは解放され、新しい eigenvalues、eigenvectors、mean が割り当てられて計算される。
計算された eigenvalues は大きいものから小さいものへ降順にソートされ、対応する eigenvectors が固有ベクトルの行として格納される。
| Mat cv::PCA::project | ( | InputArray | vec | ) | const |
ベクトルを主成分部分空間へ射影する。
これらのメソッドは、1つ以上のベクトルを主成分部分空間へ射影する。各ベクトルの射影は、主成分基底における係数で表される。1つ目の形式のメソッドは行列を返し、2つ目の形式はその結果を引数に書き込む。したがって1つ目の形式は式の一部として利用でき、2つ目の形式は処理ループ内でより効率的になりうる。
| vec | 入力ベクトル。PCA フェーズで使用された入力データと同じ次元かつ同じレイアウトでなければならない。すなわち、DATA_AS_ROW が指定されている場合、vec.cols==data.cols(ベクトルの次元数)であり、vec.rows は射影するベクトルの数となる。PCA::DATA_AS_COL の場合も同様である。 |
| void cv::PCA::project | ( | InputArray | vec, |
| OutputArray | result ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| vec | 入力ベクトル。PCA フェーズで使用された入力データと同じ次元かつ同じレイアウトでなければならない。すなわち、DATA_AS_ROW が指定されている場合、vec.cols==data.cols(ベクトルの次元数)であり、vec.rows は射影するベクトルの数となる。PCA::DATA_AS_COL の場合も同様である。 |
| result | 出力ベクトル。PCA::DATA_AS_COL の場合、出力行列は入力ベクトルの数と同じだけの列を持つ。つまり result.cols==vec.cols となり、行数は主成分の数(例えば、コンストラクタに渡された maxComponents パラメータ)と一致する。 |
| void cv::PCA::read | ( | const FileNode & | fn | ) |
PCA オブジェクトを読み込む
指定された FileNode から eigenvalues、eigenvectors、mean を読み込む
| void cv::PCA::write | ( | FileStorage & | fs | ) | const |
PCA オブジェクトを書き出す
指定された FileStorage に eigenvalues、eigenvectors、mean を書き出す
| Mat cv::PCA::eigenvalues |
共分散行列の固有値
| Mat cv::PCA::eigenvectors |
共分散行列の固有ベクトル
| Mat cv::PCA::mean |
射影の前に減算され、逆射影の後に加算される平均値