c++ - CImg and Eigen, eigenvalues coming up all the same values -
i using cimg , eigen library facial recognition project. have (seemingly) working until point generate eigenvalue vector. all values come same (-6.27744e+066), incorrect. code follows in msvs 2013 pro:
int _tmain(int argc, _tchar* argv[]) { cimglist<unsigned char> init_faces; cimg<float> avg_face; cimglist<float> face_diffs; //code reading in face images, creating average image //and creating difference images cimg<double> covariance_matrix(face_diffs.size(), face_diffs.size()); eigen::matrixxcd cov_matrix(face_diffs.size(), face_diffs.size()); //compute covariance matrix using pictures show //difference each input average compute_covariance(face_diffs, covariance_matrix); //convert matrix cimg eigen readable matrix convert_eigenlib(covariance_matrix, cov_matrix); //create eigensolver object, passing covariance matrix eigen::complexeigensolver<eigen::matrixxcd> eig_solve(cov_matrix); //compute eigenvalues of covariance matrix eigen::vectorxcd eig_vals = eig_solve.eigenvalues(); //this line produces 25 element long vector of eigenvalues, //all of are: -6.27744e+066 cout << "eigenvalues:" << endl << eig_vals << endl; return 0; } void compute_covariance(cimglist<float> face_diffs, cimg<double> &covariance_matrix) { cimglist<float> transpose; float temp = 0; (unsigned int = 0; < face_diffs.size(); i++) { transpose.insert(face_diffs(i).get_transpose()); } transpose.display(); (unsigned int x = 0; x < face_diffs.size(); x++) { (unsigned int y = 0; y < face_diffs.size(); y++) { covariance_matrix(x, y, 0, 0) = transpose(x).dot(face_diffs(y)); } } } void convert_eigenlib(cimg<double> covariance_matrix, eigen::matrixxcd &cov_matrix) { (int x = 0; x < covariance_matrix.width(); x++) { (int y = 0; y < covariance_matrix.height(); y++) { cov_matrix(y, x) = covariance_matrix(x, y, 1, 1); } } } i believe issue contained in 1 of 2 user defined functions shown, every other step gives me expected outputs.
Comments
Post a Comment