【发布时间】:2013-02-23 08:50:32
【问题描述】:
我正在尝试使用 OpenCv 中的 PCA 类在我的 C++ 应用程序中执行主成分分析操作。我是 OpenCV 新手,遇到了问题,希望有人能提供帮助。
我正在尝试使用 Matlab 和 PCA 类的演示示例来检查答案
当我使用 2*10 数据数组和参数(CV_PCA_DATA_AS_COL) 时,这里我有两个维度,所以我希望有 2 个特征向量,每个特征向量有 2 个元素,这可以正常工作,结果与MATLAB。
但是在使用 10*2 数据数组时(通常当样本数小于维数时),我得到 (2*10) 特征向量数组。即:10 个特征向量,每个特征向量有 2 个元素。这不是预期的,也不是 Matlab 给出的结果(Matlab 给出 10*10 的特征向量矩阵)。
我不知道为什么会得到这些结果,因此我无法将数据投影到我的应用程序的主要组件上,有什么帮助吗?
P.S:我使用的代码:
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
【问题讨论】:
-
你能发布你正在使用的 C++ 代码吗?
-
也许这是一个关于 CV_PCA_DATA_AS_COL 与 CV_PCA_DATA_AS_ROW 的问题?例如。我已经成功地使用 opencv 的 pca 进行人脸检测,其中行作为图像的数量,cols 作为每个图像的总元素数,展平为一维数组。
-
代码:Mat Mean;垫 H(2, 10, CV_32F); // 然后用数据填充矩阵 PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0) ; pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0) ; cout