2

我试图在 C 中实现一个非最大抑制函数。

非最大值抑制是一种非线性滤波器,它抑制窗口中不是最大值的所有值。考虑具有以下值的 5 元素序列 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?我对如何跟踪以前的索引感到困惑。

如果需要,请要求任何澄清。谢谢你们!

4

0 回答 0