【问题标题】:Matlab: First derivative edge detection, about gradientsMatlab:一阶导数边缘检测,关于梯度
【发布时间】:2015-06-26 08:24:23
【问题描述】:

我正在编写一个程序,要求用户在 PrewittSobel 图像过滤器之间进行选择检测图像对象的边缘。我必须使用他们的过滤器模板,而不是 edge 函数。用户还告诉他是否想要检测“水平”、“垂直”或“对角”边缘。我的问题是理论上的,而不是关于编程的。

在我的笔记中,我用它来计算每个像素的梯度大小,它通常近似为sqrt(Gx^2 + Gy^2),其中Gx 是垂直导数,Gy 是水平导数。但是如果我只计算水平边缘,Gx 的值是多少?如果我只寻找垂直边缘,Gy 的值呢?

我自己猜不出来。

【问题讨论】:

  • 如果您更熟悉数学:第一个测量total derivative 的大小,而第二个测量仅测量partial derivatives d/dxd/dy。我不确定你还问什么。您的问题“如果我只计算水平边缘,Gx 的值是多少?”转换为:“如果我只计算 GyGx 的值是多少? ”,这对我来说没有意义。

标签: matlab image-processing edge-detection sobel


【解决方案1】:

这很简单。您关心的是使用蒙版执行图像过滤,其中每个蒙版都是导数过滤器。使用这种方法,knedlsepp 是正确的,因为这样做只会找到关于给定方向的偏导数。您将指定一个掩码来检测水平边缘,而另一个掩码用于检测垂直边缘。

Gx 表示使用垂直微分滤波器的垂直 边缘响应,Gy 表示使用水平微分滤波器的水平 边缘响应。要获得响应,您将获取图像并使用任何掩码通过 2D 卷积对其进行过滤。

接下来,您将组合这两个响应以获得整体幅度响应。但是,edge 在后台执行了大量的噪声清理,并且还执行了阈值处理以获得最终响应。简单地计算量级并不是edge 所做工作的全部内容。

无论如何,为了检测水平边缘,Prewitt 掩码如下所示:

Gy_prewitt = 

-1    -1   -1
 0     0    0
 1     1    1

使用上述掩码执行过滤会找到水平边缘响应,或Gy

要找到垂直边缘响应或Gx,您只需转置上述掩码并找到过滤器响应,因此:

Gx_prewitt =

     -1     0    1
     -1     0    1
     -1     0    1

Sobel 掩码与 Prewitt 掩码略有不同。掩码的中心行(垂直)或列(水平)有更多的夸张,并被加权两倍。水平掩码为:

Gy_sobel =

-1   -2   -1
 0    0    0
 1    2    1

同样,Sobel 的垂直掩码定义为:

Gx_sobel =

 -1     0    1
 -2     0    2
 -1     0    1

需要注意的是,掩码中所有系数的总和等于零,实际上是实践中看到的任何边缘检测掩码的属性。

现在,要确定整体边缘响应,您将对每个水平、Gy 和垂直Gx 进行过滤响应,并对每个相应像素应用幅度运算:

out = sqrt(Gx.^2 + Gy.^2);

如果您想更直观地解释为什么 Sobel 面具与 Prewitt 略有不同,我鼓励您看看这篇文章。如果您不能使用内置的卷积方法,它提供了一个很好的解释以及如何自己实现过滤操作的很好的图表:

http://blog.saush.com/2011/04/20/edge-detection-with-the-sobel-operator-in-ruby/

这是图表:

基本上,对于您想要在图像中过滤的每个像素,提取一个 3 x 3 邻域,并在邻域中的这些像素与您想要的过滤器之间执行加权求和。在这种情况下,这将是 Sobel 垂直边缘检测器。

祝你好运!

【讨论】:

  • 感谢您的回答,它非常完整且很有帮助,但有些东西我仍然不知道。我想如果我只想计算垂直边缘,我只需要计算Gx,我不需要应用公式sqrt(Gx.^2 + Gy.^2) 来确定整体边缘响应,因为它将直接是GxGy 和水平边缘也是如此。我说的对吗?
  • @user2952272 - 正确。如果您只需要水平或垂直边缘响应,则只需要GxGy。但是,可能会有负面响应,您可能希望将其可视化为灰度图像。我要强制执行的唯一警告是确保您将abs(Gx)abs(Gy) 可视化。除此之外,你是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多