非極大值抑制

1  算法原理算法

   非極大值抑制算法(Non-maximum suppression, NMS)抑制不是極大值的元素,搜索局部的極大值。這個局部表明的是一個鄰域,鄰域有兩個參數可變,一是鄰域的維數,二是鄰域的大小。數組

  在3領域中,假設一個行向量的長度爲w,從左向右,由第一個到第w個和其3領域中的數值進行比對。函數

  (1)狀況1:若是某個i大於i+1而且小於i-1,則其爲一個毫不最大值,同時也就意味着i+1不是一個局部最大值,因此將i移動2個步長,從i+2開始繼續向後進行比較判斷。spa

  (2)情形2:若是某個i不知足上述條件(1),則將i+1賦值給i,繼續對新的i進行比對。當比對到最後一個w時,直接將w設置爲局部最大值。算法流程以下圖所示。code

    

 

2 3鄰域狀況下NMS函數的實現blog

 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;
}

相關文章
相關標籤/搜索