CustusX  18.04
An IGT application
cxTrackingPositionFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 This file is part of CustusX, an Image Guided Therapy Application.
3 
4 Copyright (c) SINTEF Department of Medical Technology.
5 All rights reserved.
6 
7 CustusX is released under a BSD 3-Clause license.
8 
9 See Lisence.txt (https://github.com/SINTEFMedtek/CustusX/blob/master/License.txt) for details.
10 =========================================================================*/
11 #ifndef CXTRACKINGPOSITIONFILTER_H
12 #define CXTRACKINGPOSITIONFILTER_H
13 
14 #include "cxResourceExport.h"
15 
16 #include "cxTransform3D.h"
17 #include <map>
18 #include <boost/shared_ptr.hpp>
19 #include "iir/Butterworth.h"
20 
21 namespace cx
22 {
23 
31 class cxResource_EXPORT TrackingPositionFilter
32 {
33 public:
35  void setCutOffFrequency(double freq);
36  void addPosition(Transform3D pos, double timestamp);
37  Transform3D getFilteredPosition();
38 
39 private:
40  std::map<double, Transform3D> mHistory;
41  std::map<double, Transform3D> mResampled;
42  std::map<double, Transform3D> mFiltered;
43  void clearIfTimestampIsOlderThanHead(Transform3D pos, double timestamp);
44  void clearIfJumpInTimestamps(Transform3D pos, double timestamp);
45  void interpolateAndFilterPositions(Transform3D pos, double timestamp);
46  void reset();
47  float mCutOffFrequency;
48  float mResampleFrequency;
49  static const int mFilterOrder = 2;
50  Iir::Butterworth::LowPass<mFilterOrder> fx;
51  Iir::Butterworth::LowPass<mFilterOrder> fy;
52  Iir::Butterworth::LowPass<mFilterOrder> fz;
53 };
54 typedef boost::shared_ptr<TrackingPositionFilter> TrackingPositionFilterPtr;
55 
56 } // namespace cx
57 
58 
59 #endif // CXTRACKINGPOSITIONFILTER_H
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
boost::shared_ptr< class TrackingPositionFilter > TrackingPositionFilterPtr
Definition: cxTool.h:37
Namespace for all CustusX production code.