matlab中的gradient

来源:互联网 发布:sql语言实训 编辑:程序博客网 时间:2024/05/16 10:21
matlab中处理梯度的不管是一维还是多维,道理是一样的,x方向和y方向也是类似的。所以,我们以一维的时候为例子来说明。matlab主要代码如下:
g  = zeros(size(f),class(f));% 创造一个与矩阵f同样的零矩阵

% Take forward differences on left and right edges
if n > 1
g(1,:) = (f(2,:) - f(1,:))/(h(2)-h(1));
%这里h表示的是两个函数值之间自变量的长度,一般对图像而言两个相
%邻元素之间我们认为距离为1,所以h就是[1 2 3 4.....];这句表示第一个 
%元素的梯度为该元素右边值减去该元素值/两像素距(一般是1)
g(n,:) = (f(n,:) - f(n-1,:))/(h(end)-h(end-1));
%这句表示最后一个元素的梯度为该元素值减去该元素左边的值/两元素距
%(一般是1)
end

% Take centered differences on interior points
if n > 2
h = h(3:n) - h(1:n-2);
g(2:n-1,:) = (f(3:n,:)-f(1:n-2,:))./h(:,ones(p,1));
end 
%中间元素处理方式为该元素的右边减去该元素的左边/左右元素距(一般%是2)