我试图在 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?我对如何跟踪以前的索引感到困惑。
如果需要,请要求任何澄清。谢谢你们!