Main Content

imgradient

找到二维图像的梯度幅值和方向

说明

[Gmag,Gdir] = imgradient(I) 返回二维灰度图像或二值图像 I 的梯度幅值 Gmag 和梯度方向 Gdir

示例

[Gmag,Gdir] = imgradient(I,method) 使用指定的 method 返回梯度幅值和方向。

示例

[Gmag,Gdir] = imgradient(Gx,Gy) 分别从 x 和 y 方向的定向梯度 GxGy 返回梯度幅值和方向。

示例

全部折叠

将图像读入工作区。

I = imread("coins.png");

计算梯度幅值和方向,指定普瑞维特梯度算子。

[Gmag,Gdir] = imgradient(I,"prewitt");

显示梯度幅值和方向。

imshowpair(Gmag,Gdir,"montage");
title("Gradient Magnitude (Left) and Gradient Direction (Right) Using Prewitt Method")

将图像读入工作区。

I = imread('coins.png');

计算 xy- 定向梯度。默认情况下,imgradientxy 使用索贝尔梯度算子。

[Gx,Gy] = imgradientxy(I);

显示定向梯度。

imshowpair(Gx,Gy,'montage')
title('Directional Gradients Gx and Gy, Using Sobel Method')

使用定向梯度计算梯度幅值和方向。

[Gmag,Gdir] = imgradient(Gx,Gy);

显示梯度幅值和方向。

imshowpair(Gmag,Gdir,'montage')
title('Gradient Magnitude (Left) and Gradient Direction (Right)')

输入参数

全部折叠

输入图像,指定为二维灰度图像或二维二值图像。

数据类型: single | double | int8 | int32 | uint8 | uint16 | uint32 | logical

梯度算子,指定为下列值之一。

方法描述
"sobel"

索贝尔梯度算子。像素的梯度是 3×3 邻域内像素的加权和。对于垂直 (y) 方向的梯度,权重为:

[ 1  2  1 
  0  0  0 
 -1 -2 -1 ]
在 x 方向,权重被转置。

"prewitt"

普瑞维特梯度算子。像素的梯度是 3×3 邻域内像素的加权和。对于垂直 (y) 方向的梯度,权重为:

[ 1  1  1 
  0  0  0 
 -1 -1 -1 ]
在 x 方向,权重被转置。

"central"

中心差分梯度。一个像素的梯度是相邻像素的加权差。在 y 方向为 dI/dy = (I(y+1) - I(y-1))/2

"intermediate"

中间差分梯度。一个像素的梯度是相邻像素和当前像素之间的差。在 y 方向为 dI/dy = I(y+1) - I(y)

"roberts"

罗伯茨梯度算子。一个像素的梯度是对角相邻像素之间的差。对于一个方向的梯度,权重为:

[ 1  0 
  0 -1 ]
在正交方向,权重沿垂直轴翻转。

数据类型: char | string

水平梯度,指定为数值矩阵。水平 (x) 轴指向列下标递增的方向。您可以使用 imgradientxy 函数来计算 Gx

数据类型: single | double | int8 | int32 | uint8 | uint16 | uint32

垂直梯度,指定为与 Gx 大小相同的数值矩阵。垂直 (y) 轴指向行下标递增的方向。您可以使用 imgradientxy 函数来计算 Gy

数据类型: single | double | int8 | int32 | uint8 | uint16 | uint32

输出参量

全部折叠

梯度幅值,以数值矩阵形式返回,其大小与图像 I 或定向梯度 GxGy 相同。Gmag 的类默认为 double,除非输入图像或定向梯度的数据类型为 single,在这种情况下,它的数据类型为 single

数据类型: double | single

梯度方向,以数值矩阵形式返回,其大小与梯度幅值 Gmag 相同。Gdir 包含与正 x 轴的 [-180, 180] 范围内的逆时针夹角,以度为单位。(x 轴指向列下标递增的方向。)Gdir 属于 double 类,除非输入图像 I 或定向梯度属于 single 数据类型,在这种情况下,它属于 single 数据类型。

数据类型: double | single

提示

  • 当在图像边界应用梯度算子时,图像边界之外的值假定为等于最邻近的图像边界值。这类似于 imfilter 中的 "replicate" 边界选项。

算法

对于所列的每种梯度法,imgradient 中采用的算法是先分别计算 x 和 y 方向的定向梯度 GxGy。水平 (x) 轴指向列下标递增的方向。垂直 (y) 轴指向行下标递增的方向。然后基于梯度的正交分量 GxGy 计算梯度幅值和方向。

imgradient 不会对梯度输出进行归一化。如果梯度输出图像的范围必须与输入图像的范围匹配,请考虑对梯度图像进行归一化,具体取决于所使用的 method 参量。例如,对于索贝尔核,归一化因子是 1/8,对于普瑞维特是 1/6,对于罗伯茨是 1/2。

扩展功能

版本历史记录

在 R2012b 中推出

全部展开