我了解了许多边缘检测算法,包括Sobel,Laplacian和Canny方法之类的算法。在我看来,最受欢迎的边缘检测器是Canny边缘检测器,但是在某些情况下这不是使用的最佳算法吗?如何确定使用哪种算法?谢谢!

评论

你在检测什么?

#1 楼

边缘检测的可能性很多,但是您提到的3个示例恰好属于3个不同的类别。

Sobel

这近似于一阶导数。在梯度位置处给出极值,在不存在梯度的情况下为0。在1D中,它是= $ \ left [\ begin {array} {ccc} -1&0&1 \ end {array} \ right] $


平滑边缘=> local最小或最大,取决于上升或下降的信号。
1像素行=> 0,行本身,其附近是局部极值(符号不同)。在1D中,它是= $ \ left [\ begin {array} {ccc} 1&-2&1 \ end {array} \ right] $

Sobel还有其他选择,它们具有+/-相同的特性。在Wikipedia上的Roberts Cross页面上,您可以找到其中一些的比较。

Laplace

这近似于二阶导数。在渐变位置给出0,在没有渐变的地方给出0。它给出了一个(较长的)渐变开始或停止的极值。


平滑边缘=>沿边缘为0,局部极值位于边缘的开始/终止处。像素线=>线处的“双”极值,旁边是带有不同符号的“正常”极值

这2种对不同类型的边缘的影响可以通过视觉最好地看到:



Canny

这不是一个简单的运算符,而是一种多步骤的方法,它使用Sobel作为步骤之一。在Sobel和Laplace为您提供灰度/浮点结果(您需要自己设定阈值)的情况下,Canny算法将智能阈值作为其步骤之一,因此您只得到二进制的yes / no结果。此外,在平滑边缘上,您可能会在渐变中间的某处仅找到1条线。

#2 楼

虽然Sobel和Laplacian只是过滤器,但Canny在两个方面比这更进一步。

首先,它执行非最大抑制,从而消除了图像中各种物体和颜色渐变所产生的噪声。其次,它实际上包括一个允许您区分不同边缘方向并填充直线缺失点的步骤。

换句话说,Canny边缘检测器与Sobel和Laplacian处于完全不同的类别。它更聪明,因为它包括一堆后处理,而Sobel和Laplacian只是高通滤波器输出,然后是线性二进制阈值。

评论


$ \ begingroup $
在这方面有canny的一维版本吗?这将是2-D版本的直接应用吗?
$ \ endgroup $
–太空
2012年3月21日14:53

#3 楼

通常,对我来说,检测边缘时最重要的两个决定是:


我可以代替地分割对象,然后使用形态学运算符找到二进制的边缘(分段) 图片?有了嘈杂的数据,它往往会更健壮。
我应该使用哪个保留边缘的平滑滤波器来减少图像噪声?边缘滤波器基于差分,这会受到噪声数据的影响。最简单的选择是中值滤波器,但是各向异性扩散或非局部均值滤波器将以具有更多需要调整的参数为代价提供更好的性能。

对于边缘检测本身,我想不到不使用Canny的原因。

#4 楼

SUSAN方法

SUSAN方法是另一种检测边缘和角的方法。这不仅具有能够检测边缘的优势,而且还具有能够检测“二维特征”(即角)的优势。对结果的影响较小。

#5 楼

Canny生成二进制图像,并取决于外部给定的阈值(取决于图像/应用程序)。
基于卷积的滤镜可生成“边缘强度”图像。如果边缘的重量或强度很重要(例如在加权霍夫变换中),这很有用。