我想在OpenCv中使用PCA類來執行我的C++應用程序中的主要組件分析操作。我是OpenCV的新手,我遇到了問題所以我希望有人能幫忙。OpenCV 2.4.3 PCA類 - 當樣本數小於維數
我正在試用Matlab和PCA類的示例來檢查答案 當我使用2 * 10數據數組和參數(CV_PCA_DATA_AS_COL)
,在這裏我有兩個維度,所以我是期望有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
你可以發佈你正在使用的C++代碼嗎? – crazylpfan 2013-03-07 23:19:14
也許這是關於CV_PCA_DATA_AS_COL vs CV_PCA_DATA_AS_ROW的問題嗎?例如。我已經成功地使用opencv的pca進行人臉檢測,將行作爲圖像的數量,並將cols作爲每個圖像的總計數,並將其平鋪爲1d數組。 – berak 2013-03-07 23:40:57
該代碼: 平均數; \t Mat H(2,10,CV_32F); //然後矩陣由數據填充 PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0); \t pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0); COUT << pca.eigenvectors.rows //給出2 COUT << pca.eigenvectors.cols //給出2,這是細 另一種情況下: 墊平均數; \t Mat H(10,2,CV_32F); //然後矩陣由數據填充 PCA pca(H,Mean,CV_PCA_DATA_AS_COL,0); \t pca.operator()(H,Mean,CV_PCA_DATA_AS_COL,0); cout << pca.eigenvectors.rows //給出2而不是10 cout << pca.eigenvectors.cols //給出10 謝謝 – user2146301 2013-03-08 13:06:35