使用Opencv在C ++中执行PCA分析

时间:2016-08-28 01:02:53

标签: c++ opencv pca

我还没有找到一个使用适合我的情况的Opencv实施PCA分析的实例,所以我不确定我的实现有什么问题,其中包括:

void PreProcessor::performPca()
{
    const int type = CV_64F;
    cv::Mat pt_mat = cv::Mat::zeros(numPatients, numFeatures, type);
    for (int y = 0; y < numPatients; y++)
    {
        for (int x = 0; x < numFeatures; x++)
        {
            pt_mat.at<double>(y,x) = features[y].at(x);
        }
    }
    cv::PCA pt_pca(pt_mat, cv::Mat(), CV_PCA_DATA_AS_ROW, numFeatures);
    cv::Mat dataprojected(pt_mat.rows, numFeatures, pt_mat.type());
    for (int i = 0; i < pt_mat.rows; i++)
    {
      dataprojected.row(i) = pt_pca.project(pt_mat.row(i));

    }
    features.clear();
    for (int i =0; i< dataprojected.rows; i++)
    {
        std::vector<double> pcaFeat = dataprojected.row(i);
        features.insert(std::pair<int, std::vector<double> >(i, pcaFeat));
    }
}

此成员函数尝试查找features的主要组件,该组件已填充并声明为std::map<int,std::vector<double>> features。最后,它用主要组件重新填充它。 NumPatientsfeatures中的向量数量,numFeatures是向量中元素的数量。 上面的代码调试并运行,但生成的features主要用零填充。 我对Opencv的PCA如何工作的理解有什么问题吗?

0 个答案:

没有答案