gpt4 book ai didi

c# - 使用Emgu进行数据集的PCA

转载 作者:行者123 更新时间:2023-12-02 17:53:08 25 4
gpt4 key购买 nike

我正在尝试对一个数据集执行PCA,目前我有8套数据,对于每条数据我都有618条有关此信息。以下是到目前为止我尝试过的代码:

        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,字符串fileName,Int32行,IntPtr userData)

在Emgu.CV.CvInvoke.cvCalcPCA(IntPtr数据,IntPtr平均,IntPtr特征值,IntPtr特征 vector ,PCA_TYPE标志)
在Project_3._0.MainWindow.Capture_3D_Face_Click(Object sender,RoutedEventArgs e)中的f:\ Project \ Project 3.0 \ Project 3.0 \ MainWindow.xaml.cs:line 516中

这是由以下行引起的:(在上面的代码中)
        CvInvoke.cvCalcPCA(DataMatrix, Mean, EigenValues, EigenVectors, Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_COL);

如何正确设置矩阵以使PCA起作用?

最佳答案

在您提供的代码中,是否应该

Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_ROW

代替
Emgu.CV.CvEnum.PCA_TYPE.CV_PCA_DATA_AS_COL

(请注意每个句子的最后3个字符)

关于c# - 使用Emgu进行数据集的PCA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com