Skip to content

Instantly share code, notes, and snippets.

@mdauphin
Created June 29, 2015 17:05
Show Gist options
  • Save mdauphin/0be977d8b8e771b2e358 to your computer and use it in GitHub Desktop.
Save mdauphin/0be977d8b8e771b2e358 to your computer and use it in GitHub Desktop.
void cvPolyfit( CvMat* src_x, CvMat* src_y, CvMat *dst, int order )
{
CvMat* X = cvCreateMat( src_x->rows, order+1, CV_32FC1 );
for(int i=0;i<=order;i++)
{
CvMat* cpy = cvCloneMat( src_x );
cvPow( cpy, cpy, (double)i );
for (int j=0;j<src_x->rows;j++)
cvmSet( X, j, i, cvmGet( cpy, j, 0 ) );
cvReleaseMat(&cpy);
}
CvMat* X_t = cvCreateMat( X->cols, X->rows, CV_32FC1 );
cvTranspose( X, X_t );
CvMat* tmp = cvCreateMat( X_t->rows, X->cols, CV_32FC1 );
cvMatMul( X_t, X, tmp );
CvMat* tmp_inv = cvCloneMat( tmp );
cvInvert( tmp, tmp_inv );
CvMat* tmp3 = cvCreateMat( tmp_inv->rows, X_t->cols, CV_32FC1 );
cvMatMul( tmp_inv, X_t, tmp3 );
cvMatMul( tmp3, src_y, dst );
cvReleaseMat(&X);
cvReleaseMat(&X_t);
cvReleaseMat(&tmp);
cvReleaseMat(&tmp_inv);
cvReleaseMat(&tmp3);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment