17 #include <vtkCleanPolyData.h> 27 class mitkAnisotropicIterativeClosestPointRegistrationTestSuite :
public mitk::TestFixture 29 CPPUNIT_TEST_SUITE(mitkAnisotropicIterativeClosestPointRegistrationTestSuite);
32 CPPUNIT_TEST_SUITE_END();
35 typedef itk::Matrix<double, 3, 3>
Matrix3x3;
36 typedef itk::Vector<double, 3> Vector3;
37 typedef std::vector<Matrix3x3> CovarianceMatrixList;
45 CovarianceMatrixList m_SigmasMovingSurface;
46 CovarianceMatrixList m_SigmasFixedSurface;
48 double m_FRENormalizationFactor;
60 m_MovingSurface = mitk::IOUtil::Load<mitk::Surface>(
GetTestDataFilePath(
"AICPRegistration/head_green.stl"));
61 m_FixedSurface = mitk::IOUtil::Load<mitk::Surface>(
GetTestDataFilePath(
"AICPRegistration/head_red.stl"));
63 m_TargetsMovingSurface = mitk::IOUtil::Load<mitk::PointSet>(
GetTestDataFilePath(
"AICPRegistration/targets_head_green.mps"));
64 m_TargetsFixedSurface = mitk::IOUtil::Load<mitk::PointSet>(
GetTestDataFilePath(
"AICPRegistration/targets_head_red.mps"));
67 matrixCalculator->SetInputSurface(m_MovingSurface);
68 matrixCalculator->ComputeCovarianceMatrices();
69 m_SigmasMovingSurface = matrixCalculator->GetCovarianceMatrices();
70 const double meanVarX = matrixCalculator->GetMeanVariance();
72 matrixCalculator->SetInputSurface(m_FixedSurface);
73 matrixCalculator->ComputeCovarianceMatrices();
74 m_SigmasFixedSurface = matrixCalculator->GetCovarianceMatrices();
75 const double meanVarY = matrixCalculator->GetMeanVariance();
77 m_FRENormalizationFactor = sqrt(meanVarX + meanVarY);
80 void tearDown()
override 82 m_MovingSurface =
nullptr;
83 m_FixedSurface =
nullptr;
85 m_TargetsMovingSurface =
nullptr;
86 m_TargetsFixedSurface =
nullptr;
88 m_SigmasMovingSurface.clear();
89 m_SigmasFixedSurface.clear();
92 void testAicpRegistration()
94 const double expFRE = 27.5799;
95 const double expTRE = 1.68835;
96 mitk::AnisotropicIterativeClosestPointRegistration::Pointer aICP =
100 aICP->SetMovingSurface(m_MovingSurface);
101 aICP->SetFixedSurface(m_FixedSurface);
102 aICP->SetCovarianceMatricesMovingSurface(m_SigmasMovingSurface);
103 aICP->SetCovarianceMatricesFixedSurface(m_SigmasFixedSurface);
104 aICP->SetFRENormalizationFactor(m_FRENormalizationFactor);
105 aICP->SetThreshold(0.000001);
110 MITK_INFO <<
"FRE: Expected: " << expFRE <<
", computed: " << aICP->GetFRE();
111 CPPUNIT_ASSERT_MESSAGE(
"mitkAnisotropicIterativeClosestPointRegistrationTest:AicpRegistration Test FRE",
117 m_TargetsFixedSurface.GetPointer(),
119 aICP->GetTranslation());
123 MITK_INFO <<
"TRE: Expected: " << expTRE <<
", computed: " << tre;
124 CPPUNIT_ASSERT_MESSAGE(
"mitkAnisotropicIterativeClosestPointRegistrationTest:AicpRegistration Test TRE",
128 void testTrimmedAicpregistration()
130 const double expFRE = 4.8912;
131 const double expTRE = 0.0484215;
133 mitk::AnisotropicIterativeClosestPointRegistration::Pointer aICP =
137 aICP->SetMovingSurface(m_MovingSurface);
138 aICP->SetFixedSurface(m_FixedSurface);
139 aICP->SetCovarianceMatricesMovingSurface(m_SigmasMovingSurface);
140 aICP->SetCovarianceMatricesFixedSurface(m_SigmasFixedSurface);
141 aICP->SetFRENormalizationFactor(m_FRENormalizationFactor);
142 aICP->SetThreshold(0.000001);
143 aICP->SetTrimmFactor(0.50);
148 MITK_INFO <<
"FRE: Expected: " << expFRE <<
", computed: " << aICP->GetFRE();
150 CPPUNIT_ASSERT_MESSAGE(
"mitkAnisotropicIterativeClosestPointRegistrationTest:AicpRegistration Test FRE",
156 m_TargetsFixedSurface.GetPointer(),
158 aICP->GetTranslation());
160 MITK_INFO <<
"TRE: Expected: " << expTRE <<
", computed: " << tre;
161 CPPUNIT_ASSERT_MESSAGE(
"mitkAnisotropicIterativeClosestPointRegistrationTest:AicpRegistration Test TRE",
MITK_TEST_SUITE_REGISTRATION(mitkImageToItk)
#define MITK_TEST(TESTMETHOD)
Adds a test to the current test suite.
static std::string GetTestDataFilePath(const std::string &testData)
Get the absolute path for test data.
static double ComputeTargetRegistrationError(const mitk::PointSet *movingTargets, const mitk::PointSet *fixedTargets, const Rotation &rotation, const Translation &translation)
Compute the target registration error between two point sets.
Test fixture for parameterized tests.
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.