图像处理中的一阶偏导数和二阶偏导数

 1. 一阶差分:

 

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

 

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

 

4. 同理:

 

5. 进而可推导:

 

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

[cpp]  view plain  copy
  1. /* 
  2. Computes the partial derivatives in x, y, and scale of a pixel in the DoG 
  3. scale space pyramid. 
  4.  
  5. @param dog_pyr DoG scale space pyramid 
  6. @param octv pixel's octave in dog_pyr 
  7. @param intvl pixel's interval in octv 
  8. @param r pixel's image row 
  9. @param c pixel's image col 
  10.  
  11. @return Returns the vector of partial derivatives for pixel I 
  12.     { dI/dx, dI/dy, dI/ds }^T as a CvMat* 
  13. */  
  14. static CvMat* deriv_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int c )  
  15. {  
  16.     CvMat* dI;  
  17.     double dx, dy, ds;  
  18.   
  19.     dx = ( pixval32f( dog_pyr[octv][intvl], r, c+1 ) -  
  20.         pixval32f( dog_pyr[octv][intvl], r, c-1 ) ) / 2.0;  
  21.     dy = ( pixval32f( dog_pyr[octv][intvl], r+1, c ) -  
  22.         pixval32f( dog_pyr[octv][intvl], r-1, c ) ) / 2.0;  
  23.     ds = ( pixval32f( dog_pyr[octv][intvl+1], r, c ) -  
  24.         pixval32f( dog_pyr[octv][intvl-1], r, c ) ) / 2.0;  
  25.   
  26.     dI = cvCreateMat( 3, 1, CV_64FC1 );  
  27.     cvmSet( dI, 0, 0, dx );  
  28.     cvmSet( dI, 1, 0, dy );  
  29.     cvmSet( dI, 2, 0, ds );  
  30.   
  31.     return dI;  
  32. }  
  33.   
  34.   
  35.   
  36. /* 
  37. Computes the 3D Hessian matrix for a pixel in the DoG scale space pyramid. 
  38.  
  39. @param dog_pyr DoG scale space pyramid 
  40. @param octv pixel's octave in dog_pyr 
  41. @param intvl pixel's interval in octv 
  42. @param r pixel's image row 
  43. @param c pixel's image col 
  44.  
  45. @return Returns the Hessian matrix (below) for pixel I as a CvMat* 
  46.  
  47.     / Ixx  Ixy  Ixs / <BR> 
  48.     | Ixy  Iyy  Iys | <BR> 
  49.     / Ixs  Iys  Iss / 
  50. */  
  51. static CvMat* hessian_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int c )  
  52. {  
  53.     CvMat* H;  
  54.     double v, dxx, dyy, dss, dxy, dxs, dys;  
  55.   
  56.     v = pixval32f( dog_pyr[octv][intvl], r, c );  
  57.     dxx = ( pixval32f( dog_pyr[octv][intvl], r, c+1 ) +   
  58.             pixval32f( dog_pyr[octv][intvl], r, c-1 ) - 2 * v );  
  59.     dyy = ( pixval32f( dog_pyr[octv][intvl], r+1, c ) +  
  60.             pixval32f( dog_pyr[octv][intvl], r-1, c ) - 2 * v );  
  61.     dss = ( pixval32f( dog_pyr[octv][intvl+1], r, c ) +  
  62.             pixval32f( dog_pyr[octv][intvl-1], r, c ) - 2 * v );  
  63.     dxy = ( pixval32f( dog_pyr[octv][intvl], r+1, c+1 ) -  
  64.             pixval32f( dog_pyr[octv][intvl], r+1, c-1 ) -  
  65.             pixval32f( dog_pyr[octv][intvl], r-1, c+1 ) +  
  66.             pixval32f( dog_pyr[octv][intvl], r-1, c-1 ) ) / 4.0;  
  67.     dxs = ( pixval32f( dog_pyr[octv][intvl+1], r, c+1 ) -  
  68.             pixval32f( dog_pyr[octv][intvl+1], r, c-1 ) -  
  69.             pixval32f( dog_pyr[octv][intvl-1], r, c+1 ) +  
  70.             pixval32f( dog_pyr[octv][intvl-1], r, c-1 ) ) / 4.0;  
  71.     dys = ( pixval32f( dog_pyr[octv][intvl+1], r+1, c ) -  
  72.             pixval32f( dog_pyr[octv][intvl+1], r-1, c ) -  
  73.             pixval32f( dog_pyr[octv][intvl-1], r+1, c ) +  
  74.             pixval32f( dog_pyr[octv][intvl-1], r-1, c ) ) / 4.0;  
  75.   
  76.     H = cvCreateMat( 3, 3, CV_64FC1 );  
  77.     cvmSet( H, 0, 0, dxx );  
  78.     cvmSet( H, 0, 1, dxy );  
  79.     cvmSet( H, 0, 2, dxs );  
  80.     cvmSet( H, 1, 0, dxy );  
  81.     cvmSet( H, 1, 1, dyy );  
  82.     cvmSet( H, 1, 2, dys );  
  83.     cvmSet( H, 2, 0, dxs );  
  84.     cvmSet( H, 2, 1, dys );  
  85.     cvmSet( H, 2, 2, dss );  
  86.   
  87.     return H;  
  88. }  

 

参考:

(1)http://hi.baidu.com/shareshow/blog/item/34abdf544725cf54d109069b.html

(2)SIFT的OpenCV实现

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值