关于使用边缘检测的边缘检测算法和应用的大多数文献,都引用了Canny的边缘检测器。如此之多,以至于看起来几乎是边缘检测的“解决方案”。当然,它将在平衡噪声和保留边缘方面做得最好。

但是,出于好奇,Canny的边缘检测器是否值得关注?还是在Canny最好的应用领域?

在这种情况下,更快的实现并不是真正的问题。边缘检测器好坏的重点应该在于所生成边缘的质量和实用性。

另外,我真的不是在关注特定于实现的问题。我正在寻找算法固有的更多理论限制或特征。

评论

有趣的是,此问题是分割叶脉的最佳方法吗?所需的边缘检测。显示的结果之一是Canny,看起来不太好。虽然,很多方面都可能是实现问题,而Canny显然是局限性!有什么看法吗?

请查看我的答案(dsp.stackexchange.com/questions/1714/…),它显示出比他从Canny得到的结果更好的结果。

可能的(部分)欺骗:dsp.stackexchange.com/questions/74/…(或至少相关)。问题本身几乎是相同的(部分),答案与此问题的答案有些不同。

@DipanMehta:那么不应该使用Canny边缘检测器来检测不是边缘的东西吗? :)

#1 楼

根据我的经验,以下几点是限制:


结果是二进制的。有时您需要测量边缘有多少才算是边缘(例如,来自Sobel振幅边缘检测器的强度图像)
参数的数量会导致无限次地调整以获得更好的结果。
您仍然需要连接生成的边缘以提取对于人眼+心灵而言似乎显而易见的完整边缘。高斯核的大小。

该方法存在拐角和结点问题:最后一个问题是通过SUSAN方法解决,该方法可以更好地连接边缘,并且还可以产生良好的连接,如链接的纸张中给出的以下示例图所示:

测试输入图像:



结果SUSAN:



结果Canny:



您可以清楚地看到SUSAN代替了Canny而不是拐角处。 r />

评论


$ \ begingroup $
好吧,您所指的主要是与实现相关的问题。我同意可能存在此类问题,但我认为还有许多其他边缘检测和其他算法。我正在寻找算法固有的更多理论限制或特征。
$ \ endgroup $
– Dipan Mehta
2012年3月14日上午10:26

$ \ begingroup $
我不同意阈值化(导致生成二进制图像),而参数是方法的一部分(如Canny的论文所述)。我不认为这是实施细节。
$ \ endgroup $
– Geerten
2012年3月14日上午10:47

$ \ begingroup $
门限由每个边缘检测器完成,因此每个边缘检测器的输出均为二进制。我会说一下调整参数和高斯平滑方面的困难,但是与LoG类型的运算符不同,Canny实际上在存在噪声的情况下找到了最佳的平滑量。
$ \ endgroup $
– Dipan Mehta
2012年3月14日上午11:15

$ \ begingroup $
并不是每个边缘检测器都进行阈值处理(例如,我的回答中提到的Sobel)。在许多情况下,这是常见且合乎逻辑的后续步骤,但不是每种边缘检测方法的基本步骤。
$ \ endgroup $
– Geerten
2012年3月14日上午11:47

#2 楼


还是在Canny最好的应用领域?


我可以想到一些:


如果需要闭合曲线,则可以保证这种曲线更好的检测器(例如零交叉) laplacian或分水岭分割)
如果您要检测在某些区域对比度较低的同质物体,则使用全局信息的分割方法(例如分水岭分割)可以提供更好的结果
br />

#3 楼

以我的经验,使用Canny边缘检测器进行边缘检测的过程会先平滑边缘,然后才能检测到边缘,并且滤波器的时间和长度必须完美匹配,才能正确检测所有边缘。

#4 楼

我只想提及Canny检测器的一个局限性,那就是它的设置,这限制了它的应用。我认为参数设置不仅对于Canny检测器是一个问题,对于其他边缘检测方法也是一个问题。