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)