CvMat* PCA(CvMat *Vector1) { int col = Vector1->cols; CvMat* AvgVector; CvMat* EigenValue_Row; CvMat* EigenVector; AvgVector = cvCreateMat(1, col, CV_32FC1); EigenValue_Row = cvCreateMat(col, 1, CV_32FC1); EigenVector = cvCreateMat(col, col, CV_32FC1); //PrintMatrix(Vector1, RED); /* cvCalcPCA() */ cvCalcPCA(Vector1, AvgVector, EigenValue_Row, EigenVector, CV_PCA_DATA_AS_ROW ); PrintMatrix(AvgVector, BLUE); /* cvPorjectPCA() */ cvProjectPCA(Vector1, AvgVector, EigenVector, Vector1); PrintMatrix(Vector1, YELLOW); PrintMatrix(EigenVector, GREEN); /* cvBackProjectPCA */ cvBackProjectPCA(Vector1, AvgVector, EigenVector, Vector1); PrintMatrix(Vector1, BLACK); cvReleaseMat(&AvgVector); cvReleaseMat(&EigenVector); cvReleaseMat(&EigenValue_Row); return Vector1; }
//============================================================================ void AAM_TDM::CalcTexture(const CvMat* lamda, CvMat* t) { cvBackProjectPCA(lamda, __MeanTexture, __TextureEigenVectors, t); }