引言
在查阅人脸关键点防抖动相关资料时,留意到一篇2012发布的防止抖动滤波器-----一欧元滤波器
链接
论文:
Casiez, G., Roussel, N., & Vogel, D. (2012). 1€ filter: a simple speed-based low-pass filter for noisy input in interactive systems. In Proceedings of the SIGCHI Conference on Human Factors in Computing Systems (pp. 2527–2530). ↩︎
http://www.lifl.fr/~casiez/publications/CHI2012-casiez.pdf
在线Demo:
http://www.lifl.fr/~casiez/1euro/InteractiveDemo/
简介:
https://jaantollander.com/post/noise-filtering-using-one-euro-filter/
1. 介绍
本文探讨了 1€ 滤波器,这是一种用于过滤噪声实时信号的简单但功能强大的算法。文章侧重于算法的实际实现,涵盖了算法的数学基础、伪代码实现和简单、纯 Python 实现。要了解过滤器的工作原理和方式,我们建议阅读原始文章 1。
2. 1€ Filter
1€ 滤波器是用于实时过滤噪声信号的低通滤波器。它也是一个只有两个可配置参数的简单过滤器。时间 T i T_i Ti 处的信号表示为 X i X_i Xi,滤波后的信号表示为值 X ^ i \hat{X}_{i} X^i。滤波器使用指数平滑
X ^ 1 = X 1 X ^ i = α X i + ( 1 − α ) X ^ i − 1 , i ≥ 2 \begin{gathered} \hat{X}_{1}=X_{1} \\ \hat{X}_{i}=\alpha X_{i}+(1-\alpha) \hat{X}_{i-1}, \quad i \geq 2 \end{gathered} X^1=X1X^i=αXi+(1−α)X^i−1,i≥2
其中平滑因子 α ∈ [ 0 , 1 ] \alpha \in[0,1] α∈[0,1] 不是一个常数,而是自适应的,即使用有关信号变化率(速度)的信息动态计算。自适应平滑因子旨在平衡抖动与滞后的权衡,因为人们对低速时的抖动敏感,而对高速时的滞后更敏感。平滑因子定义为:
α = 1 1 + τ T e \alpha=\frac{1}{1+\frac{\tau}{T_{e}}} α=1+Teτ1
其中
T
e
T_{e}
Te 是根据样本之间的时间差计算得出的采样周期
T
e
=
T
i
−
T
i
−
1
T_{e}=T_{i}-T_{i-1}
Te=Ti−Ti−1
τ
\tau
τ 是使用截止频率计算的时间常数
τ
=
1
2
π
f
C
.
\tau=\frac{1}{2 \pi f_{C}} .
τ=2πfC1.
截止频率
f
C
f_{C}
fC 随着变化率(即速度)的增加而线性增加
f
C
=
f
C
min
+
β
∣
X
˙
^
i
∣
f_{C}=f_{C_{\min }}+\beta\left|\hat{\dot{X}}_{i}\right|
fC=fCmin+β∣∣∣X˙^i∣∣∣
其中
f
C
min
>
0
f_{C_{\min }}>0
fCmin>0 是最小截止频率,
β
>
0
\beta>0
β>0 是速度系数,
X
^
i
\hat{X}_{i}
X^i 是过滤后的变化率。我们定义变化率
X
^
i
\hat{X}_{i}
X^i 作为信号的离散导数
X
˙
1
=
0
X
˙
i
=
X
i
−
X
^
i
−
1
T
e
,
i
≥
2
\begin{gathered} \dot{X}_{1}=0 \\ \dot{X}_{i}=\frac{X_{i}-\hat{X}_{i-1}}{T_{e}}, i \geq 2 \end{gathered}
X˙1=0X˙i=TeXi−X^i−1,i≥2
然后使用具有恒定截止频率 f C d f_{C_{d}} fCd 的指数平滑 (1) 对其进行滤波,默认情况下 f C d = 1 f_{C_{d}}=1 fCd=1 。
3. 调整过滤器
模型中有两个可配置参数,最小截止频率 f C min f_{C_{\min }} fCmin 和速度系数 β \beta β。降低最小截止频率会降低慢速抖动。增加速度系数会减少速度滞后。
参考:
https://jaantollander.com/post/noise-filtering-using-one-euro-filter/