非最大抑制

时间:2012-12-01 12:36:57

标签: computer-vision non-maximum-suppression

我们已经了解到,您可以使用atan(dy/dx)获得渐变方向,abs(angle) < pi/8是与边缘正交的方向。 现在我们有一个功课,我们应该将这个方向离散化为四个等级(x和y方向以及两个对角线),然后检查两个像素邻居的最佳匹配方向非最大抑制

虽然我没有完全得到解决方案。显然我们有四个案例:

  1. img(i, j-1),因此渐变(粗略)指向x方向,因此我们检查img(i, j+1)angle > pi/8 && angle <= 3*pi/8(假设图像原点位于左上角)< / p>

  2. img(i-1, j+1),因此渐变指向右上角。现在我认为我们需要检查img(i+1, j-1)img(i-1, j-1),而是检查img(i+1, j+1)和{{1}},这似乎是正交对角线。

  3. 另外两个案例是相同的。我试图改变这个但是边缘看起来很奇怪所以这似乎是正确的但我不明白为什么。

    有人可以向我解释一下吗?

3 个答案:

答案 0 :(得分:15)

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

enter image description here

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

Java Demo of non-max suppression