OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。

主成分分析。 詳細...

#include <opencv2/core.hpp>

Collaboration diagram for cv::PCA:

公開型

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 で圧縮し、次に復元し、各ベクトルについて復元誤差ノルムを計算して表示する。:

using namespace cv;
PCA compressPCA(const Mat& pcaset, int maxComponents,
const Mat& testset, Mat& compressed)
{
PCA pca(pcaset, // pass the data
Mat(), // we do not have a pre-computed mean vector,
// so let the PCA engine to compute it
PCA::DATA_AS_ROW, // indicate that the vectors
// are stored as matrix rows
// (use PCA::DATA_AS_COL if the vectors are
// the matrix columns)
maxComponents // specify, how many principal components to retain
);
// if there is no test data, just return the computed basis, ready-to-use
if( !testset.data )
return pca;
CV_Assert( testset.cols == pcaset.cols );
compressed.create(testset.rows, maxComponents, testset.type());
Mat reconstructed;
for( int i = 0; i < testset.rows; i++ )
{
Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed;
// compress the vector, the result will be stored
// in the i-th row of the output matrix
pca.project(vec, coeffs);
// and then reconstruct it
pca.backProject(coeffs, reconstructed);
// and measure the error
printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2));
}
return pca;
}
n-dimensional dense array class
Definition mat.hpp:840
Mat row(int y) const
Creates a matrix header for the specified matrix row.
uchar * data
pointer to the data
Definition mat.hpp:2206
void create(int rows, int cols, int type)
Allocates new array data if needed.
int cols
Definition mat.hpp:2204
int rows
the number of rows and columns or (-1, -1) when the matrix has more than 2 dimensions
Definition mat.hpp:2204
int type() const
Returns the type of a matrix element.
Principal Component Analysis.
Definition core.hpp:2506
@ DATA_AS_ROW
indicates that the input samples are stored as matrix rows
Definition core.hpp:2508
double norm(InputArray src1, int normType=NORM_L2, InputArray mask=noArray())
Calculates the absolute norm of an array.
@ NORM_L2
Definition base.hpp:185
#define CV_Assert(expr)
Checks a condition at runtime and throws exception if it fails.
Definition base.hpp:423
Definition core.hpp:107
参照
calcCovarMatrix, mulTransposed, SVD, dft, dct
例
samples/cpp/pca.cpp、および samples/cpp/tutorial_code/ml/introduction_to_pca/introduction_to_pca.cpp。

列挙型メンバ詳解

◆ Flags

列挙値
DATA_AS_ROW 

入力サンプルが行列の行として格納されていることを示す

DATA_AS_COL 

入力サンプルが行列の列として格納されていることを示す

USE_AVG 

構築子と解体子の詳解

◆ PCA() [1/3]

cv::PCA::PCA ( )

デフォルトコンストラクタ

デフォルトコンストラクタは空のPCA構造体を初期化する。その他のコンストラクタは構造体を初期化し、PCA::operator()() を呼び出す。

◆ PCA() [2/3]

cv::PCA::PCA ( InputArray data,
InputArray mean,
int flags,
int maxComponents = 0 )

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
data行列の行または行列の列として格納された入力サンプル。
mean省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。
flags操作フラグ。現在このパラメータはデータレイアウト(PCA::Flags)の指定にのみ使用される
maxComponentsPCA が保持すべきコンポーネントの最大数。デフォルトではすべてのコンポーネントが保持される。

◆ PCA() [3/3]

cv::PCA::PCA ( InputArray data,
InputArray mean,
int flags,
double retainedVariance )

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
data行列の行または行列の列として格納された入力サンプル。
mean省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。
flags操作フラグ。現在このパラメータはデータレイアウト(PCA::Flags)の指定にのみ使用される
retainedVariancePCA が保持すべき分散の割合。このパラメータを使用すると、保持するコンポーネント数を PCA に決めさせるが、常に最低でも2つは保持する。

メンバ関数詳解

◆ backProject() [1/2]

Mat cv::PCA::backProject ( InputArray vec) const

主成分(PC)への射影からベクトルを復元する。

これらのメソッドは PCA::project の逆演算である。射影されたベクトルのPC座標を受け取り、元のベクトルを復元する。すべての主成分を保持していない限り、復元されたベクトルは元のベクトルと異なる。しかし通常、成分数が十分大きければ(それでも元のベクトルの次元数よりはるかに小さくても)その差は小さい。その結果として PCA が用いられる。

引数
vec主成分部分空間におけるベクトルの座標。レイアウトとサイズは PCA::project の出力ベクトルと同じである。

◆ backProject() [2/2]

void cv::PCA::backProject ( InputArray vec,
OutputArray result ) const

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
vec主成分部分空間におけるベクトルの座標。レイアウトとサイズは PCA::project の出力ベクトルと同じである。
result再構成されたベクトル。レイアウトとサイズは PCA::project の入力ベクトルと同じである。

◆ operator()() [1/2]

PCA & cv::PCA::operator() ( InputArray data,
InputArray mean,
int flags,
double retainedVariance )

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

引数
data行列の行または行列の列として格納された入力サンプル。
mean省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。
flags操作フラグ。現在このパラメータはデータレイアウトの指定にのみ使用される。(PCA::Flags)
retainedVariancePCA が保持すべき分散の割合。このパラメータを使用すると、保持するコンポーネント数を PCA に決めさせるが、常に最低でも2つは保持する。

◆ operator()() [2/2]

PCA & cv::PCA::operator() ( InputArray data,
InputArray mean,
int flags,
int maxComponents = 0 )

PCAを実行する

この演算子は、与えられたデータセットに対してPCAを実行する。同じ PCA 構造体を複数のデータセットに対して再利用しても安全である。すなわち、その構造体が以前に別のデータセットで使われていた場合、既存の内部データは解放され、新しい eigenvalues、eigenvectors、mean が割り当てられて計算される。

計算された eigenvalues は大きいものから小さいものへ降順にソートされ、対応する eigenvectors が固有ベクトルの行として格納される。

引数
data行列の行または行列の列として格納された入力サンプル。
mean省略可能な平均値。行列が空の場合(noArray())、平均はデータから計算される。
flags操作フラグ。現在このパラメータはデータレイアウトの指定にのみ使用される。(Flags)
maxComponentsPCA が保持すべきコンポーネントの最大数。デフォルトではすべてのコンポーネントが保持される。

◆ project() [1/2]

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 の場合も同様である。

◆ project() [2/2]

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 パラメータ)と一致する。

◆ read()

void cv::PCA::read ( const FileNode & fn)

PCA オブジェクトを読み込む

指定された FileNode から eigenvalues、eigenvectors、mean を読み込む

◆ write()

void cv::PCA::write ( FileStorage & fs) const

PCA オブジェクトを書き出す

指定された FileStorage に eigenvalues、eigenvectors、mean を書き出す

メンバ変数詳解

◆ eigenvalues

Mat cv::PCA::eigenvalues

共分散行列の固有値

◆ eigenvectors

Mat cv::PCA::eigenvectors

共分散行列の固有ベクトル

◆ mean

Mat cv::PCA::mean

射影の前に減算され、逆射影の後に加算される平均値


このクラス詳解は次のファイルから抽出されました: