14#include <mitkPointSetStatisticsCalculator.h>
27 this->CreateOutputsForAllInputs();
28 this->CreateMembersForAllInputs();
31 for (
unsigned int i = 0; i < this->GetNumberOfOutputs(); ++i)
38 if (input->
IsDataValid() ==
false) { output->SetDataValid(
false); }
39 else { output->
Graft(input); }
44 m_LoggedPositions[i].push_back(input->GetPosition());
45 m_LoggedQuaternions[i].push_back(input->GetOrientation());
49 m_InvalidSamples[i]++;
55 while (this->m_LoggedPositions.size() < this->GetNumberOfInputs())
57 std::pair<std::size_t, std::vector<mitk::Point3D> > newElement(m_LoggedPositions.size(), std::vector<mitk::Point3D>());
58 m_LoggedPositions.insert(newElement);
60 while (this->m_LoggedQuaternions.size() < this->GetNumberOfInputs())
62 std::pair<std::size_t, std::vector<mitk::Quaternion> > newElement(m_LoggedQuaternions.size(), std::vector<mitk::Quaternion>());
63 m_LoggedQuaternions.insert(newElement);
65 while (this->m_InvalidSamples.size() < this->GetNumberOfInputs())
67 std::pair<std::size_t, int> newElement(m_InvalidSamples.size(), 0);
68 m_InvalidSamples.insert(newElement);
74 for (
unsigned int i = 0; i < m_LoggedPositions.size(); i++) m_LoggedPositions[i] = std::vector<mitk::Point3D>();
75 for (
unsigned int i = 0; i < m_LoggedQuaternions.size(); i++) m_LoggedQuaternions[i] = std::vector<mitk::Quaternion>();
76 for (
unsigned int i = 0; i < m_InvalidSamples.size(); i++) m_InvalidSamples[i] = 0;
81 return this->m_LoggedPositions[input].size();
86 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
87 return myCalculator->GetPositionMean();
92 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
93 return myCalculator->GetPositionStandardDeviation();
98 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
99 return myCalculator->GetPositionSampleStandardDeviation();
104 return GetMean(m_LoggedQuaternions[input]);
109 mitk::Quaternion returnValue;
110 std::vector<double> list1 = std::vector<double>();
111 std::vector<double> list2 = std::vector<double>();
112 std::vector<double> list3 = std::vector<double>();
113 std::vector<double> list4 = std::vector<double>();
114 for (
unsigned int i = 0; i < m_LoggedQuaternions[input].size(); i++)
116 list1.push_back(m_LoggedQuaternions[input].at(i)[0]);
117 list2.push_back(m_LoggedQuaternions[input].at(i)[1]);
118 list3.push_back(m_LoggedQuaternions[input].at(i)[2]);
119 list4.push_back(m_LoggedQuaternions[input].at(i)[3]);
121 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New();
122 returnValue[0] = myCalculator->GetStabw(list1);
123 returnValue[1] = myCalculator->GetStabw(list2);
124 returnValue[2] = myCalculator->GetStabw(list3);
125 returnValue[3] = myCalculator->GetStabw(list4);
131 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(QuaternionsToEulerAngles(m_LoggedQuaternions[input])));
132 mitk::Vector3D returnValue;
133 returnValue[0] = myCalculator->GetPositionMean()[0];
134 returnValue[1] = myCalculator->GetPositionMean()[1];
135 returnValue[2] = myCalculator->GetPositionMean()[2];
141 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(QuaternionsToEulerAngles(m_LoggedQuaternions[input])));
142 return myCalculator->GetPositionErrorRMS();
147 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(QuaternionsToEulerAnglesGrad(m_LoggedQuaternions[input])));
148 return myCalculator->GetPositionErrorRMS();
153 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
154 return myCalculator->GetPositionErrorMean();
159 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
160 return myCalculator->GetPositionErrorStandardDeviation();
165 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
166 return myCalculator->GetPositionErrorSampleStandardDeviation();
171 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
172 return myCalculator->GetPositionErrorRMS();
177 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
178 return myCalculator->GetPositionErrorMedian();
183 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
184 return myCalculator->GetPositionErrorMax();
189 mitk::PointSetStatisticsCalculator::Pointer myCalculator = mitk::PointSetStatisticsCalculator::New(VectorToPointSet(m_LoggedPositions[input]));
190 return myCalculator->GetPositionErrorMin();
195 return m_InvalidSamples[input];
200 return (m_InvalidSamples[input] / (m_InvalidSamples[input] + ((
double)m_LoggedPositions[input].size())))*100.0;
206 mitk::Quaternion mean;
212 for (
unsigned int i = 0; i < list.size(); i++)
214 mean[0] += list.at(i)[0];
215 mean[1] += list.at(i)[1];
216 mean[2] += list.at(i)[2];
217 mean[3] += list.at(i)[3];
220 mean[0] /= list.size();
221 mean[1] /= list.size();
222 mean[2] /= list.size();
223 mean[3] /= list.size();
230 mitk::PointSet::Pointer returnValue = mitk::PointSet::New();
231 for (
unsigned int i = 0; i < pSet.size(); i++) returnValue->InsertPoint(i, pSet.at(i));
237 mitk::PointSet::Pointer returnValue = mitk::PointSet::New();
238 for (
unsigned int i = 0; i < pSet.size(); i++)
240 mitk::Point3D thisPoint;
241 thisPoint[0] = pSet.at(i)[0];
242 thisPoint[1] = pSet.at(i)[1];
243 thisPoint[2] = pSet.at(i)[2];
244 returnValue->InsertPoint(i, thisPoint);
251 std::vector<mitk::Vector3D> returnValue = std::vector<mitk::Vector3D>();
252 for (
unsigned int i = 0; i < quaterions.size(); i++)
254 mitk::Vector3D eulerAngles;
255 mitk::Quaternion currentQuaternion = quaterions.at(i);
256 currentQuaternion.normalize();
257 eulerAngles[0] = currentQuaternion.rotation_euler_angles()[0];
258 eulerAngles[1] = currentQuaternion.rotation_euler_angles()[1];
259 eulerAngles[2] = currentQuaternion.rotation_euler_angles()[2];
260 returnValue.push_back(eulerAngles);
267 std::vector<mitk::Vector3D> returnValue = std::vector<mitk::Vector3D>();
268 std::vector<mitk::Vector3D> eulerAnglesRadians = QuaternionsToEulerAngles(quaterions);
269 for (
unsigned int i = 0; i < eulerAnglesRadians.size(); i++)
271 mitk::Vector3D currentAngles;
272 currentAngles[0] = (eulerAnglesRadians.at(i)[0] / itk::Math::pi) * 180;
273 currentAngles[1] = (eulerAnglesRadians.at(i)[1] / itk::Math::pi) * 180;
274 currentAngles[2] = (eulerAnglesRadians.at(i)[2] / itk::Math::pi) * 180;
275 returnValue.push_back(currentAngles);
282 mitk::Point3D returnValue;
283 if (m_LoggedPositions[input].size() <= i) returnValue.Fill(0);
284 else returnValue = m_LoggedPositions[input].at(i);
290 mitk::Quaternion returnValue;
291 if (m_LoggedQuaternions[input].size() <= i) returnValue.fill(0);
292 else returnValue = m_LoggedQuaternions[input].at(i);
double GetPositionErrorSampleStandardDeviation(int input)
double GetPositionErrorMax(int input)
void ResetStatistic()
Resets all statistics and starts again.
void CreateMembersForAllInputs()
Creates the member variables which store all the statistical data for every input.
std::vector< mitk::Vector3D > QuaternionsToEulerAnglesGrad(std::vector< mitk::Quaternion > quaterions)
mitk::Quaternion GetLoggedOrientation(unsigned int i, int input)
double GetPositionErrorMin(int input)
double GetEulerAnglesRMSDegree(int input)
mitk::Point3D GetPositionMean(int input)
void GenerateData() override
filter execute method
mitk::Point3D GetLoggedPosition(unsigned int i, int input)
double GetEulerAnglesRMS(int input)
std::vector< mitk::Vector3D > QuaternionsToEulerAngles(std::vector< mitk::Quaternion > quaterions)
Converts a list of quaterions to a list of euler angles (theta_x, theta_y, theta_z)
int GetNumberOfAnalysedNavigationData(int input)
double GetPercentageOfInvalidSamples(int input)
double GetPositionErrorMedian(int input)
mitk::Vector3D GetPositionSampleStandardDeviation(int input)
mitk::Quaternion GetQuaternionStandardDeviation(int input)
double GetPositionErrorRMS(int input)
int GetNumberOfInvalidSamples(int input)
double GetPositionErrorMean(int input)
double GetPositionErrorStandardDeviation(int input)
mitk::Quaternion GetMean(std::vector< mitk::Quaternion > list)
mitk::Vector3D GetPositionStandardDeviation(int input)
mitk::Quaternion GetQuaternionMean(int input)
mitk::PointSet::Pointer VectorToPointSet(std::vector< mitk::Point3D > pSet)
mitk::Vector3D GetEulerAnglesMean(int input)
~NavigationDataEvaluationFilter() override
NavigationDataEvaluationFilter()
NavigationDataToNavigationDataFilter is the base class of all filters that receive NavigationDatas as...
void Graft(const DataObject *data) override
Graft the data and information from one NavigationData to another.
virtual bool IsDataValid() const
returns true if the object contains valid data