This repository contains the implementation of the method proposed in
@article{esposito2019total,
title={Total Variation Regularization of Pose Signals
with an Application to 3D Freehand Ultrasound},
author={Esposito, Marco and Hennersperger, Christoph and Göbl, Rüdiger and Demaret, Laurent and Storath, Martin and Navab, Nassir
and Baust, Maximilian and Weinmann, Andreas},
journal={IEEE Transactions on Medical Imaging},
volume={38},
number={10},
pages={2245-2258},
year={2019},
doi={10.1109/TMI.2019.2898480},
publisher={ IEEE }
}
(PREPRINT available here) for the regularization of 6-degrees-of-freedom pose streams, such as the output of a tracking system. The method has the ability to compensate for significant jitter, while maintaining the features of the original signal (e.g. sudden and sharp variations in the movement direction).
This is achieved by minimizing the following functional:
where the term penalizes the deviation of the output signal from the original signal , and penalizes large variations within consecutive poses of the output stream. The joint action of the two functionals, balanced by the coefficient , allows to find the desired trade-off between the fidelity to the original signal and the regularity of the output.
This implementation includes first- and second-order regularization for the term, and a first-order regularizer for . Each regularizer can be combined with an L1, L2 or HUBER penalization.
For further details on the algorithm, the reader is referred to the published paper. Practical instructions to use the algorithm, including a brief description of the action of each parameter, is provided in the documentation of each interface (Doxygen for C++, MATLAB help, Python docstrings).
This software is released under the LGPLv3 license. Hence, it can be used and included into proprietary software; however, any modification to the code of the library itself must be released publicly.
The software is implemented in C++. A MATLAB and a Python interface are also provided.
The library can be built using CMake. There are no external dependencies. C++11 is required.
A compile.m
script is provided in the matlab/wrapper
folder. This script can be executed to compile a mex
extension.
After running the compile script, the matlab
directory must be added recursively to your path to use the contained
functions.
Alternatively, the mex
file can be copied together with the scripts into your path.
More details are available in the respective page.
Coming soon as a PyPI package.
Meanwhile, the Cython extension can be built from source and installed as detailed in the respective instructions.