如何用计算机编程实现泰勒展开,如何在opencv中对图像进行泰勒级数展开?

如何用计算机编程实现泰勒展开,如何在opencv中对图像进行泰勒级数展开?staticvoidin step IplImage dog pyr intoctv intintvl intr intc double xi double xr double xc CvMat dD H H inv X doublex 3 0 dD deriv 3D dog pyr octv intvl

static 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 );

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 );

cvGEMM( H_inv, dD, -1, NULL, 0, &X, 0 );

cvReleaseMat( &dD );

cvReleaseMat( &H );

cvReleaseMat( &H_inv );

*xi = x[2];

*xr = x[1];

*xc = x[0];

}

static CvMat* hessian_3D( IplImage* dog_pyr, int octv, int intvl, int r,

int c )

{

CvMat* H;

double v, dxx, dyy, dss, dxy, dxs, dys;

v = pixval32f( dog_pyr[octv][intvl], r, c );

dxx = ( pixval32f( dog_pyr[octv][intvl], r, c+1 ) +

pixval32f( dog_pyr[octv][intvl], r, c-1 ) – 2 * v );

dyy = ( pixval32f( dog_pyr[octv][intvl], r+1, c ) +

pixval32f( dog_pyr[octv][intvl], r-1, c ) – 2 * v );

dss = ( pixval32f( dog_pyr[octv][intvl+1], r, c ) +

pixval32f( dog_pyr[octv][intvl-1], r, c ) – 2 * v );

dxy = ( pixval32f( dog_pyr[octv][intvl], r+1, c+1 ) –

pixval32f( dog_pyr[octv][intvl], r+1, c-1 ) –

pixval32f( dog_pyr[octv][intvl], r-1, c+1 ) +

pixval32f( dog_pyr[octv][intvl], r-1, c-1 ) ) / 4.0;

dxs = ( pixval32f( dog_pyr[octv][intvl+1], r, c+1 ) –

pixval32f( dog_pyr[octv][intvl+1], r, c-1 ) –

pixval32f( dog_pyr[octv][intvl-1], r, c+1 ) +

pixval32f( dog_pyr[octv][intvl-1], r, c-1 ) ) / 4.0;

dys = ( pixval32f( dog_pyr[octv][intvl+1], r+1, c ) –

pixval32f( dog_pyr[octv][intvl+1], r-1, c ) –

pixval32f( dog_pyr[octv][intvl-1], r+1, c ) +

pixval32f( dog_pyr[octv][intvl-1], r-1, c ) ) / 4.0;

H = cvCreateMat( 3, 3, CV_64FC1 );

cvmSet( H, 0, 0, dxx );

cvmSet( H, 0, 1, dxy );

cvmSet( H, 0, 2, dxs );

cvmSet( H, 1, 0, dxy );

cvmSet( H, 1, 1, dyy );

cvmSet( H, 1, 2, dys );

cvmSet( H, 2, 0, dxs );

cvmSet( H, 2, 1, dys );

cvmSet( H, 2, 2, dss );

return H;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228871.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午6:00
下一篇 2026年3月16日 下午6:00


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号