文档

边缘

在强度图像中找到边缘

语法

BW =边(I)
BW = edge(I,method)
BW = edge(I,方法,阈值)
BW =边缘(I,方法,阈值,方向)
BW =边缘(___, ' nothin ')
BW =边(I,方法,阈值,σ)
BW = edge(I,方法,阈值,h)
[BW,threshOut] = edge(___
[BW,threshOut,Gv,Gh] = edge(___
[gpuarrayBW,threshOut] = edge(gpuarrayI,___

描述

BW=边缘(返回二值图像BW包含1S,函数在输入图像中寻找边而且0其他地方。默认情况下,边缘采用Sobel边缘检测方法。

例子

BW=边缘(方法检测图像中的边缘所指定的边缘检测算法方法

BW=边缘(方法阈值返回所有比强的边阈值

BW=边缘(方法阈值方向指定要检测的边的方向。Sobel和Prewitt方法可以检测垂直方向、水平方向或两者的边缘。罗伯茨方法可以检测与水平角度为45°的边缘,与水平角度为135°的边缘,或两者兼有。此语法仅在以下情况下有效方法“索贝尔”“普瑞维特”,或“罗伯特”

BW=边缘(___, ' nothin ')跳过边缘细化阶段,这可以提高性能。此语法仅在以下情况下有效方法“索贝尔”“普瑞维特”,或“罗伯特”

BW=边缘(方法阈值σ指定σ,为滤波器的标准差。此语法仅在以下情况下有效方法“日志”“精明”

BW=边缘(方法阈值h方法检测边缘“zerocross”方法,h,你指定的。此语法仅在以下情况下有效方法“zerocross”

BWthreshOut= edge(___还返回阈值。

BWthreshOut全球之声“大酒店”= edge(___还返回方向梯度大小。对于Sobel和Prewitt方法,全球之声而且“大酒店”对应于垂直和水平梯度。对于罗伯茨方法,全球之声而且“大酒店”分别对应与水平角度为45°和135°的梯度。此语法仅在以下情况下有效方法“索贝尔”“普瑞维特”,或“罗伯特”

例子

gpuarrayBWthreshOut= edge(gpuarrayI___对GPU进行边缘检测操作。的“精明”而且“approxcanny”方法在GPU上不支持。万博1manbetx输入图像和输出图像是gpuArrays.此语法需要并行计算工具箱™。

例子

全部折叠

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

I = imread(“circuit.tif”);imshow(我)

使用Canny方法找到边。

BW1 = edge(I,“精明”);

使用Prewitt方法找到边。

BW2 = edge(I,“普瑞维特”);

并排显示两个结果。

imshowpair (BW1 BW2,“蒙太奇”

读取灰度图像,创建一个gpuArray

I = gpuArray(imread(“circuit.tif”));

使用Prewitt方法找到边。

BW =边(I,“普瑞维特”);

显示结果。

图中,imshow (BW)

输入参数

全部折叠

灰度或二值图像,指定为二维、实数、非稀疏、数值或逻辑数组。

“approxcanny”方法,数据类型的图像必须在范围[0 1]内归一化。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

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

方法 描述
“索贝尔”

在图像的梯度处找到边为最大值,使用导数的索贝尔近似。

“普瑞维特”

在的梯度处找到边为最大值,使用导数的Prewitt近似。

“罗伯特” 在的梯度处找到边为最大值,使用导数的罗伯茨近似。
“日志” 通过过滤后寻找零交叉来找到边采用拉普拉斯高斯(LoG)滤波器。
“zerocross” 通过过滤后寻找零交叉来找到边使用你指定的过滤器,h
“精明” 通过寻找的梯度的局部极大值来找到边.的边缘函数使用高斯滤波器的导数计算梯度。该方法使用两个阈值来检测强边缘和弱边缘,包括输出中的弱边缘,如果它们连接到强边缘。通过使用两个阈值,Canny方法比其他方法更不容易被噪声欺骗,更有可能检测到真正的弱边缘。
“approxcanny” 使用近似版本的Canny边缘检测算法查找边缘,以不太精确的检测为代价提供更快的执行时间。为approxcanny方法中,浮点图像预计在规范化范围内[0 1]

灵敏度阈值,指定为任意的数字标量方法的2元素向量“精明”而且“approxcanny”方法。边缘忽略所有强度小于的边阈值.有关此参数的详细信息,请参见算法

  • 如果您没有指定阈值,或者指定一个空数组([]),然后边缘自动选择一个或多个值。

  • “日志”而且“zerocross”方法,如果您指定阈值0,则输出图像具有闭合轮廓,因为它包含了输入图像中的所有过零点。

  • “精明”而且“approxcanny”方法使用两个阈值。边缘忽略边缘强度低于较低阈值的所有边,并保留边缘强度高于较高阈值的所有边。你可以指定阈值作为这样的2元向量(低高)而且取值范围为[0 1]。你也可以指定阈值作为一个数值标量边缘赋给较高的阈值。在这种情况下,边缘使用阈值* 0.4作为较低阈值。

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

要检测的边缘方向,指定为“水平”“垂直”,或“两个”.的方向时,参数才有效方法“索贝尔”“普瑞维特”,或“罗伯特”

请注意

如果你选择罗伯茨方法,则“水平”方向实际上检测与水平夹角为135°的边缘,而“垂直”方向检测边缘在与水平45°角。

数据类型:字符|字符串

过滤器,指定为一个矩阵。的h参数支持万博1manbetx“zerocross”唯一的方法。

数据类型:

过滤器的标准偏差,用标量表示。的σ参数支持万博1manbetx“精明”而且“日志”唯一的方法。

方法 描述
“精明”

指定高斯滤波器的标准偏差的标量值。默认为√6 (2)边缘自动选择过滤器的大小,基于σ

“日志”(拉普拉斯的高斯)

一个标量值,它指定高斯滤波器的拉普拉斯函数的标准偏差。默认为2.过滤器的大小为n——- - - - - -n,在那里n =装天花板(σ* 3)* 2 + 1

数据类型:

输入图像,指定为gpuArray

输出参数

全部折叠

输出二进制图像,作为大小相同的逻辑数组返回,1S,即函数在S内找到边而且0其他地方。

计算中使用的阈值,以2元素向量的形式返回“精明”方法,一个空向量([])“approxcanny”方法,或用于所有其他边缘检测方法的数值标量。

垂直梯度,作为大小相同的数值数组返回

请注意

如果你选择罗伯茨方法,然后边缘返回从水平角度45°计算的梯度。

水平梯度,作为大小相同的数值数组返回

请注意

如果你选择罗伯茨方法,然后边缘返回从水平角度135°计算的梯度。

在GPU上运行时输出二进制图像,返回为gpuArray

提示

  • 这个函数边缘在7.2版(R2011a)更改。以前版本的图像处理工具箱™使用不同的算法来计算Canny方法。如果你需要与前面的实现产生相同的结果,请使用以下语法:BW = edge(I,'canny_old',___)

算法

  • 对于梯度幅度边缘检测方法(Sobel, Prewitt, Roberts),边缘使用阈值阈值计算梯度幅度。

  • 对于过零方法,包括高斯的拉普拉斯方法,边缘使用阈值作为过零的阈值。换句话说,跨越零点的大跳跃是一条边,而小跳跃则不是。

  • Canny方法对梯度应用了两个阈值:低边缘灵敏度的高阈值和高边缘灵敏度的低阈值。边缘从低灵敏度结果开始,然后将其增加到包括来自高灵敏度结果的连接边缘像素。这有助于填补检测到的边缘的空白。

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

参考文献

[1] Canny, John,“边缘检测的计算方法”,《IEEE模式分析与机器智能汇刊》,PAMI-8卷,第6期,1986,第679-698页。

[2] Lim, Jae S.,二维信号和图像处理,恩格尔伍德悬崖,新泽西州,Prentice Hall, 1990,第478-488页。

[3] Parker, James R.,图像处理和计算机视觉算法,纽约,John Wiley & Sons, Inc., 1997,第23-29页。

扩展功能

R2006a之前介绍

这个话题有用吗?