diff --git a/Modules/Segmentation/Testing/files.cmake b/Modules/Segmentation/Testing/files.cmake index 69f81ec030..503dac73ea 100644 --- a/Modules/Segmentation/Testing/files.cmake +++ b/Modules/Segmentation/Testing/files.cmake @@ -1,40 +1,41 @@ set(MODULE_TESTS + mitkComputeContourSetNormalsFilterTest.cpp mitkContourMapper2DTest.cpp mitkContourTest.cpp mitkDataNodeSegmentationTest.cpp mitkImageToContourFilterTest.cpp # mitkSegmentationInterpolationTest.cpp mitkOverwriteSliceFilterTest.cpp mitkOverwriteSliceFilterObliquePlaneTest.cpp #mitkContourModelTest.cpp #mitkContourModelIOTest.cpp # mitkToolManagerTest.cpp mitkReduceContourSetFilterTest.cpp mitkToolManagerProviderTest.cpp ) set(MODULE_IMAGE_TESTS mitkManualSegmentationToSurfaceFilterTest.cpp #only runs on images mitkOverwriteSliceImageFilterTest.cpp #only runs on images ) set(MODULE_CUSTOM_TESTS ) set(MODULE_TESTIMAGES US4DCyl.nrrd Pic3D.nrrd Pic2DplusT.nrrd BallBinary30x30x30.nrrd Png2D-bw.png ) # Create an artificial module initializing class for # usServices set(testdriver_init_file ) usFunctionGenerateModuleInit(testdriver_init_file NAME SegmentationTestDriver DEPENDS "Segmentation" VERSION "0.1.0" ) set(TEST_CPP_FILES ${testdriver_init_file}) diff --git a/Modules/Segmentation/Testing/mitkComputeContourSetNormalsFilterTest.cpp b/Modules/Segmentation/Testing/mitkComputeContourSetNormalsFilterTest.cpp new file mode 100644 index 0000000000..90a4e72630 --- /dev/null +++ b/Modules/Segmentation/Testing/mitkComputeContourSetNormalsFilterTest.cpp @@ -0,0 +1,89 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +class mitkComputeContourSetNormalsFilterTestSuite : public mitk::TestFixture +{ + CPPUNIT_TEST_SUITE(mitkComputeContourSetNormalsFilterTestSuite); + MITK_TEST(TestComputeNormals); + MITK_TEST(TestComputeNormalsWithHole); + CPPUNIT_TEST_SUITE_END(); + +private: + + mitk::ComputeContourSetNormalsFilter::Pointer m_ContourNormalsFilter; + +public: + + void setUp() + { + m_ContourNormalsFilter = mitk::ComputeContourSetNormalsFilter::New(); + CPPUNIT_ASSERT_MESSAGE("Failed to initialize ReduceContourSetFilter", m_ContourNormalsFilter.IsNotNull()); + } + + // Compute the normals for a regular contour + void TestComputeNormals() + { + mitk::Surface::Pointer contour = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/Reference/SingleContour.vtk")); + m_ContourNormalsFilter->SetInput(contour); + m_ContourNormalsFilter->Update(); + // Get the computed normals (basically lines) + mitk::Surface::Pointer normals = m_ContourNormalsFilter->GetNormalsAsSurface(); + // Get the actual surface object which has the contours stored as normals internally + mitk::Surface::Pointer contourWithNormals = m_ContourNormalsFilter->GetOutput(); + + mitk::Surface::Pointer referenceContour = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/Reference/ContourWithNormals.vtk")); + mitk::Surface::Pointer referenceNormals = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/Reference/ContourNormals.vtk")); + + CPPUNIT_ASSERT_MESSAGE("Unequal contours", mitk::Equal(contourWithNormals->GetVtkPolyData(), referenceContour->GetVtkPolyData(), 0.000001, true)); + CPPUNIT_ASSERT_MESSAGE("Unequal contours", mitk::Equal(normals->GetVtkPolyData(), referenceNormals->GetVtkPolyData(), 0.000001, true)); + } + + + + // Reduce contours with Douglas Peucker + void TestComputeNormalsWithHole() + { + mitk::Image::Pointer segmentationImage = mitk::IOUtil::LoadImage(GetTestDataFilePath("SurfaceInterpolation/LiverSegmentation.nrrd")); + + mitk::Surface::Pointer contour = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/ComputeNormals/ContourWithHoles.vtk")); + m_ContourNormalsFilter->SetInput(contour); + m_ContourNormalsFilter->SetSegmentationBinaryImage(segmentationImage); + m_ContourNormalsFilter->Update(); + mitk::Surface::Pointer contourWithNormals = m_ContourNormalsFilter->GetOutput(); + mitk::Surface::Pointer normals = m_ContourNormalsFilter->GetNormalsAsSurface(); + + mitk::Surface::Pointer contourReference = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/Reference/ContourWithHolesWithNormals.vtk")); + mitk::Surface::Pointer normalsReference = mitk::IOUtil::LoadSurface(GetTestDataFilePath("SurfaceInterpolation/Reference/NormalsWithHoles.vtk")); + + CPPUNIT_ASSERT_MESSAGE("Error computing normals", mitk::Equal(normals->GetVtkPolyData(), normalsReference->GetVtkPolyData(), 0.000001, true)); + CPPUNIT_ASSERT_MESSAGE("Error computing normals", + contourWithNormals->GetVtkPolyData()->GetCellData()->GetNormals()->GetNumberOfTuples() == contourReference->GetVtkPolyData()->GetNumberOfPoints()); + } + +}; + +MITK_TEST_SUITE_REGISTRATION(mitkComputeContourSetNormalsFilter)