我正在尝试在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?我对如何跟踪上一个索引感到困惑。
如果需要,请要求任何澄清。谢谢大家!