【问题标题】:Gradient Direction in Canny Edge DetectionCanny 边缘检测中的梯度方向
【发布时间】:2014-06-16 22:26:10
【问题描述】:

我试图理解非极大值抑制(Canny Edge detection)的概念,所以我开始看matlab代码。确定边缘方向的matlab代码部分如下所示。

switch direction
    case 1
        idx = find((iy<=0 & ix>-iy)  | (iy>=0 & ix<-iy));
    case 2
        idx = find((ix>0 & -iy>=ix)  | (ix<0 & -iy<=ix));
    case 3
        idx = find((ix<=0 & ix>iy) | (ix>=0 & ix<iy));
    case 4
        idx = find((iy<0 & ix<=iy) | (iy>0 & ix>=iy));
end

这里,

  • ix:输入图像通过沿 x 的高斯导数过滤
  • iy:输入图像通过沿y的高斯导数过滤
  • 案例1:0-45度或181-225度
  • 案例2:46-90度或226-270度
  • 案例3:91-135度或271-315度
  • 案例4:136-180度或316-360度

switch 案例中的条件如何对应于代码下方解释的案例。任何人都可以解释一下。 ?

【问题讨论】:

标签: image-processing computer-vision edge-detection


【解决方案1】:

乍一看,find((iy&lt;=0 &amp; ix&gt;-iy) | (iy&gt;=0 &amp; ix&lt;-iy)); 返回所有像素的索引

  • (iy&lt;=0 &amp; ix&gt;-iy),所以
    • y 导数小于零,因此边缘向下,介于 90° 和 270° 之间
    • x 导数大于零,所以边向左,在 180° 和 360° 之间
    • ix 的大小大于 iy,因此边缘主要垂直倾斜,而不是水平倾斜
    • 导致边缘在 180° 和 225° 之间
  • (iy&gt;=0 &amp; ix&lt;-iy)),所以
    • y 导数大于零,因此边缘向上,介于 270° 和 90° 之间
    • x 导数小于零,因此边缘向右,介于 0° 和 180° 之间
    • ix 的大小大于 iy,所以边缘垂直倾斜
    • 导致边缘在 0° 和 45° 之间

假设像素点从上到下,从左到右排列,一条完全垂直的边(左边黑色,右边白色)定义为0°

switch case 的其他 3 个术语同理。

这与非最大抑制没有直接关系。我假设这是一个精明的边缘过滤器或类似的东西的一部分,在这种情况下,下一步将是在刚刚确定的边缘方向上找到局部最大值。这是通过将每个像素与其在边缘方向上的局部邻居进行比较,并擦除除最大值之外的所有像素来完成的。

【讨论】:

  • 感谢 HugoRune 先生的回复。它通过边缘描述符的知识帮助我理解了这个概念。非常感谢:)
  • 不客气 :) 如果此答案解决了您的问题,请单击投票按钮下方的勾勒复选标记将其标记为已接受。
猜你喜欢
  • 2017-04-22
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多