求图像的梯度和散度

参考:
https://blog.csdn.net/yes1989yes/article/details/73139236
https://blog.csdn.net/u011240016/article/details/52724926
https://wenku.baidu.com/view/2754220f4531b90d6c85ec3a87c24028915f853c.html
https://www.zhihu.com/question/24074028/answer/26657334

梯度和散度概念

首先回顾一下梯度和散度的概念。这里给出梯度和散度的公式:
对于u = u(x,y,z),
那么u的梯度就为:这里写图片描述,梯度操作的是函数,得到的是偏导数作为各分量构成一个向量。
而散度则为
这里写图片描述
散度操作的是向量,且结果是对向量的三个分量P,Q,R系数求偏导数的和。这里借用知乎上的回答,散度的作用对像是向量场,如果现在我们考虑任何一个点(或者说这个点的周围极小的一块区域),在这个点上,向量场的发散程度。如果是正的,代表这些向量场是往外散出的.如果是负的,代表这些向量场是往内集中的。也就说散度表明了向量的流动方向,而这个流动的程度越大,散的越快,那么对应的散度值也就越大。
另外从各自的结果可以看出:梯度是一个向量,而散度却是一个标量(值)。

图像中的梯度和散度

在了解了梯度和散度的的概念之后,我们将其应用到图像中去。首先,我们经常用到的是求图像的梯度,也就是使用差分法分别在图像的x,y方向求得图像的梯度分量,然后利用sqrt(x.^2 + y.^2)就生成了图像的梯度图了。那按照散度的公式,如果我们将x,y方向的梯度分量当做2个向量场,即把x当做P(x,y,z),y当做Q(x,y,z),那么继续对x,y方向的梯度分量求梯度就可以得到散度公式中的2个加数,得到的正是下面所说的zx_x和zy_y。对于某点来说,也就是得到了该点的流动速率。

代码

那么如何求一幅图像的梯度和散度呢?这里给出代码,需要注意的是(1)系统自带的divergence函数只能用于二维图像的计算,不能用于RGB这样的多通道的计算。(2)对某幅图像连续求2次梯度得到的zx_x和zy_y的和是等于散度的。换句话说div = zx_x +zy_y。

% 生成7×7整数型的矩阵
z = randi(7,7);
[zx,zy] = gradient(z);
div = divergence(ax,ay);

[zx_x,zx_y] = gradient(zx); 
[zy_x,zy_y] = gradient(zy);
% divergence(zx,zy) =zx_x + zy_y
res = zx_x + zy_y - divergence(zx,zy);

猜你喜欢

转载自blog.csdn.net/chaolei3/article/details/80641901