在选择边缘检测算法时应该考虑哪些因素?

信息处理 算法 图像处理 边缘检测
2022-01-16 22:02:34

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

4个回答

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

索贝尔

这近似于一阶导数。在梯度位置给出极值,0 表示不存在梯度。在一维中,它是 =[101]

  • 平滑边缘 => 局部最小值或最大值,取决于信号上升或下降。
  • 1 像素线 => 0 线本身,其旁边有局部极值(不同符号)。在一维中,它是 =[121]

Sobel 还有其他替代品,它们具有 +/- 相同的特性。在维基百科的Roberts Cross页面上,您可以找到其中一些的比较。

拉普拉斯

这近似于二阶导数。在渐变位置给出 0,在不存在渐变的地方也给出 0。它给出了(更长的)梯度开始或停止的极值。

  • 沿边缘平滑边缘 => 0,边缘开始/停止处的局部极值。
  • 1 像素线 => 线上有一个“双”极值,旁边有一个带有不同符号的“正常”极值

这 2 种对不同类型边缘的影响可以从视觉上得到最好的观察:

索贝尔与拉普拉斯的比较

精明的

这不是一个简单的算子,而是一个多步骤的方法,它使用 Sobel 作为步骤之一。在 Sobel 和 Laplace 为您提供灰度/浮点结果的地方,您需要自己设置阈值,而 Canny 算法将智能阈值作为其步骤之一,因此您只需获得二进制是/否结果。此外,在平滑的边缘上,您可能会在渐变中间的某处发现只有 1 条线。

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

首先,它进行非最大抑制,消除图像中各种对象和颜色梯度产生的噪声。其次,它实际上包括一个步骤,可让您辨别不同的边缘方向并填充线条的缺失点。

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

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

  1. 我可以分割对象,然后使用形态学算子来找到二进制(分割)图像的边缘吗?对于嘈杂的数据,这往往更加稳健。

  2. 我应该使用什么边缘保持平滑滤波器来减少图像噪声?边缘过滤器基于差分,这将受到噪声数据的影响。最简单的选择是中值滤波器,但各向异性扩散或非局部意味着滤波器将提供更好的性能,但代价是需要调整更多参数。

对于边缘检测本身,我想不出不使用 Canny 的充分理由。

苏珊方法

边缘和角点检测的另一种方法是SUSAN 方法

在这种方法中,使用积分近似方法而不是导数近似。这样做的好处是不仅可以检测边缘,还可以检测“二维特征”(即角点)。

积分近似方法的另一个优点是噪声对结果的影响往往较小。