PCA + SVM mit C++ - Syntax in OpenCV 2.2

Bin ich immer Probleme auftreten PCA und Eigenfaces arbeiten mit den neuesten C++ - syntax mit dem Mat-und PCA-Klassen. Die alte C-syntax nahm ein array von IplImage* als parameter, um die Verarbeitung und den aktuellen API-dauert nur eine Matte, die formatiert ist Spalte oder Zeile. Ich nahm mir die Zeile Ansatz mit Hilfe der reshape-Funktion passen zu meinem Bild der matrix passt in eine einzige Zeile. Ich will schließlich nehmen diese Daten und verwenden Sie dann den SVM-Algorithmus zur Erkennung durchführen, aber wenn ich das mache, dass alle meine Daten ist nur ein Strom von 0EN. Kann mir bitte jemand helfen? Was mache ich falsch? Danke!

Sah ich diese Frage und es ist etwas im Zusammenhang, aber ich bin mir nicht sicher, was die Lösung ist.

Dies ist im Grunde das, was ich habe:

vector<Mat> images; //This variable will be loaded with a set of images to perform PCA on.
Mat values(images.size(), 1, CV_32SC1); //Values are the corresponding values to each of my images.

int nEigens = images.size() - 1; //Number of Eigen Vectors.

//Load the images into a Matrix
Mat desc_mat(images.size(), images[0].rows * images[0].cols, CV_32FC1);
for (int i=0; i<images.size(); i++) {
  desc_mat.row(i) = images[i].reshape(1, 1);
}

Mat average;
PCA pca(desc_mat, average, CV_PCA_DATA_AS_ROW, nEigens);

Mat data(desc_mat.rows, nEigens, CV_32FC1); //This Mat will contain all the Eigenfaces that will be used later with SVM for detection

//Project the images onto the PCA subspace
for(int i=0; i<images.size(); i++) {
  Mat projectedMat(1, nEigens, CV_32FC1);
  pca.project(desc_mat.row(i), projectedMat);

  data.row(i) = projectedMat.row(0);
}

CvMat d1 = (CvMat)data;
CvMat d2 = (CvMat)values;

CvSVM svm;
svm.train(&d1, &d2);
svm.save("svmdata.xml");

InformationsquelleAutor Roland Nasr | 2011-02-11

Schreibe einen Kommentar