This repository includes implementation codes of filtering methods for denoising and completing data generated by software platforms for human motion analysis, allowing readers to easily reproduce all the algorithms in different experimental settings.
To run a simple filter from the main directory:
python3 filters/<filter_name>.py <filter_name> <input_file_path> <output_directory_path> <delta_t> <model>
To check the error of the filtered file, run:
python3 utils/checker.py --ref <ground_truth_directory_path> --source <input_directory_path> -out <stats_file_path>
For example, to run and evaluate the error the Butterworth Filter (BF):
python3 filters/BF.py BF data/input/S9_Discussion.csv data/output/ 20
python3 utils/checker.py --ref data/gt --source data/output/BF --out data/stats/BF.csv
This will create a new directory "data/output/BF" and store the refined results.
To have a reference of the input error, run:
python3 utils/checker.py --ref data/gt --source data/input --out data/stats/input.csv
For the data format, please follow the example file in the "data" folder.
Some filters may require a training phase. To preprare the train and validation datasets, follow the code in "utils/prepare_data.py". For the training phase, follow the Jupyther Notebook "utils/train.ipynb".
| Category | Method | MPJPE Low error jitter | Accel Low error jitter | MPJPE High error jitter | Accel High error jitter | MPJPE Missing keypoints | Accel Missing keypoints | MPJPE Missing keypoints with error | Accel Missing keypoints with error |
|---|---|---|---|---|---|---|---|---|---|
| Baseline | 96.1 | 230.0 | 146.3 | 381.9 | - | - | - | - | |
| General Purpose | Simple Moving Average | 74.6 | 11.5 | 85.0 | 19.7 | - | - | - | - |
| General Purpose | Weighted Moving Average | 76.8 | 4.4 | 88.7 | 7.0 | - | - | - | - |
| General Purpose | Exponential Moving Average | 55.4 | 85.8 | 89.6 | 140.8 | - | - | - | - |
| General Purpose | HDE | 63.0 | 92.3 | 102.6 | 151.4 | - | - | - | - |
| General Purpose | Butterworth | 24.8 | 3.0 | 41.5 | 5.0 | - | - | - | - |
| General Purpose | Savitzky–Golay | 63.3 | 116.7 | 102.1 | 194.5 | - | - | - | - |
| General Purpose | Interpolation | - | - | - | - | 0.3 | 1.1 | 244.8 | 634.0 |
| General Purpose | Least Squares Gaussian | 62.7 | 17.2 | 78.4 | 19.4 | - | - | - | - |
| State Observer | Kalman Filter (0th) | 46.4 | 29.4 | 66.0 | 48.3 | 30.1 | 2.8 | 48.7 | 29.6 |
| State Observer | Kalman Filter (1st) | 42.3 | 33.0 | 65.9 | 54.2 | 21.4 | 2.4 | 44.2 | 33.2 |
| State Observer | Kalman Filter (2nd) | 43.1 | 35.7 | 68.8 | 58.7 | 19.0 | 2.4 | 45.0 | 36.0 |
| Dimensionality Reduction | Truncated Singular Value Decomposition | 64.0 | 143.7 | 98.3 | 226.6 | - | - | - | - |
| Dimensionality Reduction | Low-Rank Matrix Completion | - | - | - | - | 4.9 | 16.7 | 92.5 | 219.7 |
| Dimensionality Reduction | Noisy Low-Rank Matrix Completion | - | - | - | - | 32.3 | 109.4 | 111.1 | 267.8 |
| Dimensionality Reduction | Robust Principal Component Analysis | 79.8 | 182.0 | 90.2 | 207.7 | - | - | - | - |
| Deep Neural Network | Undercomplete Autoencoder | 83.6 | 197.7 | 128.0 | 331.0 | - | - | - | - |
| Deep Neural Network | Undercomplete Denoising Autoencoder | 59.5 | 89.5 | 92.0 | 75.6 | - | - | - | - |
| Deep Neural Network | Recurrent Neural Network Autoencoder | 89.5 | 34.8 | 136.2 | 40.8 | - | - | - | - |
| Hybrids | KF+DE | 76.9 | 102.2 | 138.0 | 174.3 | - | - | - | - |
@article{martini2025denoising,
title={Denoising and completion filters for human motion software: A survey with code},
author={Martini, Enrico and Calanca, Andrea and Bombieri, Nicola},
journal={Computer Science Review},
volume={58},
pages={100780},
year={2025},
publisher={Elsevier}
}
