13

我们已经了解到,您可以获得与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)看起来像正交对角线。

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

谁可以给我解释一下这个?

4

3 回答 3

19

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

在此处输入图像描述

于 2012-12-12T13:03:26.870 回答
2

这是Canny 边缘检测过程中使用的非极大值抑制的 python 实现。

他们集中在北部和南部、东北和西南、东部和西部以及东南和西北。然后决定要保留哪些值。

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

于 2017-09-20T11:08:13.213 回答
1

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

非最大抑制的Java Demo

于 2013-05-12T22:44:27.107 回答