使用NaN值的指数平滑

时间:2010-05-07 21:14:34

标签: java math average

我有一些可以创建有点嘈杂输出的样本。样本是来自摄像机的一些图像处理的结果,其指示特定颜色的斑点的标题。它是一个从-45°到+ 45°的角度,一个NaN,这意味着blob实际上不在视野中。

为了对抗嘈杂的数据,我觉得exponential smoothing可以解决问题。但是,我不确定如何处理NaN值。

一方面,让他们参与数学计算将导致NaN平均值,这将阻止任何有意义的结果。另一方面,完全忽略NaN值意味着永远不会报告“无检测”情况。而且只是为了使事情复杂化,数据也会产生噪音,因为它可能会得到错误的NaN值,理想情况下会以某种方式平滑以防止随机噪音。

关于如何实现这种指数平滑器的任何想法?

2 个答案:

答案 0 :(得分:1)

保留两个发行版怎么样?第一个可以照常平滑你的平滑blob,除非你得到一个NaN,而只是输入最后看到的非NaN值(或其他一些默认值);另一个是“NaN分布”,它对于每个非NaN值简单地得到0,对于每个NaN(或类似的东西)得到1。

这样,即使它被遮挡,你的主要发行版也将继续根据“最后已知的标题”进行预测,而不会获得垃圾数据或搞乱平滑,但你也会同时获得NaN分布的峰值让你知道事情已经发生了。

答案 1 :(得分:0)

嗯,这实际上取决于你对平滑数据的处理方式。您可能尝试的一件事是除了它的位置之外还有一个指数加权平滑的blob速度,其中NaN的贡献值为零。遇到NaN时,可以根据之前的位置和平滑的速度将其替换为投影位置。通过平滑速度,您可以防止整个NaN序列产生完全疯狂的大或小值。这可能导致值超出[-45,45],这应该捕获它不在视图中以及它离开视图的一侧。现在,您必须实际验证这会在您的计算机视觉算法中产生良好的效果。如果没有,您可能还想尝试用之前的值或零替换NaN,或者只是忽略NaN并查看哪种方法效果最好。