求图像的梯度和散度 您所在的位置:网站首页 matlab求旋度 求图像的梯度和散度

求图像的梯度和散度

2024-01-25 10:33| 来源: 网络整理| 查看: 265

参考: 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 20181128更新:在看文献的时候看到了一个公式,是在讲述二阶导和散度之间的关系,这里记下以便日后有用。△u=div(▽u)《A Nonlocal Variational Model for Pansharpening Image Fusion》 这句话纯粹是我自己的笔记,下面才是正题。

梯度和散度概念

首先回顾一下梯度和散度的概念。这里给出梯度和散度的公式: 对于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(z) = zx_x +zy_y。

% 生成7×7整数型的矩阵 z = randi(7,7); [zx,zy] = gradient(z); div = divergence(zx,zy); [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);

这里也附上自己写的实现求梯度的函数

function [imx,imy,imnorm] = my_gradient(im) % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 该函数用来求图像的梯度 % % 输入: % % im : 输入图像 % % 输出: % % imx : 图像x方向的梯度 % % imy : 图像y方向的梯度 % % imxy : 图像梯度的幅值 % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % imx = [im(:,end,:) - im(:, 1,:),-diff(im,1,2)]; imy = [im(end,:,:) - im(1, :,:);-diff(im,1,1)]; imnorm = sqrt(imx.^2 + imy.^2); end


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有