SIFT特征提取中用差分代替求偏导
来源:互联网 发布:ppt数据图表怎么做 编辑:程序博客网 时间:2024/06/13 20:50
1. 一阶差分:
2. 二阶偏导数的推导和近似:
3. 上式以点(i+1,j)为中心,用i代换i+1可得以(i,j)为中心的二阶偏导数则有:
4. 同理:
5. 进而可推导:
6. 这样我们就可以很好的运用其他的一阶偏导的定义,如SIFT特征OpenCV实现版本中的一阶以及二阶偏导:
[cpp] view plaincopy
-
- static
CvMat* intderiv_3D( IplImage*** dog_pyr, octv, intintvl, intr, intc ) - {
-
CvMat* dI; -
double dx, dy, ds; -
-
dx = ( pixval32f( dog_pyr[octv][intvl], r, c+1 ) - -
pixval32f( dog_pyr[octv][intvl], r, c-1 ) ) / 2.0; -
dy = ( pixval32f( dog_pyr[octv][intvl], r+1, c ) - -
pixval32f( dog_pyr[octv][intvl], r-1, c ) ) / 2.0; -
ds = ( pixval32f( dog_pyr[octv][intvl+1], r, c ) - -
pixval32f( dog_pyr[octv][intvl-1], r, c ) ) / 2.0; -
-
dI = cvCreateMat( 3, 1, CV_64FC1 ); -
cvmSet( dI, 0, 0, dx ); -
cvmSet( dI, 1, 0, dy ); -
cvmSet( dI, 2, 0, ds ); -
-
return dI; - }
-
-
-
-
- static
CvMat* inthessian_3D( IplImage*** dog_pyr, octv, intintvl, intr, intc ) - {
-
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; - }
- 本人感觉求二阶偏导的代码有问题,与公式不符,希望有看到的大神指导一下
0 0
- SIFT特征提取中用差分代替求偏导
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析 .
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取代码
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- SIFT特征提取分析
- 第一套正装
- 不容易系列之(3)—— LELE的RPG难题 2045
- 内置对象一览表
- Onvif在Windows下的开发 -- 准备工作
- hdu 1757 A Simple Math Problem
- SIFT特征提取中用差分代替求偏导
- East!模拟赛 Round 1 题目,题解在上三篇博客。
- 《一位36岁程序员的困惑》读后感
- NYOJ28--大数阶乘
- 黑马程序员——OC基础语法
- UVA - 11992 Fast Matrix Operations(线段树)
- return 和 exit
- JAVA - 程序流程控制
- 转]C语言灵魂——指针