void DGFiniteElement<D>:: GetGradientTrans (FlatMatrixFixWidth<D> grad, FlatVector<> coefs) const { Matrix<> gmat(D*grad.Height(), coefs.Size()); CalcGradientMatrix (gmat); FlatVector<> vgrad(gmat.Height(), &grad(0,0)); coefs = Trans (gmat) * vgrad; }
void DGFiniteElement<D>:: GetGradient (FlatVector<> coefs, FlatMatrixFixWidth<D> grad) const { Matrix<> gmat(D*grad.Height(), coefs.Size()); CalcGradientMatrix (gmat); FlatVector<> vgrad(gmat.Height(), &grad(0,0)); vgrad = gmat * coefs; }
//============================================================================ void AAM_Basic::Train(const std::vector<AAM_Shape>& AllShapes, const std::vector<IplImage*>& AllImages, double shape_percentage /* = 0.95 */, double texture_percentage /* = 0.95 */, double appearance_percentage /* = 0.95 */) { __cam.Train(AllShapes, AllImages, shape_percentage, texture_percentage, appearance_percentage); printf("################################################\n"); printf("Build Prediction(Jacobian) Matrix...\n"); printf("Calculating appearance parameters...\n"); CvMat* CParams = cvCreateMat(AllShapes.size(), __cam.nModes(), CV_64FC1); CalcCVectors(AllShapes, AllImages, CParams); printf("Perturbing appearance and pose parameters...\n"); // generate c and pose displacement sets std::vector<double> vStdDisp; vStdDisp.resize(4); std::vector<double> vXYDisp; vXYDisp.resize(4); std::vector<double> vScaleDisp; vScaleDisp.resize(4); std::vector<double> vRotDisp; vRotDisp.resize(4); vStdDisp[0] = -0.5; vStdDisp[1] = +0.5; vStdDisp[2] = -0.25; vStdDisp[3] = +0.25; vScaleDisp[0] = +0.95; vScaleDisp[1] = +1.05; vScaleDisp[2] = +0.85; vScaleDisp[3] = +1.15; vRotDisp[0] = (-5.0 / 180.0 * CV_PI); vRotDisp[1] = (+5.0 / 180.0 * CV_PI); vRotDisp[2] = (-15.0 / 180.0 * CV_PI); vRotDisp[3] = (+15.0 / 180.0 * CV_PI); vXYDisp[0] = -0.025; vXYDisp[1] = +0.025; vXYDisp[2] = -0.075; vXYDisp[3] = +0.075; CvMat* vCDisps = CalcCParamDisplacementVectors(vStdDisp); CvMat* vPoseDisps = CalcPoseDisplacementVectors(vScaleDisp, vRotDisp, vXYDisp, vXYDisp); CalcGradientMatrix(CParams, vCDisps, vPoseDisps, AllShapes, AllImages); cvReleaseMat(&CParams); cvReleaseMat(&vCDisps); cvReleaseMat(&vPoseDisps); //allocate memory for on-line fitting __current_c = cvCreateMat(1, __cam.nModes(), CV_64FC1); __update_c = cvCreateMat(1, __cam.nModes(), CV_64FC1); __delta_c = cvCreateMat(1, __cam.nModes(), CV_64FC1); __p = cvCreateMat(1, __cam.__shape.nModes(), CV_64FC1); __current_q = cvCreateMat(1, 4, CV_64FC1); __update_q = cvCreateMat(1, 4, CV_64FC1); __delta_q = cvCreateMat(1, 4, CV_64FC1); __current_lamda = cvCreateMat(1, __cam.__texture.nModes(), CV_64FC1); __current_s = cvCreateMat(1, __cam.__shape.nPoints()*2, CV_64FC1); __t_s = cvCreateMat(1, __cam.__texture.nPixels(), CV_64FC1); __t_m = cvCreateMat(1, __cam.__texture.nPixels(), CV_64FC1); __delta_t = cvCreateMat(1, __cam.__texture.nPixels(), CV_64FC1); printf("################################################\n\n"); }