CustusX  2023.01.05-dev+develop.0da12
An IGT application
cxPositionFilter.cpp
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 
12 #include "cxPositionFilter.h"
13 #include "cxMathUtils.h"
14 #include "cxLogger.h"
15 
16 namespace cx
17 {
18 
19 PositionFilter::PositionFilter(unsigned filterStrength, std::vector<class TimedPosition> &inputImagePositions) :
20  mFilterStrength(filterStrength)
21 {
22  mFilterLength = 1+2*filterStrength;
23  mInputImagePositions = &inputImagePositions;
24  mNumberInputPositions=inputImagePositions.size();
26 
27  mQPosArray = Eigen::ArrayXXd::Zero(7,long(mNumberQuaternions));
28  mQPosFiltered = Eigen::ArrayXXd::Zero(7,long(mNumberInputPositions));
29 }
30 
32 {
33  for (unsigned int i = 0; i < mNumberQuaternions; i++) //For each pose (Tx), with edge padding
34  {
35  unsigned long sourceIdx = (i > mFilterStrength) ? (i-mFilterStrength) : 0; // Calculate index in Tx array, pad with edge elements //Skriv om
36  sourceIdx = (sourceIdx < mNumberInputPositions) ? sourceIdx : (mNumberInputPositions-1);
37  mQPosArray.col(i) = matrixToQuaternion(mInputImagePositions->at(sourceIdx).mPos); // Convert each Tx to quaternions
38  }
39 }
40 
42 {
43  for (unsigned int i = 0; i < mFilterLength; i++)
44  {
46  }
47  mQPosFiltered = mQPosFiltered / mFilterLength; // Scale and write back to qPosArray
48 }
49 
51 {
52  for (unsigned int i = 0; i < mInputImagePositions->size(); i++) //For each pose after filtering
53  {
54  // Convert back to position data
56  }
57 }
58 
60 {
61  if (mFilterStrength > 0) //Position filter enabled?
62  {
63  if (mNumberInputPositions > mFilterLength) //Position sequence sufficient long?
64  {
68  }
69  }
70 }
71 
72 } //cx
Transform3D quaternionToMatrix(Eigen::ArrayXd qArray)
Definition: cxMathUtils.cpp:45
Eigen::ArrayXXd mQPosArray
std::vector< TimedPosition > * mInputImagePositions
unsigned long mNumberQuaternions
Eigen::ArrayXd matrixToQuaternion(Transform3D Tx)
Definition: cxMathUtils.cpp:32
Eigen::ArrayXXd mQPosFiltered
PositionFilter(unsigned filterStrength, std::vector< TimedPosition > &inputImagePositions)
unsigned long mNumberInputPositions
Namespace for all CustusX production code.