Main Content

imgradientxy

查找二维图像的定向梯度

说明

示例

[Gx,Gy] = imgradientxy(I) 返回灰度或二值图像 I 的定向梯度 GxGy

示例

[Gx,Gy] = imgradientxy(I,method) 使用指定的 method 返回定向梯度。

示例

全部折叠

将图像读入工作区。

I = imread("coins.png");

使用普瑞维特梯度算子计算 xy 定向梯度。

[Gx,Gy] = imgradientxy(I,"prewitt");

显示定向梯度。

imshowpair(Gx,Gy,"montage");
title("Directional Gradients Gx and Gy, 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)

数据类型: char | string

输出参量

全部折叠

水平梯度,以与图像 I 大小相同的数值矩阵形式返回。水平 (x) 轴指向列下标递增的方向。Gx 的数据类型为 double,除非输入图像 I 的数据类型为 single,在这种情况下,Gx 的数据类型为 single

数据类型: single | double

垂直梯度,以与图像 I 大小相同的数值矩阵形式返回。垂直 (y) 轴指向行下标递增的方向。Gy 的数据类型为 double(输入图像 I 的数据类型为 single 时,Gy 的数据类型为 single)。

数据类型: single | double

提示

  • 当在图像边界应用梯度算子时,图像边界之外的值假定为等于最邻近的图像边界值。

算法

算法用于计算相对于 x 轴和 y 轴的定向梯度。x 轴沿向右的列定义,而 y 轴沿向下的行定义。

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

扩展功能

版本历史记录

在 R2012b 中推出

全部展开