OpenCv で PCA クラスを使用して、C++ アプリケーションで主成分分析操作を実行しようとしています。私はOpenCVを初めて使用し、問題を抱えています。誰かが助けてくれれば幸いです。
Matlab と PCA クラスの両方でデモの例を試して、2*10 データ配列とパラメーターを使用している場合の回答を確認しています(CV_PCA_DATA_AS_COL)
。ここでは 2 つの次元があるため、それぞれ 2 つの固有ベクトルがあると予想されますには 2 つの要素があり、これは期待どおり正常に機能し、Matlab と同じ結果が得られました。
しかし、10*2 データ配列を使用している間 (通常、サンプル数が次元数より少ない場合)、固有ベクトルの (2*10) 配列を取得します。つまり、それぞれ 2 つの要素を持つ 10 個の固有ベクトル。これは予期されていないことであり、Matlab によって与えられた結果ではありません (Matlab は固有ベクトルの 10*10 行列を与えます)。
なぜこれらの結果が得られたのかわかりません。これにより、アプリケーションの主要コンポーネントにデータを投影できません。何か助けはありますか?
PS:私が使用したコード:
Mat Mean ;
Mat H(10, 2, CV_32F); // then the matrix is filled by data
PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0) ;
pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0) ;
cout<<pca.eigenvectors.rows // gives 2 instead of 10
cout<<pca.eigenvectors.cols // gives 10