Я пытаюсь создать модель PCA в OpenCV для хранения координат пикселей. В качестве эксперимента у меня есть два набора координат пикселей, которые отображают два приближенных круга. Каждый набор координат имеет 48 пар х, у. Я экспериментировал со следующим кодом, который считывает координаты из файла и сохраняет их в структуре Mat. Тем не менее, я не думаю, что это правильно, и PCA в openCV, кажется, очень плохо освещена в Интернете.
Mat m(2, 48, CV_32FC2); // matrix with 2 rows of 48 cols of floats held in two channels
pFile = fopen("data.txt", "r");
for (int i=0; i<48; i++){
int x, y;
fscanf(pFile, "%d%c%c%d%c", &x, &c, &c, &y, &c);
m.at<Vec2f>( 0 , i )[0] = (float)x; // store x in row 0, col i in channel 0
m.at<Vec2f>( 0 , i )[1] = (float)y; // store y in row 0, col i in channel 1
}
for (int i=0; i<48; i++){
int x, y;
fscanf(pFile, "%d%c%c%d%c", &x, &c, &c, &y, &c);
m.at<Vec2f>( 1 , i )[0] = (float)x; // store x in row 1, col i in channel 0
m.at<Vec2f>( 1 , i )[1] = (float)y; // store y in row 1, col i in channel 1
}
PCA pca(m, Mat(), CV_PCA_DATA_AS_ROW, 2); // 2 principle components??? Not sure what to put here e.g. is it 2 for two data sets or 48 for number of elements?
for (int i=0; i<48; i++){
float x = pca.mean.at<Vec2f>(i,0)[0]; //get average x
float y = pca.mean.at<Vec2f>(i,0)[1]; //get average y
printf("\n x=%f, y=%f", x, y);
}
Однако это происходит сбой при создании объекта PCA. Я знаю, что это очень простой вопрос, но я немного растерялся и надеялся, что кто-нибудь может начать меня с pca в open cv.