图像处理中的一阶偏导和二阶偏导
1. 一阶差分:
2. 二阶偏导数的推导和近似:
3. 上式以点(i+1,j)为中心,用i代换i+1可得以(i,j)为中心的二阶偏导数则有:
4. 同理:
5. 进而可推导:
6. 这样我们就可以很好的运用其他的一阶偏导的定义,如SIFT特征OpenCV实现版本中的一阶以及二阶偏导:
- /*
- Computes the partial derivatives in x, y, and scale of a pixel in the DoG
- scale space pyramid.
- @param dog_pyr DoG scale space pyramid
- @param octv pixel's octave in dog_pyr
- @param intvl pixel's interval in octv
- @param r pixel's image row
- @param c pixel's image col
- @return Returns the vector of partial derivatives for pixel I
- { dI/dx, dI/dy, dI/ds }^T as a CvMat*
- */
- static CvMat* deriv_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int c )
- {
- 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;
- }
- /*
- Computes the 3D Hessian matrix for a pixel in the DoG scale space pyramid.
- @param dog_pyr DoG scale space pyramid
- @param octv pixel's octave in dog_pyr
- @param intvl pixel's interval in octv
- @param r pixel's image row
- @param c pixel's image col
- @return Returns the Hessian matrix (below) for pixel I as a CvMat*
- / Ixx Ixy Ixs / <BR>
- | Ixy Iyy Iys | <BR>
- / Ixs Iys Iss /
- */
- 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;
- }
/* Computes the partial derivatives in x, y, and scale of a pixel in the DoG scale space pyramid.@param dog_pyr DoG scale space pyramid @param octv pixel's octave in dog_pyr @param intvl pixel's interval in octv @param r pixel's image row @param c pixel's image col@return Returns the vector of partial derivatives for pixel I{ dI/dx, dI/dy, dI/ds }^T as a CvMat* */ static CvMat* deriv_3D( IplImage*** dog_pyr, int octv, int intvl, int r, int c ) {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; }/* Computes the 3D Hessian matrix for a pixel in the DoG scale space pyramid.@param dog_pyr DoG scale space pyramid @param octv pixel's octave in dog_pyr @param intvl pixel's interval in octv @param r pixel's image row @param c pixel's image col@return Returns the Hessian matrix (below) for pixel I as a CvMat*/ Ixx Ixy Ixs / <BR>| Ixy Iyy Iys | <BR>/ Ixs Iys Iss / */ 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; }
图像处理中的一阶偏导和二阶偏导相关推荐
- 【高等数学】函数连续、可导、可微,洛必达法则使用条件、一阶可导、一阶连续可导、二阶可导、二阶连续可导
目录 一.一元函数连续.可导.可微之间的关系 二.洛必达的使用条件 三.洛必达使用要注意的地方 1.等式右边极限存在 2.每导一步注意检查是否满足0/0,或∞/∞ 3.求导时注意函数怎么求导更简化 四 ...
- 参数方程求二阶偏导_偏微分方程
常微分方程(ODE) 的时候我们更多是关于时间的导数.偏微分方程(partial differential equation) 则不仅仅是与时间相关,加上了与空间位置相关的一些信息. 解 当 ODE ...
- 高数 | 一阶可导 一阶连续可导 二阶可导 二阶连续可导 为什么函数二阶可导却不能用两次洛必达法则?
导数的定义可以换一个说法:视f(x)为f(x)的零阶导数,若零阶导数在某点的近旁有定义,且其一阶导数在该点的值存在,那么称零阶导数在该点处一阶可导. 一阶导数是这样,二阶导数同理,n阶导数亦然. 分析 ...
- 一阶导与二阶导的关系_数学分析|第九章 定积分关于二阶导函数正负和定积分结合证明不等式问题总结...
当公式或文字展 示不完全时,记得向左←滑动哦! 摘要: 当题目中给出二阶导函数正负时,可以得到函数和导函数存在某种不等式关系,此时需要两边进行积分,积分时一定要注意积分变量的选取.[公众号:岩宝数学考 ...
- 二阶偏导相等的一个充分条件
困扰我这么多年的问题终于解决了:为什么爷爷的爸爸和爸爸的爷爷是同一个人,而奶奶的妈妈和妈妈的奶奶却不是同一个人? 答案:二阶偏导次序不影响结果的前提是导数在区间连续. [虽然以前看过,但是没有保存] ...
- 二元复合函数求二阶偏导
二元复合函数求二阶偏导 设z=F(x+f(2x−y),y),其中F,f二阶连续偏导数,求∂2z∂y2.设z = F(x+f(2x-y),y),其中F,f二阶连续偏导数,求\frac{\partial ...
- 图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny)
图像处理中各种边缘检测的微分算子简单比较(Sobel,Robert, Prewitt,Laplacian,Canny) 不同图像灰度不同,边界处一般会有明显边缘,利用此特征可以分割图像.需要说明的是: ...
- 【C++】图像处理中的微分算子原理与实现
图像处理中的微分算子原理与实现 一阶微分边缘算子:经典算子比如:Roberts(罗伯特).Prewitt(普鲁伊特).Sobel(索贝尔),Canny(坎尼)等. 二阶微分边缘算子:Laplacian ...
- 图像处理中的傅里叶变换
傅立叶变换在图像处理中有非常重要的作用.因为不仅傅立叶分析涉及图像处理很多方面,傅立 叶改进算法,比如离散余弦变换,gabor与小波在图像处理中也有重要的分量.傅立叶变换在图像处理的重要作用: 1.图 ...
- 图像处理中几个基本的处理方法c#代码实现
图像是人类获取和交换信息的主要来源,因此,图像处理的应用领域必然涉及到人类生活和工作的方方面面.随着人类活动范围的不断扩大,图像处理的应用领域也将随之不断扩大.(1)航天和航空技术方面的应用 数字图像 ...
最新文章
- 运动控制器编程_快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一
- php和python哪个工资高-学python和php哪个前景好
- 足坛绝代双骄全面数据对比,梅西30岁以后不如C罗?
- OpenCV实现图像对齐ECC算法(附完整代码)
- Cython进阶--用Cython封装Callback函数
- 谈谈实习期间应该注意的几点问题,助你早日拿到转正offer
- 天黑时间跟经度还是纬度有关_经纬度和时间有什么关系
- 阿里云贾扬清发布大数据+AI产品体系“阿里灵杰” | 云栖大会
- preparedstatement mysql 数据_使用PreparedStatement对象操作数据库
- POJ 3207 解题报告
- 万字总结:金融市场基础知识
- 还不了解外贸流程?这一篇就够了(小声bb)
- 代码设计时应遵循哪些原则
- mysql双主复制模式_mysql复制模式第二部分-----双主模式
- [Unity][C#]Regex正则表达式判断字符串
- Proxmox kvm关机失败
- 西电、成电的风雨往事
- c语言程序延时10s,单片机C语言程序设计:10s 的秒表
- [开源] OpWeb 框架 --快速高效的实时交互框架(更新至 0.0.4.0)
- ShaderLearning_1_理论渲染管线和GPU渲染管线