Я пытаюсь использовать класс PCA в OpenCv для выполнения операции анализа основных компонентов в моем приложении на C++. Я новичок в OpenCV, и у меня проблема. Поэтому я хочу, чтобы кто-то мог помочь.OpenCV 2.4.3 Класс PCA - когда количество выборок меньше числа измерений
Я пытаюсь демонстрацию Пример как для Matlab, так и для класса PCA для проверки ответов , когда я использую массив данных 2 * 10, и параметр (CV_PCA_DATA_AS_COL)
, здесь у меня два измерения, поэтому я ожидая иметь 2 собственных вектора, каждый из которых имеет 2 элемента, и это работало нормально, как ожидалось, с теми же результатами, что и Matlab.
Но при использовании массива данных 10 * 2 (как правило, когда количество выборок меньше числа измерений), я получаю (2 * 10) массив eiegnvectors. I.e: 10 собственных векторов с 2 элементами каждый. Этого не ожидается, и это не результат, данный 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
Возможно, это вопрос о CV_PCA_DATA_AS_COL и CV_PCA_DATA_AS_ROW здесь? например. я успешно использовал penc для opencv для обнаружения лиц с строками в виде числа изображений, а cols - как общее число элементов изображения, сглаженное в 1d-массив. – berak
Код: Mat Mean; \t Mat H (2, 10, CV_32F); // затем матрица заполняется данными PCA pca (H, среднее значение, CV_PCA_DATA_AS_COL, 0); \t pca.operator() (H, среднее значение, CV_PCA_DATA_AS_COL, 0); соиЬ << pca.eigenvectors.rows // дает 2 COUT << pca.eigenvectors.cols // дает 2, и это хорошо другой случай: Mat Mean; \t Mat H (10, 2, CV_32F); // затем матрица заполняется данными PCA pca (H, среднее значение, CV_PCA_DATA_AS_COL, 0); \t pca.operator() (H, среднее значение, CV_PCA_DATA_AS_COL, 0); cout << pca.eigenvectors.rows // дает 2 вместо 10 cout << pca.eigenvectors.cols // дает 10 Спасибо – user2146301