发现cvresize后的image,值域可能超出[0,1],导致转换成bitmap失败,不知道是否和插值算法有关。以后在看了。先记下。
现在先修改下IplImage2Bmp函数加上归一功能
在把rob hess的代码加到winform中的时候(c++),注意要把带有fprintf的地方该掉。否则会有链接错误。
关于这个错误的说明,可以google extern c,extern c++。
rob hess中interp_step的理解,Lowe论文公式3,求亚像素精度的最佳极值点。同时求x,y,s三维的亚像素最佳值
为了保证求得稳定的结果,这个函数被循环执行5次。
void interp_step( IplImage*** dog_pyr, int octv, int intvl, int r, int c,
double* xi, double* xr, double* xc )
{
CvMat* dD, * H, * H_inv, X;
double x[3] = { 0 };
dD = deriv_3D( dog_pyr, octv, intvl, r, c );//理解一阶导数二阶导数,则deriv_3D和hessian_3D就能理解。
H = hessian_3D( dog_pyr, octv, intvl, r, c );
H_inv = cvCreateMat( 3, 3, CV_64FC1 );
cvInvert( H, H_inv, CV_SVD );
cvInitMatHeader( &X, 3, 1, CV_64FC1, x, CV_AUTOSTEP );//X只是一个指针,实际的值放在x中,
cvGEMM( H_inv, dD, -1, NULL, 0, &X, 0 );//实际的值放在x中,看上面一行。cv的代码还是不够直观,这点比不上matlab。
cvReleaseMat( &dD );
cvReleaseMat( &H );
cvReleaseMat( &H_inv );
*xi = x[2];
*xr = x[1];
*xc = x[0];
}