中值过滤器超高效实施

时间:2012-07-14 09:20:30

标签: algorithm median

我正在寻找快速/有效中值滤波器的Ansi C实现。有什么指针吗?

到目前为止,我已经找到了following实现,这很好,但我对更快的实现感到好奇。我只需要一维。

1 个答案:

答案 0 :(得分:12)

我需要从非常嘈杂的CPU消耗数据中提取信号。这是Jeff McClintock中值滤波器...

将平均值和中位数初始化为零,然后将每个样本“英寸”初始化为输入样本的中位数。最终它将在大约50%的输入样本更大,50%小于中位数的点处稳定下来。  增量的大小应与实际中位数成比例。由于我们不知道实际中位数,因此我将平均值用作粗略估计值。步长计算为估计值的0.01倍。较小的步长更准确,但需要更长时间才能解决。

float median = 0.0f;
float average = 0.0f;

// for each sample
{
    average += ( abs(sample) - average ) * 0.1f; // rough running average magnitude.
    median += _copysign( average * 0.01, sample - median );
}

enter image description here