本文主要是介绍Efficient Non Maximum Suppression 笔记(不完整版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目前只记录了非极大值的基本方法。
非极大值抑制(Non-Maximum Suppression,NMS),可以被理解为局部最大搜索,即领域范围内的最大值。给定一个n,1D邻域包括一个点的左侧和右侧的n个点,2D邻域为以当前点为中心的(2n+1)×(2n+1)区域。NMS在计算机视觉领域有着非常重要的应用,如跟踪、数据挖掘、3D重建、目标识别等。
1-D NMS
大部分的文章都会以3邻域来做一个比较简单易懂的说明:
i ← 1;while i+1 < W do if I[i] > I[i+1] thenif I[i] >= I[i - 1] thenMaximumAt(i);elsei ← i+1;while i+1 < W AND I[i] <= I[i + 1] doi ← i+1;if i+1 < W thenMaximumAt(i);i ← i + 2;
步骤说明:
1、如果一个点比其左右两侧点的值都大,即得到局部最大值,3 - 5行。
2、在处理过程中,如果未得到局部最大值,可以知道i + 1 点比左侧的i点小,那么在下一次处理时,i = i + 2,11行。
1-D n邻域,我以为可以这样写:
i ← n;while i+n < W do mi = i;forall j ∈ [i+1,i+n] && i+n < W doif I[mi] < I[j]mi = j;if mi != ii = mi;continue;forall j ∈ [i-n,i-1] do if I[i] <= I[j] thenbreak;if j == iMaximumAt(i);i = i + 2n;
论文上却比这样更复杂,应该是加快计算速度吧,看不太懂,记下细看:
2-D NMS
2-D的思路与1-D有些不同,伪代码如下:
对于一点,先找点i右下方区域(n+1)×(n+1))最大的点m,然后判断m左上方、上方、左侧的(n+1)×(n+1)是否比m值小,如果是,则认为找到局部最大值。与我想像的有些不同。
这篇关于Efficient Non Maximum Suppression 笔记(不完整版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!