1  算法原理

   非极大值抑制算法(Non-maximum suppression, NMS)抑制不是极大值的元素,搜索局部的极大值。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。

  在3领域中,假设一个行向量的长度为w,从左向右,由第一个到第w个和其3领域中的数值进行比对。

  (1)情况1:如果某个i大于i+1并且小于i-1,则其为一个绝不最大值,同时也就意味着i+1不是一个局部最大值,所以将i移动2个步长,从i+2开始继续向后进行比较判断。

  (2)情形2:如果某个i不满足上述条件(1),则将i+1赋值给i,继续对新的i进行比对。当比对到最后一个w时,直接将w设置为局部最大值。算法流程如下图所示。

    

 

2 3邻域情况下NMS函数的实现

 1  //求解局部最大值
 2  //输入参数a:数组a
 3 //输入参数n:数组的维数
 4 int mynms(int a[],int n)
 5 {
 6     int i = 2;
 7     while(i < n){
 8         if((a[i]>a[i+1])||(a[i]= a[i+1])){
 9             if((a[i]>a[i-1])||(a[i]= a[i-1])){
10                 return i;
11             }
12             i = i + 1;
13         }
14         else{
15             i = i + 2;
16         }
17     }
18    //没有找到局部最大值,返回-1  
19     return -1;
20 }

3 3邻域情况下NMS函数的调用示例

int main()
{
    //创建数组a
    int n = 6;
    int a[n] = {1,6,3,5,4,6};
    //求局部最大值的索引值
    int index = mynms(a,6);
    //找到局部最大值时打印出局部最大值
    if(index != -1){
        printf("第一个局部最大值:\n    a[%d] = %d\n",index,a[index]);
    }
    return 0;
}

posted on 2018-08-22 14:03  翠竹09  阅读(476)  评论(0编辑  收藏  举报