是否有边缘检测方法比Canny边缘检测器执行明显更好?
答案 0 :(得分:14)
有不同类型的“边缘”,这取决于你的任务。看看ICCV-2013最近的论文“Which edges matters?”,并比较了几种方法:
答案 1 :(得分:4)
希望这有助于未来的读者
Active Canny: Edge Detection and Recovery with Open Active Contour Models
的图片实施它是一件痛苦的事。 我正在尝试使用OpenCV和Python实现它
这是我发现的另一篇论文。
答案 2 :(得分:2)
Canny边缘检测方法是比较常用的边缘检测方法之一。正如旧的不明飞行物所说,没有好的或坏的边缘检测方法。
除了旧的不明飞行物的答案之外,我想向你介绍另外两种边缘检测方法。
Sobel - 可以通过定位渐变高于其邻居的像素位置来执行检测图像边缘的方法。
Gaussian based methods - 使用高斯的边缘检测方法。
如果你问我,我真的很喜欢DoG(高斯差异),尤其是当我试图获得轮廓/对象的形状(当物体有噪声时)等等。非常有用。
但总而言之,它实际上是基于你想要实现的目标。 Canny是一种非常好的边缘检测方法。四处游玩(:
答案 3 :(得分:1)
更好一词需要一些解释。我个人认为Canny边缘检测器速度慢且不稳定的原因很简单:它使用一组高度非线性的算法,这些算法执行太多复杂的操作(分段,非最大抑制等),这使得它非常不稳定且对噪声。是的,它可以拉出弱边但是“闪烁”并且噪音太高而不适合匹配应用程序。另一方面,像Sobel这样简单的操作是线性和稳定的,因此对于匹配,我会使用Sobel而不是Canny。例如,如果您对文本检测感兴趣,则可能需要使用连接组件或MSER来提取功能,而不是边缘。关键是,这个术语更强烈地取决于您的应用。
最后但并非最不重要 - 从算法的角度开始考虑您的项目是错误的,但它经常这样做!考虑一下您的目标,功能,概率的操作定义,然后再实施。 “我们写下的不是解决问题的步骤,而是问题本身” - 正如西蒙·普林斯雄辩地说的那样。因此,如果您对更好的算法有疑问,但您真的想要更好地理解计算机视觉,我强烈建议您购买his book(这个是真的可读,有很好的说明和激励以及对计算机视觉的最佳温和介绍我一直都知道。在光谱的另一面是经典的Heartly和Zisserman的多视图几何,它是公式的重要来源,但遗憾的是非常难以理解。
答案 4 :(得分:0)
使用深度学习的整体嵌套边缘检测(HED)现在已集成到OpenCV的深度学习模块中。它在边缘检测方面比Canny好得多,但是速度稍慢。 这是论文中的一张图,将结果与canny进行了比较。 很棒的事情是,如果您现在想在OpenCV中运行此方法,则只需几行代码即可完成。这篇博客文章有更多详细信息:Running Deep Learning based Edge detection in OpenCV