Canny边缘检测中的梯度方向

我想了解非最大抑制(Canny边缘检测)的概念,所以我开始研究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度
  • 交换机内部的条件如何与代码下面解释的情况相对应。 任何人都可以解释这一点。 ?


    乍一看, 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°

    交换机的其他三个条款是类似的。

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

    链接地址: http://www.djcxy.com/p/64033.html

    上一篇: Gradient Direction in Canny Edge Detection

    下一篇: Is there any reverse operation to (image) gradient?