目前只记录了非极大值的基本方法。
非极大值抑制(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] then
if I[i] >= I[i - 1] then
MaximumAt(i);
else
i ← i+1;
while i+1 < W AND I[i] <= I[i + 1] do
i ← i+1;
if i+1 < W then
MaximumAt(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 do
if I[mi] < I[j]
mi = j;
if mi != i
i = mi;
continue;
forall j ∈ [i-n,i-1] do
if I[i] <= I[j] then
break;
if j == i
MaximumAt(i);
i = i + 2n;
论文上却比这样更复杂,应该是加快计算速度吧,看不太懂,记下细看:
2-D NMS
2-D的思路与1-D有些不同,伪代码如下:
对于一点,先找点i右下方区域(n+1)×(n+1))最大的点m,然后判断m左上方、上方、左侧的(n+1)×(n+1)是否比m值小,如果是,则认为找到局部最大值。与我想像的有些不同。