1. 一阶导数应用:图像的梯度

1) 用途:

在图像处理中, 常用梯度求取图像的边缘, 这是一个很基础的应用. 下图为在OpenCV中使用cvSobel()函数的具体效果. 四张图分别为: 原图, 在x方向上的梯度, y方向上的梯度, xy方向上的梯度.
这里写图片描述

2) 二元函数

这里我们只讨论二元函数z=f(x,y)的导数, 通常把二元函数想像成一个曲面, 公式中的x,y,z分别映射到坐标系中的x,y,z轴. 于是我们看到了很多像山坡一样的三维图, 切线, 切面, 很看来很复杂.
我觉得从图像处理的角度看二元函数似乎更容易理解, 为了简化, 我们以一张黑白图为例. x,y轴分别对应成图像的宽和高, 颜色的灰度对应z值: z = f(x,y),每个像素点的颜色值是其坐标(x,y)的函数.
这里写图片描述

3) 梯度的定义

函数 z = f(x,y)在区域D内具有一阶连续偏导数,则对于每一个属于D的点P(x,y),都可定出一个向量,这个向量称为函数 z = f(x,y)在点P处的梯度.记作gradf(x,y). 一般通过求导(微分)来实现的. 导数是函数的局部性质。描述了函数在某一点附近的变化率。

4) 离散图像的梯度

由于图像是一个离散空间,无法求真正的导数,只能通过多项式拟合.图像中某一点的导数,就是该点在x方向和y方向上的变化率.
图像梯度公式如下:
gradf(x,y) = dx i + dy j;
dx(i,j) = I(i+1,j) - I(i,j); // x方向偏导,近似为某行与其上一行的差值
dy(i,j) = I(i,j+1) - I(i,j); // y方向偏导,近似为某列与其上一列的差值
其中,I是图像像素的值(亮度值),(i,j)为像素的坐标。

5) 如何衡量梯度

梯度就是某一点的变化率, 比如图像中的一点, 它可在多个方向上变化 (比如:上,下,左,右,左上,右下,各个角度…), 到底哪个方向上变化最大? 变化有大呢? 这就是梯度的两个重要量度:梯度的方向和梯度的值.
梯度的方向: 函数f(x,y)在P(x,y)点增长最快的方向, 即方向导数中取到最大值的方向.
梯度的值:方向导数的最大值.

a) 方向导数
如果函数z=f(x,y)在点P(x,y)是可微分的,那么函数在该点沿任一方向l的方向导数都存在,且有
这里写图片描述
其中φ为x轴到方向l的转角.
这里写图片描述
b) 梯度的模
梯度是方向导数分别在x,y轴的投影(dx(i,j),dy(i,j)).梯度的模就是方向导数的值,用勾股定理求得.
这里写图片描述
c) 梯度的方向
x轴到l的转角的正切为
这里写图片描述
已知x,y方向上的偏导, 再通过反正切, 就可以求出具体的角度(与x轴的夹角), 即梯度的方向.

6) 更复杂的情况

为简单说明,上面只考虑了一个象素与它上一行/上一列的差值,实际运算时,一般考虑以它为中心的NxN的小区域,小区域中各点权重不同,通过卷积计算(离得越远的点,权重越小),从而计算它各个方向上的变化.

7) 梯度图像

由图像上各点的梯度值构成的图像成为梯度图像, 往往放在另一个矩阵中, 看起来就是轮廓图, 即上面公式中的gradf(x,y)在各个x,y点上的值的序列.

2. 二阶导数应用:拉普拉斯变换

1) 用途

用于检测团块,边缘检测,突出图像中的孤立点、孤立线或线端点为目的的场合;图像的锐化操作(拉普拉斯变换后的图与原图叠加)

2) 方法

对x和y方向求二阶偏导数,然后相加
这里写图片描述
该方程的离散形式是
这里写图片描述
为什么二阶导数这样离散成这种形式呢?以x方向为例(见下图),点与其邻近点的差导是一阶导数,如:
(f(x+1,y) - f(x,y) 和 (f(x,y) - f(x-1,y))
一阶导数(梯度图像)的差异就是二阶导数
(f(x+1,y) - f(x,y)) - (f(x,y) - f(x-1,y)) = f(x+1,y) + f(x-1,y) – 2f(x,y)
y方同理,即得出以上公式
这里写图片描述
当在图像边缘作用时(例如,从暗到亮)我们可以观察到灰度值的上升必然意味着从正曲度(强度升高)到负曲度(强度达到瓶颈)的变化。因此,拉普拉斯变换结果从正到负(或者相反)组成了一个图像边沿的很好的指示器。另一种方法表达这个事实是说,边沿出现在拉普拉斯变换的过零点处。

3. 参考

1) 多元函数微分法及其应用
《高等数学》下册,“方向导数与梯度”章节

2) 图像处理中的拉普拉斯算子
http://www.cnblogs.com/xfzhang/archive/2011/01/19/1939020.html

posted on 2017-04-28 07:56  xieyan0811  阅读(68)  评论(0编辑  收藏  举报