【问题标题】:Non-max suppression非最大抑制
【发布时间】:2012-12-01 12:36:56
【问题描述】:

我们了解到,您可以使用atan(dy/dx) 获得梯度方向,这是与边缘正交的方向。 现在我们有一个作业,我们应该将此方向离散化为四个类别(x 和 y 方向以及两个对角线),然后检查最佳匹配方向上的两个像素邻居是否非最大抑制 .

虽然我没有完全得到解决方案。显然我们有四种情况:

  1. abs(angle) < pi/8,所以梯度(大致)指向x方向,因此我们检查img(i, j-1)img(i, j+1)(假设图像原点在左上角)

  2. angle > pi/8 && angle <= 3*pi/8,所以渐变指向右上角。现在我认为我们需要检查img(i-1, j+1)img(i+1, j-1),但我们检查了img(i-1, j-1)img(i+1, j+1),这似乎是正交对角线。

其他两种情况是等价的。我试图改变这一点,但边缘看起来很奇怪,所以这似乎是正确的,但我不明白为什么。

谁能给我解释一下?

【问题讨论】:

  • 非最大抑制是一种消除不位于重要边缘的点的方法。在第一种情况下,如果给定点的梯度接近零度,则意味着边缘在北或南,如果该点的大小大于左右两侧的点的大小(如您的示例中所示)。在第二种情况下,您正在检查 45 度的梯度,因此边缘为 135 度,因此如果该点大于沿梯度方向的点,即 (-1, -1) 和 (1, 1).
  • 是的,它是沿着梯度方向的。又名 45°。到右上角。我不确定您使用的是哪个坐标系。 (-1, -1) 和 (1, 1) 看起来像是一个经典的笛卡尔系统,它的oritin 在左下角。我们在 matlab 中这样做了,所以图像原点在左上角,因此看起来我们检查了边缘方向。又名 135°。到左上角。
  • 这显然与我使用的坐标系相同,因为我说渐变是 45 度,并且 (-1, -1), (1, 1) 沿着这个渐变。这在笛卡尔平面中结果是相同的,在这种情况下与原点的位置无关。我之前的回答是,你有什么并发症?是否与 (-1, -1) 高于您的原点有关?
  • 这张图i.imgur.com/9lpvf.png 有帮助吗?
  • 我认为这只是 matlab 和笛卡尔坐标之间的混淆。正如我所说,matlab 使用您绘图右侧的系统,但由于某种原因,我对齐了左侧系统中的角度......

标签: computer-vision non-maximum-suppression


【解决方案1】:

非最大抑制是一种消除不位于重要边缘的点的方法。在第一种情况下,如果给定点的梯度接近零度,则意味着边缘在北或南,如果该点的大小大于该点,则该点将被视为在边缘左右两个点的大小(如您的示例中所示)。在第二种情况下,您正在检查 45 度的渐变,因此边缘为 135 度,因此如果该点大于沿渐变方向的点,即 (-1, -1) 和 (1),则保留该点, 1)。旋转坐标系不会影响这一点。

【讨论】:

  • 我对你的解释有点困惑。根据上图,您显示了案例 2(梯度角 = 45 度)的图。但是假设渐变 = 22.5 度,根据您的绘图,我们必须检查顶部和底部的点 (-1, 0) 和 (1, 0)。我说的对吗?
【解决方案2】:

这是在 Canny 边缘检测过程中使用的Non Maxima Suppression 的 python 实现。

他们专注于北部和南部、东北和西南、东部和西部以及东南和西北。然后决定要保留哪些值。

希望它能帮助需要 NMS 的人找到更好的优势。

【讨论】:

    【解决方案3】:

    最初的问题可能会迟到,但以下链接可能会帮助任何努力理解非最大抑制的人。

    Java Demo of non-max suppression

    【讨论】:

    • “此南安普顿大学个人网页服务目前不可用。对于给您带来的不便,我们深表歉意”
    • 这里同样“不可用”
    • @MonicaHeddneck 让我想起了 xkcd 上的“古代智慧”
    猜你喜欢
    • 2017-08-10
    • 2011-10-19
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多