Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

edge

查找二维灰度图像中的边缘

说明

BW = edge(I) 返回二值图像 BW,其中的值 1 对应于灰度或二值图像 I 中函数找到边缘的位置,值 0 对应于其他位置。默认情况下,edge 使用 Sobel 边缘检测方法。

提示

要查找三维灰度或二值图像中的边缘,请使用 edge3 函数。

示例

BW = edge(I,method) 使用 method 指定的边缘检测算法检测图像 I 中的边缘。

BW = edge(I,method,threshold) 返回强度高于 threshold 的所有边缘。

BW = edge(I,method,threshold,direction) 指定要检测的边缘的方向。Sobel 和 Prewitt 方法可以检测垂直方向和/或水平方向的边缘。Roberts 方法可以检测与水平方向成 45 度角和/或 135 度角的边缘。仅当 method"Sobel""Prewitt""Roberts" 时,此语法才有效。

BW = edge(___,"nothinning") 跳过边缘细化阶段,这可以提高性能。仅当 method"Sobel""Prewitt""Roberts" 时,此语法才有效。

BW = edge(I,method,threshold,sigma) 指定 sigma,即滤波器的标准差。仅当 method"log""Canny" 时,此语法才有效。

BW = edge(I,method,threshold,h) 使用 "zerocross" 方法和您指定的滤波器 h 检测边缘。仅当 method"zerocross" 时,此语法才有效。

[BW,threshOut] = edge(___) 还返回阈值。

[BW,threshOut,Gx,Gy] = edge(___) 还返回定向梯度。对于 Sobel 和 Prewitt 方法,GxGy 分别对应于水平和垂直梯度。对于 Roberts 方法,GxGy 分别对应于与水平方向成 135° 和 45° 角的梯度。仅当 method"Sobel""Prewitt""Roberts" 时,此语法才有效。

示例

全部折叠

将灰度图像读入工作区并显示它。

I = imread('circuit.tif');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

使用 Canny 方法查找边缘。

BW1 = edge(I,'Canny');

使用 Prewitt 方法查找边缘。

BW2 = edge(I,'Prewitt');

将两个结果并排显示。

imshowpair(BW1,BW2,'montage')

Figure contains an axes object. The axes object contains an object of type image.

输入参数

全部折叠

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

对于 "approxcanny" 方法,数据类型为 singledouble 的图像必须归一化至范围 [0, 1]。如果 I 的值超出范围 [0, 1],则可以使用 rescale 函数将值重新缩放到预期范围。

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

边缘检测方法,指定为下列方法之一。

方法描述
"Sobel"

使用导数的 Sobel 逼近,通过寻找图像 I 的梯度最大的那些点来查找边缘。

"Prewitt"

使用导数的 Prewitt 逼近,通过寻找 I 的梯度最大的那些点来查找边缘。

"Roberts"使用导数的 Roberts 逼近,通过寻找 I 的梯度最大的那些点来查找边缘。
"log"使用高斯拉普拉斯 (LoG) 滤波器对 I 进行滤波后,通过寻找过零点来查找边缘。
"zerocross"使用您指定的滤波器 hI 进行滤波后,通过寻找过零点来查找边缘。
"Canny"

通过寻找 I 的梯度的局部最大值来查找边缘。edge 函数使用高斯滤波器的导数计算梯度。此方法使用双阈值来检测强边缘和弱边缘,如果弱边缘与强边缘连通,则将弱边缘包含到输出中。通过使用双阈值,Canny 方法相对其他方法不易受噪声干扰,更可能检测到真正的弱边缘。

"approxcanny"

使用近似版 Canny 边缘检测算法查找边缘,该算法的执行速度较快,但检测不太精确。浮点图像应归一化到范围 [0, 1]。

