【问题标题】:Canny edge detection algorithm - implementation problemsCanny 边缘检测算法 - 实现问题
【发布时间】:2013-10-20 11:35:25
【问题描述】:

我正在尝试实现 Canny Edge 检测算法,但在此过程中遇到了一些问题。我想我了解 Canny 边缘检测的每一步,但与 OpenCv 实现给出的结果相比,它们差别很大。

似乎我无法获得算法应该产生的 1px 宽的边缘。下面是这个非常简单的二值图像的步骤和结果:

正在处理的二进制图像:

使用 Sobel 算子计算的梯度大小:

边缘方向:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 <br>
1 / - - - - - - - - - - - \ 1   <br>
1 | / - - - - - - - - - \ | 1  <br>
1 | | / - - - - - - - \ | | 1  <br>
1 | | | / - - - - - \ | | | 1  <br>
1 | | | | | | | | | | | | | 1  <br>
1 | | | | | | | | | | | | | 1  <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | \ - - - - - / | | | 1 <br>
1 | | \ - - - - - - - / | | 1 <br>
1 | \ - - - - - - - - - / | 1 <br>
1 \ - - - - - - - - - - - / 1 <br>
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

非极大值抑制图像:

0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0 255   0   0   0   0   0   0   0   0   0 255   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0 255   0   0   0   0   0 255   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0 255   0   0   0   0   0 255   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0 255   0   0   0   0   0   0   0   0   0 255   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0<br>
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

如果我在这一步执行滞后阈值,我会得到非常厚的结果。明显的问题是梯度幅度值,但我不知道如何解决它。如果有人更有经验和知识渊博,能够为我指出正确的方向,我将非常感激。

【问题讨论】:

    标签: algorithm image-processing edge-detection


    【解决方案1】:

    我认为 Sobel 运算符不适合您的情况。实际上梯度幅度应该已经大致勾勒出边缘。后面的步骤是细化边缘提取。我不确定你是如何实现细化过程的,我所做的是使用插值来找到梯度范数为局部最大值的像素。当我应用 Sobel 算子时,我没有得到很厚的边缘,但边缘在某些点不是很连续:

    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0   270   270   270   270   270   270   270   270     0     0     0     0
     0     0     0   270     0     0     0     0     0     0   270   270     0     0     0     0
     0     0   270     0     0     0     0     0     0     0     0     0     0     0   270     0
     0     0   270     0     0   270   270   270   270     0     0   270     0     0   270     0
     0     0   270     0     0   270     0     0     0     0     0   270     0     0   270     0
     0     0   270     0     0   270     0     0     0     0     0   270     0     0   270     0
     0     0   270     0     0   270     0     0     0     0     0   270     0     0   270     0
     0     0   270     0     0     0     0     0     0     0     0   270     0     0   270     0
     0     0   270   270     0     0     0     0     0     0     0   270     0     0   270     0
     0     0   270   270     0   270   270   270   270   270   270   270     0     0   270     0
     0     0     0     0     0     0     0     0     0     0     0     0     0   270   270     0
     0     0     0     0     0     0     0     0     0     0     0     0   270   270     0     0
     0     0     0     0   270   270   270   270   270   270   270   270   270     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
    

    当我使用高斯函数的标准差对原始图像进行卷积以获得梯度时,我终于可以得到清晰的细边缘:

    0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     1   494   494   494   494   494   494   494   494   494   494     1     1
     0   494     1     1     1     1     1     1     1     1     1     1   494     1
     0   494     1     1   494   494   494   494   494   494     1     1   494     1
     0   494     1   494   494     1     1     1     1   494   494     1   494     1
     0   494     1   494     1     1     1     1     1     1   494     1   494     1
     0   494     1   494     1     1     1     1     1     1   494     1   494     1
     0   494     1   494     1     1     1     1     1     1   494     1   494     1
     0   494     1   494     1     1     1     1     1     1   494     1   494     1
     0   494     1   494   494     1     1     1     1   494   494     1   494     1
     0   494     1     1   494   494   494   494   494   494     1     1   494     1
     0   494     1     1     1     1     1     1     1     1     1     1   494     1
     0     1   494   494   494   494   494   494   494   494   494   494     1     1
     0     1     1     1     1     1     1     1     1     1     1     1     1     1
    

    【讨论】:

      猜你喜欢
      • 2018-10-04
      • 2018-06-29
      • 2014-03-30
      • 1970-01-01
      • 2021-06-02
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多