Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
//============================================================================
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");
}