敏感度阈值,指定为数值标量(对于一般 method)或二元素向量(对于 "Canny""approxcanny" 方法)。edge 忽略所有强度不大于 threshold 的边缘。有关此参数的详细信息,请参阅算法

  • 如果不指定 threshold 或指定空数组 ([]),则 edge 会自动选择一个或多个值。

  • 对于 "log""zerocross" 方法,如果您指定阈值 0,则输出图像具有闭合轮廓,因为它包括输入图像中的所有过零点。

  • "Canny""approxcanny" 方法使用两个阈值。edge 忽略边缘强度低于下阈值的所有边缘,保留边缘强度高于上阈值的所有边缘。您可以将 threshold 指定为 [low high] 形式的二元素向量,其中 lowhigh 值在范围 [0, 1] 内。您还可以将 threshold 指定为数值标量,edge 将其分配给上阈值。在这种情况下,edge 使用 threshold*0.4 作为下阈值。

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

要检测的边缘的方向,指定为 "horizontal""vertical""both"。仅当 method"Sobel""Prewitt""Roberts" 时,direction 参数才有效。

注意

如果您选择 Roberts method,则 "horizontal" 方向检测到与水平方向成 135° 角的边缘,"vertical" 方向检测到与水平方向成 45° 角的边缘。

数据类型: char | string

滤波器,指定为数值矩阵。仅 "zerocross" 方法支持 h 参数。

数据类型: double

滤波器的标准差,指定为数值标量。仅 "Canny""log" 方法支持 sigma 参数。

方法描述
"Canny"

标量值,指定高斯滤波器标准差。默认值为 sqrt(2)edge 根据 sigma 自动选择滤波器的大小。

"log"(高斯拉普拉斯)

标量值,指定高斯拉普拉斯滤波器标准差。默认值为 2。滤波器的大小为 n×n,其中 n=ceil(sigma*3)*2+1

数据类型: double

输出参数

全部折叠

输出二值图像,以与 I 大小相同的逻辑数组形式返回,值 1 对应于 I 中函数找到边缘的位置,值 0 对应于其他位置。

在运算中使用的计算的阈值,以二元素向量形式(对于 "Canny" method 方法)、空向量 ([]) 形式(对于 "approxcanny" 方法)或数值标量形式(对于所有其他边缘检测方法)返回。

水平梯度,以与 I 大小相同的数值数组形式返回。大的水平梯度幅值表示强垂直边缘。

注意

如果您选择 Roberts method,则 edge 将返回与水平方向成 135° 角计算的梯度。

垂直梯度,以与 I 大小相同的数值数组形式返回。大的垂直梯度幅值表示强水平边缘。

注意

如果您选择 Roberts method,则 edge 将返回与水平方向成 45° 角计算的梯度。

算法

  • 对于梯度幅值边缘检测方法(Sobel、Prewitt 和 Roberts),edge 使用 threshold 作为计算所得梯度幅值的阈值。

  • 对于过零方法,包括高斯拉普拉斯,edge 使用 threshold 作为过零的阈值。换言之,较大的过零跳跃被视为边缘,而较小的过零跳跃不是。

  • Canny 方法对梯度应用两个阈值:具有低边缘敏感度的上阈值和具有高边缘敏感度的下阈值。edge 在低敏感度结果的基础上进行扩展,以包含高敏感度结果中连通的边缘像素。这有助于填补检测到的边缘中的间断。

  • 在所有情况下,edge 都根据输入数据启发式地选择默认阈值。更改阈值的最佳方法是运行一次 edge,捕获计算出的阈值作为第二个输出参数。然后,从 edge 计算的值开始,调高阈值以检测更少的边缘像素,或调低阈值以检测更多的边缘像素。

参考

[1] Canny, John, "A Computational Approach to Edge Detection," IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-8, No. 6, 1986, pp. 679-698.

[2] Lim, Jae S., Two-Dimensional Signal and Image Processing, Englewood Cliffs, NJ, Prentice Hall, 1990, pp. 478-488.

[3] Parker, James R., Algorithms for Image Processing and Computer Vision, New York, John Wiley & Sons, Inc., 1997, pp. 23-29.

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开