Canny边缘检测中的梯度方向

时间:2014-06-14 10:59:20

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

我试图理解非最大抑制(Canny Edge检测)的概念,所以我开始查看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-135degrees或271-315degrees
  • 案例4:136-180degrees或316-360degree

开关盒内的条件如何与代码下面解释的情况相对应。任何人都可以解释一下。 ?

1 个答案:

答案 0 :(得分:1)

乍一看,find((iy<=0 & ix>-iy) | (iy>=0 & ix<-iy));会返回

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

假设像素从上到下和从左到右排序,并且精确垂直的边缘(左边是黑色,右边是白色)被定义为0°

开关盒的其他3个术语是类似的。

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