C中的非最大抑制

时间:2018-10-14 03:23:28

标签: c image-processing non-maximum-suppression

我正在尝试在C语言中实现非最大抑制功能。

非最大值抑制是一种非线性滤波器,可抑制窗口中不是最大值的所有值。考虑具有以下值的五元素序列w [n]:w [n] = [25 10 31 50 19]。 窗口中的最大值为50。应用非最大值抑制将产生以下输出:w'[n] = [0 0 0 50 0]。 以下是到目前为止的代码:

void  NMS(int width, int height, double *input,double *output,double H,double W){

for (int y = 0; y <height; y++){
    for (int x = 0; x <width; x++){
      double r_max;
        int ind = x*height + y;
        for(int yy=0;yy<H;yy++){
            for(int xx=0;xx<W;xx++){
                int k_ind=xx*H+yy;
                if (input[ind+k_ind]>r_max){
                    r_max=input[ind+k_ind];
                }
                else if(input[ind+k_ind]<r_max)
                    output[ind+k_ind]=0.0;
            }
        }
     }
  }    
}

int height,width:它们是保存图像数据的双*输入矩阵的高度和宽度。 double * output存储新值并显示新图像。 H和W是我要在其中应用非最大抑制的窗口。

我正在HxW窗口中找到最大值,并将其分配给r_max。但是,假设r_max在开始时为0。它在第一个索引中找到值,例如4,在第二个索引中找到值6。现在我正在更新r_max,但是如何使上一个索引值为4等于0?我对如何跟踪上一个索引感到困惑。

如果需要,请要求任何澄清。谢谢大家!

0 个答案:

没有答案