Kinect&Baxter机器人中需要用到的滤波器

Kinect官网给出了几个常用的关节点数据的滤波算法:Skeletal Joint Smoothing White Paper

我参考White Paper和基于虚拟现实的人机双臂主动运动传递方法研究 这篇论文总结了一下。

——————————————————————————————————————————————————————————————————————————————————————————

1)自回归滑动平均滤波(Auto Regressive Moving Average (ARMA) Filters)

JJ131429.joint_filter_ARMA(en-us,IEB.10).png

a:滑动平均项参数

b:自回归项参数

自回归滑动平均滤波器是一种线性滤波器算法,其输出是前N个滤波前数据的权重平均值与前M个滤波后数据的权重值之和。

为n时刻的滤波器输出,为及滤波前的数值。加号前为滑动平均项,之后为自回归项。

由于参数有四个N、M、a、b,我能力有限虽然方程用Python写好了,但没有调出合适的参数,详细设置参数的方法我还没看,在这个文献中Brockwell, Peter J., and Richard A. Davis, Time Series: Theory and Methods, 2nd edition. Springer, 2009.

2)均值滤波(Simple Averaging Filter)

JJ131429.joint_filter_forecast(en-us,IEB.10).png

这是最简单的关节滤波器,对前N+1个输入值做均值处理。在人体运动缓慢的情况下,该滤波器能在n时刻对接下来的n+k时刻的值进行预测。N越大曲线越平滑,但会引入跟多的延时,延时大小和N大小成正比。

均值滤波具有恒定的偏差(constant bias),用双滑动平均滤波可以消除。

3)双滑动均值滤波(Double Moving Averaging Filter

JJ131429.joint_filter_double_moving_average(en-us,IEB.10).png

双滑动均值滤波应用广泛,常用于预测有线性变化趋势的数据。分别为在n时刻,输入数据的第一次和第二次平均值,是移动平均值的移动平均值。显然,滞后于原输入数据,滞后于,并且这两个滞后的量大致相同。为了解决滞后问题把的值加在输出上。

JJ131429.joint_filter_trend_adjustment(en-us,IEB.10).png

与滑动均值滤波(moving averaging filter)相比双滑动均值滤波的优点是对数据变化更加敏感。

但是我算不出,因为没有i了,我很怀疑是不是公式写错了。根据例子我猜测是这样算的(男朋友给我写的,他的思维结晶)。

Kinect&Baxter机器人中需要用到的滤波器_第1张图片

4)卷积滤波器(Savitzky–Golay Smoothing Filter

常被称作多项式平滑滤波器或者最小二乘滤波算法,他利用传感器采集的值作为输入,某一邻域的最小二乘法拟合曲线上的值作为输出。k阶多项式定义如下:

JJ131429.joint_filter_savitzky_polynomial(en-us,IEB.10).png

如果我们使用N个先验样本和M个未来样本作为相连样本,则滤波器找到,以使该项最小(不知道翻译的对不对,If we use N previous and M future samples as the neighbor samples, then a Savitzky-Golay filter finds ci coefficients such that minimize the term:

JJ131429.joint_filter_savitzky_coefficients(en-us,IEB.10).png


要实现Savitzky-Golay滤波器,只需要选择合适的滤波器阶数K,并确定应使用前后多少个采样(即选择N和M)。然后,可以可使用现成的算法离线计算系数ai,并且使用这些系数很容易计算滤波器输出。一般来说,Savitzky-Golay滤波器对于的频率跨度大且没有噪声的输入的数据很有用,因此,Savitzky-Golay滤波器是NUI关节滤波很好的选择。(NUI joint中的NUI是什么意思我不懂)

K = 1,将直线拟合到输入数据,这通常称为线性回归。K = 2和K = 3,分别拟合抛物线和三次曲线。 n的选择影响滤波器平滑效果,其中使用K = 3的三次曲线应该是NUI关节滤波的较好选择,因为它是能够显示拐点且平滑的最低次数多项式。使用高阶多项式会产生带有太多局部最小值和最大值的跳跃曲线,这会导致平滑效果减弱。

5)抖动去除滤波器

通过限制每帧中输出的变化来抑制输入的跳变。如果输入的数据和以前的输入数据之间的差异和校医一个阈值,那么滤波器的输出值不变。否则,该滤波器将发生变化,这些变化可以通过使用不同的方法来完成。例如,抖动去除滤波器的下列变量可以使用一个指数滤波器Exponential Smoothing Filter来抑制输入大的变化:

Kinect&Baxter机器人中需要用到的滤波器_第2张图片

α称为阻尼因子,0≤α≤1。用替代可得,

JJ131429.joint_filter_exponential(en-us,IEB.10).png

JJ131429.joint_filter_exponential_dampening(en-us,IEB.10).png

之前的所有输入都有助于平滑滤波器输出,但它们的贡献会因参数1-α的功率增加而衰减。由于n取决于所有过去的输入,所以指数滤波器被认为具有对所有过去输入的无限记忆。类似于简单的平均滤波器,指数滤波器将一条水平直线与输入数据拟合。不同之处在于,指数滤波器对近期输入数据赋予相对较高的权重,并且相比于简单的平均滤波器,其对输入的近期变化的反应更为敏感。

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

第一篇博客,原谅我不通顺的翻译和逼死强迫症的排版。Skeletal Joint Smoothing White Paper上还给出了另外五钟滤波方法,我实在是不想写了,累死了,以后有空再写吧,或者就再也不写了看心情。




你可能感兴趣的:(Kinect&Baxter机器人中需要用到的滤波器)