我想對當前的數據集執行PCA,我有8組數據,對於每條數據,我有618條關於它的信息。下面是到目前爲止我曾嘗試的代碼:用於使用Emgu的數據集的PCA
double[,] RawData = new double[8, 618];
for (int i = 0; i < 8; i++)//Copies Data to Emgu Matrix
{
for (int j = 0; j < 618; j++)
{
double val = Convert.ToDouble(DataList[i][j]);
RawData.SetValue(val, i, j);
}
}
Matrix<Double> DataMatrix = new Matrix<Double>(RawData);
Matrix<Double> Mean = new Matrix<Double>(1, 618);
Matrix<Double> EigenValues = new Matrix<Double>(1, 618);
Matrix<Double> EigenVectors = new Matrix<Double>(618, 618);
CvInvoke.cvCalcPCA(DataMatrix, Mean, EigenValues, EigenVectors, Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_COL);
Matrix<Double> PC1 = new Matrix<Double>(1, 618);
for (int i = 0; i < 618; i++)
PC1[0, i] = EigenVectors[0, i];
Matrix<Double> Results = new Matrix<Double>(8, 1);
CvInvoke.cvProjectPCA(DataMatrix, Mean, PC1, Results);
TestStatus.Items.Add("PCA Projection Results = ");
for (int i = 0; i < 8; i++)
{
TestStatus.Items.Add(Convert.ToString(DataMatrix[i, 0]));
}
Emgu.CV.Util.CvException:OpenCV的:(evals0.cols == 1 || evals0.rows == 1)& & ecount0 < = ecount & & evects0.cols == evects.cols & & evects0.rows == ecount0
在Emgu.CV.CvInvoke.CvErrorHandler(的Int32狀態,字符串了funcName,字符串ERRMSG,字符串文件名,行的Int32,IntPtr的用戶數據)
Emgu.CV上的f:\ Project \ Project 3.0 \ Project 3.0 \ MainWindow中的Project_3._0.MainWindow.Capture_3D_Face_Click(Object sender,RoutedEventArgs e).CvInvoke.cvCalcPCA(IntPtr data,IntPtr avg,IntPtr eigenvalues,IntPtr eigenvectors,PCA_TYPE flags) 。 xaml.cs:行516
正在由線路引起的:(這是在上面的代碼)
CvInvoke.cvCalcPCA(DataMatrix, Mean, EigenValues, EigenVectors, Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_COL);
如何建立正確的矩陣爲PCA發揮作用?
的雙打似乎做工精細。我發現這些括號(1,618)應該是(1,8)和(618,618)應該是(8,8)。雖然現在我遇到了CvInvoke.cvProjectPCA(Data,Mean,EigenVectors,Results)的問題;不要以爲你知道結果矩陣的大小應該是多少? – difurious 2013-02-09 22:57:41
你是指投影矩陣?在[OCV PCA文檔](http://docs.opencv.org/modules/core/doc/operations_on_array.html#pca-project)中,它表示它將具有與輸入矩陣一樣多的列,並且綁定行無論是由maxComponents或用於創建PCA的座標數量,所以我敢打賭618. – morynicz 2013-02-09 23:40:43
是的抱歉的投影矩陣,我試圖創建一個矩陣的大小(8,8),(1,8),(1,618 ),(8,618)和(618,618)以及所有這些的倒數。但似乎沒有任何工作。到目前爲止,我得到它的唯一方法是將其作爲方矩陣,用值8替換全部618,並將原始特徵向量矩陣放入項目函數中。 – difurious 2013-02-10 12:37:09