SIFT特征提取中用差分代替求偏导

本文深入探讨了SIFT特征提取算法中的一阶及二阶偏导数计算方法,并通过OpenCV实现版本的代码进行了详细解析。文中对比了理论公式与实际代码实现之间的差异,引发读者对正确实现方法的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 一阶差分:

 

2. 二阶偏导数的推导和近似:

 

3. 上式以点(i+1,j)为中心,用i代换i+1可得以(i,j)为中心的二阶偏导数则有:

 

4. 同理:

 

5. 进而可推导:

 

6. 这样我们就可以很好的运用其他的一阶偏导的定义,如SIFT特征OpenCV实现版本中的一阶以及二阶偏导:

 

[cpp]  view plain copy
  1.   
  2. static CvMat* deriv_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int  
  3.  
  4.     CvMat* dI;  
  5.     double dx, dy, ds;  
  6.   
  7.     dx pixval32f( dog_pyr[octv][intvl], r, c+1  
  8.         pixval32f( dog_pyr[octv][intvl], r, c-1 2.0;  
  9.     dy pixval32f( dog_pyr[octv][intvl], r+1,  
  10.         pixval32f( dog_pyr[octv][intvl], r-1, 2.0;  
  11.     ds pixval32f( dog_pyr[octv][intvl+1], r,  
  12.         pixval32f( dog_pyr[octv][intvl-1], r, 2.0;  
  13.   
  14.     dI cvCreateMat( 3, 1, CV_64FC1 );  
  15.     cvmSet( dI, 0, 0, dx );  
  16.     cvmSet( dI, 1, 0, dy );  
  17.     cvmSet( dI, 2, 0, ds );  
  18.   
  19.     return dI;  
  20.  
  21.   
  22.   
  23.   
  24.   
  25. static CvMat* hessian_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int  
  26.  
  27.     CvMat* H;  
  28.     double v, dxx, dyy, dss, dxy, dxs, dys;  
  29.   
  30.     pixval32f( dog_pyr[octv][intvl], r, );  
  31.     dxx pixval32f( dog_pyr[octv][intvl], r, c+1   
  32.             pixval32f( dog_pyr[octv][intvl], r, c-1 );  
  33.     dyy pixval32f( dog_pyr[octv][intvl], r+1,  
  34.             pixval32f( dog_pyr[octv][intvl], r-1, );  
  35.     dss pixval32f( dog_pyr[octv][intvl+1], r,  
  36.             pixval32f( dog_pyr[octv][intvl-1], r, );  
  37.     dxy pixval32f( dog_pyr[octv][intvl], r+1, c+1  
  38.             pixval32f( dog_pyr[octv][intvl], r+1, c-1  
  39.             pixval32f( dog_pyr[octv][intvl], r-1, c+1  
  40.             pixval32f( dog_pyr[octv][intvl], r-1, c-1 4.0;  
  41.     dxs pixval32f( dog_pyr[octv][intvl+1], r, c+1  
  42.             pixval32f( dog_pyr[octv][intvl+1], r, c-1  
  43.             pixval32f( dog_pyr[octv][intvl-1], r, c+1  
  44.             pixval32f( dog_pyr[octv][intvl-1], r, c-1 4.0;  
  45.     dys pixval32f( dog_pyr[octv][intvl+1], r+1,  
  46.             pixval32f( dog_pyr[octv][intvl+1], r-1,  
  47.             pixval32f( dog_pyr[octv][intvl-1], r+1,  
  48.             pixval32f( dog_pyr[octv][intvl-1], r-1, 4.0;  
  49.   
  50.     cvCreateMat( 3, 3, CV_64FC1 );  
  51.     cvmSet( H, 0, 0, dxx );  
  52.     cvmSet( H, 0, 1, dxy );  
  53.     cvmSet( H, 0, 2, dxs );  
  54.     cvmSet( H, 1, 0, dxy );  
  55.     cvmSet( H, 1, 1, dyy );  
  56.     cvmSet( H, 1, 2, dys );  
  57.     cvmSet( H, 2, 0, dxs );  
  58.     cvmSet( H, 2, 1, dys );  
  59.     cvmSet( H, 2, 2, dss );  
  60.   
  61.     return H;  
  62.  
  63. 本人感觉求二阶偏导的代码有问题,与公式不符,希望有看到的大神指导一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值