diff --git a/Modules/Core/TestingHelper/files.cmake b/Modules/Core/TestingHelper/files.cmake index 6e96a4b477..b34dbf0623 100644 --- a/Modules/Core/TestingHelper/files.cmake +++ b/Modules/Core/TestingHelper/files.cmake @@ -1,7 +1,8 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES mitkRenderingTestHelper.cpp mitkInteractionTestHelper.cpp + mitkTestDynamicImageGenerator.cpp ) diff --git a/Modules/ModelFit/include/mitkTestArtifactGenerator.h b/Modules/Core/TestingHelper/include/mitkTestDynamicImageGenerator.h similarity index 66% rename from Modules/ModelFit/include/mitkTestArtifactGenerator.h rename to Modules/Core/TestingHelper/include/mitkTestDynamicImageGenerator.h index e5e3334662..67bc9f782e 100644 --- a/Modules/ModelFit/include/mitkTestArtifactGenerator.h +++ b/Modules/Core/TestingHelper/include/mitkTestDynamicImageGenerator.h @@ -1,45 +1,44 @@ /*=================================================================== 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. ===================================================================*/ #ifndef __TEST_ARTIFACT_GENERATOR_H #define __TEST_ARTIFACT_GENERATOR_H #include "itkImage.h" #include "itkImageRegionIterator.h" #include "mitkImage.h" #include "mitkImagePixelReadAccessor.h" -#include "MitkModelFitExports.h" +#include namespace mitk { typedef itk::Image TestImageType; typedef itk::Image TestMaskType; - TestImageType::Pointer MITKMODELFIT_EXPORT GenerateTestImage(int factor = 1); + TestImageType::Pointer MITKTESTINGHELPER_EXPORT GenerateTestImage(int factor = 1); - TestMaskType::Pointer MITKMODELFIT_EXPORT GenerateTestMask(); + TestMaskType::Pointer MITKTESTINGHELPER_EXPORT GenerateTestMask(); - Image::Pointer MITKMODELFIT_EXPORT GenerateTestFrame(double timePoint); + Image::Pointer MITKTESTINGHELPER_EXPORT GenerateTestFrame(double timePoint); - Image::Pointer MITKMODELFIT_EXPORT GenerateTestMaskMITK(); - - Image::Pointer MITKMODELFIT_EXPORT GenerateDynamicTestImageMITK(); + Image::Pointer MITKTESTINGHELPER_EXPORT GenerateTestMaskMITK(); + Image::Pointer MITKTESTINGHELPER_EXPORT GenerateDynamicTestImageMITK(); } #endif diff --git a/Modules/ModelFit/src/TestingHelper/mitkTestArtifactGenerator.cpp b/Modules/Core/TestingHelper/src/mitkTestDynamicImageGenerator.cpp similarity index 99% rename from Modules/ModelFit/src/TestingHelper/mitkTestArtifactGenerator.cpp rename to Modules/Core/TestingHelper/src/mitkTestDynamicImageGenerator.cpp index 76a29d73b6..ccbc009773 100644 --- a/Modules/ModelFit/src/TestingHelper/mitkTestArtifactGenerator.cpp +++ b/Modules/Core/TestingHelper/src/mitkTestDynamicImageGenerator.cpp @@ -1,257 +1,257 @@ /*=================================================================== 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 "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" #include "mitkArbitraryTimeGeometry.h" #include "mitkImageCast.h" namespace mitk { typedef itk::Image FrameITKImageType; typedef itk::Image DynamicITKImageType; typedef itk::Image MaskITKImageType; TestImageType::Pointer GenerateTestImage(int factor) { TestImageType::Pointer image = TestImageType::New(); TestImageType::IndexType start; start[0] = 0; // first index on X start[1] = 0; // first index on Y TestImageType::SizeType size; size[0] = 3; // size along X size[1] = 3; // size along Y TestImageType::RegionType region; region.SetSize(size); region.SetIndex(start); image->SetRegions(region); image->Allocate(); itk::ImageRegionIterator it = itk::ImageRegionIterator(image, image->GetLargestPossibleRegion()); int count = 1; while (!it.IsAtEnd()) { it.Set(count * factor); ++it; ++count; } return image; } TestMaskType::Pointer GenerateTestMask() { TestMaskType::Pointer image = TestMaskType::New(); TestMaskType::IndexType start; start[0] = 0; // first index on X start[1] = 0; // first index on Y TestMaskType::SizeType size; size[0] = 3; // size along X size[1] = 3; // size along Y TestMaskType::RegionType region; region.SetSize(size); region.SetIndex(start); image->SetRegions(region); image->Allocate(); itk::ImageRegionIterator it = itk::ImageRegionIterator(image, image->GetLargestPossibleRegion()); int count = 1; while (!it.IsAtEnd()) { if (count > 1 && count < 5) { it.Set(1); } else { it.Set(0); } ++it; ++count; } return image; } Image::Pointer GenerateTestFrame(double timePoint) { FrameITKImageType::Pointer image = FrameITKImageType::New(); FrameITKImageType::IndexType start; start[0] = 0; // first index on X start[1] = 0; // first index on Y start[2] = 0; // first index on Z FrameITKImageType::SizeType size; size[0] = 3; // size along X size[1] = 3; // size along Y size[2] = 3; // size along Z FrameITKImageType::RegionType region; region.SetSize(size); region.SetIndex(start); image->SetRegions(region); image->Allocate(); itk::ImageRegionIterator it = itk::ImageRegionIterator(image, image->GetLargestPossibleRegion()); int count = 0; while (!it.IsAtEnd()) { double slope = count % (size[0] * size[1]); double offset = itk::Math::Floor(count / (size[0] * size[1])) * 10; it.Set(slope * timePoint + offset); ++it; ++count; } mitk::Image::Pointer mitkImage = mitk::Image::New(); mitkImage->InitializeByItk(image.GetPointer()); mitkImage->SetVolume(image->GetBufferPointer()); return mitkImage; } Image::Pointer GenerateTestMaskMITK() { MaskITKImageType::Pointer image = MaskITKImageType::New(); MaskITKImageType::IndexType start; start[0] = 0; // first index on X start[1] = 0; // first index on Y start[2] = 0; // first index on Z MaskITKImageType::SizeType size; size[0] = 3; // size along X size[1] = 3; // size along Y size[2] = 3; // size along Z MaskITKImageType::RegionType region; region.SetSize(size); region.SetIndex(start); image->SetRegions(region); image->Allocate(); itk::ImageRegionIterator it = itk::ImageRegionIterator(image, image->GetLargestPossibleRegion()); int count = 0; while (!it.IsAtEnd()) { if (count < 14) { it.Set(1); } else { it.Set(0); } ++it; ++count; } mitk::Image::Pointer mitkImage = mitk::Image::New(); mitkImage->InitializeByItk(image.GetPointer()); mitkImage->SetVolume(image->GetBufferPointer()); return mitkImage; } Image::Pointer GenerateDynamicTestImageMITK() { mitk::Image::Pointer tempImage = GenerateTestFrame(1); mitk::Image::Pointer dynamicImage = mitk::Image::New(); DynamicITKImageType::Pointer dynamicITKImage = DynamicITKImageType::New(); DynamicITKImageType::RegionType dynamicITKRegion; DynamicITKImageType::PointType dynamicITKOrigin; DynamicITKImageType::IndexType dynamicITKIndex; DynamicITKImageType::SpacingType dynamicITKSpacing; dynamicITKSpacing[0] = tempImage->GetGeometry()->GetSpacing()[0]; dynamicITKSpacing[1] = tempImage->GetGeometry()->GetSpacing()[1]; dynamicITKSpacing[2] = tempImage->GetGeometry()->GetSpacing()[2]; dynamicITKSpacing[3] = 5.0; dynamicITKIndex[0] = 0; // The first pixel of the REGION dynamicITKIndex[1] = 0; dynamicITKIndex[2] = 0; dynamicITKIndex[3] = 0; dynamicITKRegion.SetSize(0, tempImage->GetDimension(0)); dynamicITKRegion.SetSize(1, tempImage->GetDimension(1)); dynamicITKRegion.SetSize(2, tempImage->GetDimension(2)); dynamicITKRegion.SetSize(3, 10); dynamicITKRegion.SetIndex(dynamicITKIndex); dynamicITKOrigin[0] = tempImage->GetGeometry()->GetOrigin()[0]; dynamicITKOrigin[1] = tempImage->GetGeometry()->GetOrigin()[1]; dynamicITKOrigin[2] = tempImage->GetGeometry()->GetOrigin()[2]; dynamicITKImage->SetOrigin(dynamicITKOrigin); dynamicITKImage->SetSpacing(dynamicITKSpacing); dynamicITKImage->SetRegions(dynamicITKRegion); dynamicITKImage->Allocate(); dynamicITKImage->FillBuffer(0); //not sure if this is necessary // Convert mitk::CastToMitkImage(dynamicITKImage, dynamicImage); ArbitraryTimeGeometry::Pointer timeGeometry = ArbitraryTimeGeometry::New(); timeGeometry->ClearAllGeometries(); for (int i = 0; i < 10; ++i) { mitk::Image::Pointer frameImage = GenerateTestFrame(1 + (dynamicITKSpacing[3] * i)); mitk::ImageReadAccessor accessor(frameImage); dynamicImage->SetVolume(accessor.GetData(), i); timeGeometry->AppendNewTimeStepClone(frameImage->GetGeometry(), 1 + (dynamicITKSpacing[3] * i), 1 + (dynamicITKSpacing[3]*(i+1))); } dynamicImage->SetTimeGeometry(timeGeometry); return dynamicImage; } } diff --git a/Modules/ModelFit/files.cmake b/Modules/ModelFit/files.cmake index b046adcd38..40d7ada4fc 100644 --- a/Modules/ModelFit/files.cmake +++ b/Modules/ModelFit/files.cmake @@ -1,77 +1,76 @@ file(GLOB_RECURSE H_FILES RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/include/*") set(CPP_FILES Common/mitkExtractTimeGrid.cpp Common/mitkTimeGridHelper.cpp Common/mitkMaskedDynamicImageStatisticsGenerator.cpp Common/mitkModelFitConstants.cpp Common/mitkModelFitParameter.cpp Common/mitkModelFitCmdAppsHelper.cpp Common/mitkParameterFitImageGeneratorBase.cpp Common/mitkPixelBasedParameterFitImageGenerator.cpp Common/mitkROIBasedParameterFitImageGenerator.cpp Common/mitkModelFitInfo.cpp Common/mitkModelFitStaticParameterMap.cpp Common/mitkModelGenerator.cpp Common/mitkModelFitUIDHelper.cpp Common/mitkModelFitResultHelper.cpp Common/mitkScalarListLookupTable.cpp Common/mitkScalarListLookupTableProperty.cpp Common/mitkScalarListLookupTablePropertySerializer.cpp Common/mitkIModelFitProvider.cpp Common/mitkModelFitParameterValueExtraction.cpp Common/mitkBinaryImageToLabelSetImageFilter.cpp Common/mitkFormulaParser.cpp Common/mitkFresnel.cpp Common/mitkModelFitPlotDataHelper.cpp Common/mitkModelSignalImageGenerator.cpp Functors/mitkSimpleFunctorBase.cpp Functors/mitkSimpleFunctorPolicy.cpp Functors/mitkChiSquareFitCostFunction.cpp Functors/mitkReducedChiSquareFitCostFunction.cpp Functors/mitkConstraintCheckerBase.cpp Functors/mitkSimpleBarrierConstraintChecker.cpp Functors/mitkSquaredDifferencesFitCostFunction.cpp Functors/mitkSumOfSquaredDifferencesFitCostFunction.cpp Functors/mitkMVConstrainedCostFunctionDecorator.cpp Functors/mitkMVModelFitCostFunction.cpp Functors/mitkNormalizedSumOfSquaredDifferencesFitCostFunction.cpp Functors/mitkSVModelFitCostFunction.cpp Functors/mitkModelFitFunctorBase.cpp Functors/mitkLevenbergMarquardtModelFitFunctor.cpp Functors/mitkDummyModelFitFunctor.cpp Functors/mitkModelFitInfoSignalGenerationFunctor.cpp Functors/mitkIndexedValueFunctorPolicy.cpp Functors/mitkModelDataGenerationFunctor.cpp Models/mitkModelBase.cpp Models/mitkModelFactoryBase.cpp Models/mitkModelParameterizerBase.cpp Models/mitkLinearModel.cpp Models/mitkLinearModelFactory.cpp Models/mitkInitialParameterizationDelegateBase.cpp Models/mitkImageBasedParameterizationDelegate.cpp Models/mitkGenericParamModel.cpp Models/mitkGenericParamModelFactory.cpp Models/mitkGenericParamModelParameterizer.cpp Models/mitkValueBasedParameterizationDelegate.cpp Models/mitkT2DecayModel.cpp Models/mitkT2DecayModelFactory.cpp Models/mitkT2DecayModelParameterizer.cpp - TestingHelper/mitkTestArtifactGenerator.cpp TestingHelper/mitkTestModel.cpp TestingHelper/mitkTestModelFactory.cpp ) set(TPP_FILES include/itkMultiOutputNaryFunctorImageFilter.tpp include/itkMaskedStatisticsImageFilter.hxx include/itkMaskedNaryStatisticsImageFilter.hxx include/mitkModelFitProviderBase.tpp ) set(HXX_FILES ) set(MOC_H_FILES ) diff --git a/Modules/ModelFit/test/itkMaskedNaryStatisticsImageFilterTest.cpp b/Modules/ModelFit/test/itkMaskedNaryStatisticsImageFilterTest.cpp index 8df2f6f947..08e7b53d8d 100644 --- a/Modules/ModelFit/test/itkMaskedNaryStatisticsImageFilterTest.cpp +++ b/Modules/ModelFit/test/itkMaskedNaryStatisticsImageFilterTest.cpp @@ -1,109 +1,109 @@ /*=================================================================== 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 "itkImage.h" #include "itkImageRegionIterator.h" #include "itkMaskedNaryStatisticsImageFilter.h" #include "mitkTestingMacros.h" #include "mitkVector.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" int itkMaskedNaryStatisticsImageFilterTest(int /*argc*/ , char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("itkMaskedNaryStatisticsImageFilterTest") //Prepare test artifacts and helper mitk::TestImageType::Pointer img1 = mitk::GenerateTestImage(); mitk::TestImageType::Pointer img2 = mitk::GenerateTestImage(10); typedef itk::MaskedNaryStatisticsImageFilter FilterType; FilterType::Pointer testFilter = FilterType::New(); testFilter->SetInput(0,img1); testFilter->SetInput(1,img2); testFilter->Update(); FilterType::PixelVectorType max = testFilter->GetMaximum(); FilterType::PixelVectorType min = testFilter->GetMinimum(); FilterType::RealVectorType mean = testFilter->GetMean(); FilterType::RealVectorType sig = testFilter->GetSigma(); FilterType::RealVectorType variance = testFilter->GetVariance(); FilterType::RealVectorType sum = testFilter->GetSum(); MITK_TEST_CONDITION(2 == max.size(),"Check size of maximum"); MITK_TEST_CONDITION(2 == min.size(),"Check size of minimum"); MITK_TEST_CONDITION(2 == mean.size(),"Check size of mean"); MITK_TEST_CONDITION(2 == sig.size(),"Check size of sigma"); MITK_TEST_CONDITION(2 == variance.size(),"Check size of variance"); MITK_TEST_CONDITION(2 == sum.size(),"Check size of sum"); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[0]",9 == max[0]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[0]",1 == min[0]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[0]",5 == mean[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[0]",sqrt(7.5) == sig[0]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[0]",7.5 == variance[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[0]",45 == sum[0]); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[1]",90 == max[1]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[1]",10 == min[1]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[1]",50 == mean[1]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[1]",sqrt(750.0) == sig[1]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[1]",750 == variance[1]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[1]",450 == sum[1]); //Test with mask set mitk::TestMaskType::Pointer mask = mitk::GenerateTestMask(); testFilter->SetMask(mask); testFilter->Update(); max = testFilter->GetMaximum(); min = testFilter->GetMinimum(); mean = testFilter->GetMean(); sig = testFilter->GetSigma(); variance = testFilter->GetVariance(); sum = testFilter->GetSum(); MITK_TEST_CONDITION(2 == max.size(),"Check size of maximum"); MITK_TEST_CONDITION(2 == min.size(),"Check size of minimum"); MITK_TEST_CONDITION(2 == mean.size(),"Check size of mean"); MITK_TEST_CONDITION(2 == sig.size(),"Check size of sigma"); MITK_TEST_CONDITION(2 == variance.size(),"Check size of variance"); MITK_TEST_CONDITION(2 == sum.size(),"Check size of sum"); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[0]",4 == max[0]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[0]",2 == min[0]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[0]",3 == mean[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[0]",1 == sig[0]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[0]",1 == variance[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[0]",9 == sum[0]); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[1]",40 == max[1]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[1]",20 == min[1]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[1]",30 == mean[1]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[1]",10 == sig[1]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[1]",100 == variance[1]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[1]",90 == sum[1]); MITK_TEST_END() } diff --git a/Modules/ModelFit/test/itkMaskedStatisticsImageFilterTest.cpp b/Modules/ModelFit/test/itkMaskedStatisticsImageFilterTest.cpp index d72b56a6a9..b2e241f000 100644 --- a/Modules/ModelFit/test/itkMaskedStatisticsImageFilterTest.cpp +++ b/Modules/ModelFit/test/itkMaskedStatisticsImageFilterTest.cpp @@ -1,80 +1,80 @@ /*=================================================================== 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 "itkImage.h" #include "itkImageRegionIterator.h" #include "itkMaskedStatisticsImageFilter.h" #include "mitkTestingMacros.h" #include "mitkVector.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" int itkMaskedStatisticsImageFilterTest(int /*argc*/, char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("itkMaskedStatisticsImageFilterTest") //Prepare test artifacts and helper mitk::TestImageType::Pointer img1 = mitk::GenerateTestImage(); typedef itk::MaskedStatisticsImageFilter FilterType; FilterType::Pointer testFilter = FilterType::New(); testFilter->SetInput(img1); testFilter->SetNumberOfThreads(2); testFilter->Update(); FilterType::PixelType max = testFilter->GetMaximum(); FilterType::PixelType min = testFilter->GetMinimum(); FilterType::RealType mean = testFilter->GetMean(); FilterType::RealType sig = testFilter->GetSigma(); FilterType::RealType variance = testFilter->GetVariance(); FilterType::RealType sum = testFilter->GetSum(); CPPUNIT_ASSERT_MESSAGE("Check computed maximum",9 == max); CPPUNIT_ASSERT_MESSAGE("Check computed minimum",1 == min); CPPUNIT_ASSERT_MESSAGE("Check computed mean",5 == mean); CPPUNIT_ASSERT_MESSAGE("Check computed sigma",sqrt(7.5) == sig); CPPUNIT_ASSERT_MESSAGE("Check computed variance",7.5 == variance); CPPUNIT_ASSERT_MESSAGE("Check computed sum",45 == sum); //Test with mask set mitk::TestMaskType::Pointer mask = mitk::GenerateTestMask(); testFilter->SetMask(mask); testFilter->Update(); max = testFilter->GetMaximum(); min = testFilter->GetMinimum(); mean = testFilter->GetMean(); sig = testFilter->GetSigma(); variance = testFilter->GetVariance(); sum = testFilter->GetSum(); CPPUNIT_ASSERT_MESSAGE("Check computed maximum",4 == max); CPPUNIT_ASSERT_MESSAGE("Check computed minimum",2 == min); CPPUNIT_ASSERT_MESSAGE("Check computed mean",3 == mean); CPPUNIT_ASSERT_MESSAGE("Check computed sigma",1 == sig); CPPUNIT_ASSERT_MESSAGE("Check computed variance",1 == variance); CPPUNIT_ASSERT_MESSAGE("Check computed sum",9 == sum); MITK_TEST_END() } diff --git a/Modules/ModelFit/test/itkMultiOutputNaryFunctorImageFilterTest.cpp b/Modules/ModelFit/test/itkMultiOutputNaryFunctorImageFilterTest.cpp index ff957e12a0..59fd06e596 100644 --- a/Modules/ModelFit/test/itkMultiOutputNaryFunctorImageFilterTest.cpp +++ b/Modules/ModelFit/test/itkMultiOutputNaryFunctorImageFilterTest.cpp @@ -1,222 +1,222 @@ /*=================================================================== 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 "itkImage.h" #include "itkImageRegionIterator.h" #include "itkMultiOutputNaryFunctorImageFilter.h" #include "mitkTestingMacros.h" #include "mitkVector.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" class TestFunctor { public: typedef std::vector InputPixelArrayType; typedef std::vector OutputPixelArrayType; typedef itk::Index<2> IndexType; TestFunctor() { secondOutputSelection = 0; }; ~TestFunctor() {}; int secondOutputSelection; unsigned int GetNumberOfOutputs() const { return 4; } bool operator!=( const TestFunctor & other) const { return !(*this == other); } bool operator==( const TestFunctor & other ) const { return secondOutputSelection == other.secondOutputSelection; } inline OutputPixelArrayType operator()( const InputPixelArrayType & value, const IndexType& currentIndex ) const { OutputPixelArrayType result; int sum = 0; for (InputPixelArrayType::const_iterator pos = value.begin(); pos != value.end(); ++pos) { sum += *pos; } result.push_back(sum); result.push_back(value[secondOutputSelection]); result.push_back(currentIndex[0]); result.push_back(currentIndex[1]); return result; } }; int itkMultiOutputNaryFunctorImageFilterTest(int /*argc*/, char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("itkMultiOutputNaryFunctorImageFilter") //Prepare test artifacts and helper mitk::TestImageType::Pointer img1 = mitk::GenerateTestImage(); mitk::TestImageType::Pointer img2 = mitk::GenerateTestImage(10); mitk::TestImageType::Pointer img3 = mitk::GenerateTestImage(100); mitk::TestImageType::IndexType testIndex1; testIndex1[0] = 0; testIndex1[1] = 0; mitk::TestImageType::IndexType testIndex2; testIndex2[0] = 2; testIndex2[1] = 0; mitk::TestImageType::IndexType testIndex3; testIndex3[0] = 0; testIndex3[1] = 1; mitk::TestImageType::IndexType testIndex4; testIndex4[0] = 1; testIndex4[1] = 1; mitk::TestImageType::IndexType testIndex5; testIndex5[0] = 2; testIndex5[1] = 2; //Test default usage of filter typedef itk::MultiOutputNaryFunctorImageFilter FilterType; FilterType::Pointer testFilter = FilterType::New(); testFilter->SetInput(0,img1); testFilter->SetInput(1,img2); testFilter->SetInput(2,img3); testFilter->SetNumberOfThreads(2); testFilter->Update(); mitk::TestImageType::Pointer out1 = testFilter->GetOutput(0); mitk::TestImageType::Pointer out2 = testFilter->GetOutput(1); mitk::TestImageType::Pointer out3 = testFilter->GetOutput(2); mitk::TestImageType::Pointer out4 = testFilter->GetOutput(3); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #1 (functor #1)",111 == out1->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #2 (functor #1)",333 == out1->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #3 (functor #1)",444 == out1->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #4 (functor #1)",555 == out1->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #5 (functor #1)",999 == out1->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #1 (functor #1)",1 == out2->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #2 (functor #1)",3 == out2->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #3 (functor #1)",4 == out2->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #4 (functor #1)",5 == out2->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #5 (functor #1)",9 == out2->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #1 (functor #1)",0 == out3->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #2 (functor #1)",2 == out3->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #3 (functor #1)",0 == out3->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #4 (functor #1)",1 == out3->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #5 (functor #1)",2 == out3->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #1 (functor #1)",0 == out4->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #2 (functor #1)",0 == out4->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #3 (functor #1)",1 == out4->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #4 (functor #1)",1 == out4->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #5 (functor #1)",2 == out4->GetPixel(testIndex5)); //Test with functor set by user TestFunctor funct2; funct2.secondOutputSelection = 1; testFilter->SetFunctor(funct2); testFilter->Update(); out1 = testFilter->GetOutput(0); out2 = testFilter->GetOutput(1); out3 = testFilter->GetOutput(2); out4 = testFilter->GetOutput(3); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #1 (functor #2)",111 == out1->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #2 (functor #2)",333 == out1->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #3 (functor #2)",444 == out1->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #4 (functor #2)",555 == out1->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #1 index #5 (functor #2)",999 == out1->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #1 (functor #2)",10 == out2->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #2 (functor #2)",30 == out2->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #3 (functor #2)",40 == out2->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #4 (functor #2)",50 == out2->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #2 index #5 (functor #2)",90 == out2->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #1 (functor #2)",0 == out3->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #2 (functor #2)",2 == out3->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #3 (functor #2)",0 == out3->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #4 (functor #2)",1 == out3->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #3 index #5 (functor #2)",2 == out3->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #1 (functor #2)",0 == out4->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #2 (functor #2)",0 == out4->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #3 (functor #2)",1 == out4->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #4 (functor #2)",1 == out4->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of output #4 index #5 (functor #2)",2 == out4->GetPixel(testIndex5)); //Test with mask set mitk::TestMaskType::Pointer mask = mitk::GenerateTestMask(); testFilter->SetMask(mask); testFilter->Update(); out1 = testFilter->GetOutput(0); out2 = testFilter->GetOutput(1); out3 = testFilter->GetOutput(2); out4 = testFilter->GetOutput(3); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #1 index #1 (functor #2)",0 == out1->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #1 index #2 (functor #2)",333 == out1->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #1 index #3 (functor #2)",444 == out1->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #1 index #4 (functor #2)",0 == out1->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #1 index #5 (functor #2)",0 == out1->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #2 index #1 (functor #2)",0 == out2->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #2 index #2 (functor #2)",30 == out2->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #2 index #3 (functor #2)",40 == out2->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #2 index #4 (functor #2)",0 == out2->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #2 index #5 (functor #2)",0 == out2->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #3 index #1 (functor #2)",0 == out3->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #3 index #2 (functor #2)",2 == out3->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #3 index #3 (functor #2)",0 == out3->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #3 index #4 (functor #2)",0 == out3->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #3 index #5 (functor #2)",0 == out3->GetPixel(testIndex5)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #4 index #1 (functor #2)",0 == out4->GetPixel(testIndex1)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #4 index #2 (functor #2)",0 == out4->GetPixel(testIndex2)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #4 index #3 (functor #2)",1 == out4->GetPixel(testIndex3)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #4 index #4 (functor #2)",0 == out4->GetPixel(testIndex4)); CPPUNIT_ASSERT_MESSAGE("Check pixel of masked output #4 index #5 (functor #2)",0 == out4->GetPixel(testIndex5)); MITK_TEST_END() } diff --git a/Modules/ModelFit/test/mitkMaskedDynamicImageStatisticsGeneratorTest.cpp b/Modules/ModelFit/test/mitkMaskedDynamicImageStatisticsGeneratorTest.cpp index c3634f5bac..d289b0df42 100644 --- a/Modules/ModelFit/test/mitkMaskedDynamicImageStatisticsGeneratorTest.cpp +++ b/Modules/ModelFit/test/mitkMaskedDynamicImageStatisticsGeneratorTest.cpp @@ -1,79 +1,79 @@ /*=================================================================== 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 "mitkTestingMacros.h" #include "mitkImage.h" #include "mitkImagePixelReadAccessor.h" #include "mitkMaskedDynamicImageStatisticsGenerator.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" int mitkMaskedDynamicImageStatisticsGeneratorTest(int /*argc*/, char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("mitkParameterFitImageGenerator") mitk::Image::Pointer dynamicImage = mitk::GenerateDynamicTestImageMITK(); //Test default usage of filter mitk::MaskedDynamicImageStatisticsGenerator::Pointer generator = mitk::MaskedDynamicImageStatisticsGenerator::New(); generator->SetDynamicImage(dynamicImage); generator->Generate(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType max = generator->GetMaximum(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType min = generator->GetMinimum(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType mean = generator->GetMean(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType sig = generator->GetSigma(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType variance = generator->GetVariance(); mitk::MaskedDynamicImageStatisticsGenerator::ResultType sum = generator->GetSum(); MITK_TEST_CONDITION(10 == max.size(),"Check size of maximum"); MITK_TEST_CONDITION(10 == min.size(),"Check size of minimum"); MITK_TEST_CONDITION(10 == mean.size(),"Check size of mean"); MITK_TEST_CONDITION(10 == sig.size(),"Check size of sigma"); MITK_TEST_CONDITION(10 == variance.size(),"Check size of variance"); MITK_TEST_CONDITION(10 == sum.size(),"Check size of sum"); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[0]", 28 == max[0]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[0]", 0 == min[0]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[0]", 14 == mean[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[0]", 8.7266171082410953 == sig[0]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[0]", 76.153846153846160 == variance[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[0]", 378 == sum[0]); mitk::Image::Pointer maskImage = mitk::GenerateTestMaskMITK(); generator->SetMask(maskImage); generator->Generate(); max = generator->GetMaximum(); min = generator->GetMinimum(); mean = generator->GetMean(); sig = generator->GetSigma(); variance = generator->GetVariance(); sum = generator->GetSum(); CPPUNIT_ASSERT_MESSAGE("Check computed maximum[0]", 14 == max[0]); CPPUNIT_ASSERT_MESSAGE("Check computed minimum[0]", 0 == min[0]); CPPUNIT_ASSERT_MESSAGE("Check computed mean[0]",6.8571428571428568 == mean[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sigma[0]",4.6053003386088953 == sig[0]); CPPUNIT_ASSERT_MESSAGE("Check computed variance[0]",21.208791208791204 == variance[0]); CPPUNIT_ASSERT_MESSAGE("Check computed sum[0]",96.000000000000000 == sum[0]); MITK_TEST_END() } diff --git a/Modules/ModelFit/test/mitkPixelBasedParameterFitImageGeneratorTest.cpp b/Modules/ModelFit/test/mitkPixelBasedParameterFitImageGeneratorTest.cpp index 0307dfc745..976545ca86 100644 --- a/Modules/ModelFit/test/mitkPixelBasedParameterFitImageGeneratorTest.cpp +++ b/Modules/ModelFit/test/mitkPixelBasedParameterFitImageGeneratorTest.cpp @@ -1,159 +1,159 @@ /*=================================================================== 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 "itkImageRegionIterator.h" #include "mitkTestingMacros.h" #include "mitkImage.h" #include "mitkImagePixelReadAccessor.h" #include "mitkPixelBasedParameterFitImageGenerator.h" #include "mitkLinearModelParameterizer.h" #include "mitkLevenbergMarquardtModelFitFunctor.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" int mitkPixelBasedParameterFitImageGeneratorTest(int /*argc*/, char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("mitkPixelBasedParameterFitImageGenerator") //Prepare test artifacts and helper itk::Index<3> testIndex1; testIndex1[0] = 0; testIndex1[1] = 0; testIndex1[2] = 0; itk::Index<3> testIndex2; testIndex2[0] = 2; testIndex2[1] = 0; testIndex2[2] = 1; itk::Index<3> testIndex3; testIndex3[0] = 1; testIndex3[1] = 1; testIndex3[2] = 2; itk::Index<3> testIndex4; testIndex4[0] = 2; testIndex4[1] = 2; testIndex4[2] = 0; itk::Index<3> testIndex5; testIndex5[0] = 1; testIndex5[1] = 1; testIndex5[2] = 1; itk::Index<3> testIndex6; testIndex6[0] = 2; testIndex6[1] = 1; testIndex6[2] = 1; mitk::Image::Pointer dynamicImage = mitk::GenerateDynamicTestImageMITK(); mitk::LinearModel::Pointer model = mitk::LinearModel::New(); mitk::LevenbergMarquardtModelFitFunctor::Pointer testFunctor = mitk::LevenbergMarquardtModelFitFunctor::New(); //Test default usage of filter mitk::PixelBasedParameterFitImageGenerator::Pointer generator = mitk::PixelBasedParameterFitImageGenerator::New(); mitk::LinearModelParameterizer::Pointer parameterizer = mitk::LinearModelParameterizer::New(); generator->SetDynamicImage(dynamicImage); generator->SetModelParameterizer(parameterizer); generator->SetFitFunctor(testFunctor); generator->Generate(); mitk::PixelBasedParameterFitImageGenerator::ParameterImageMapType resultImages = generator->GetParameterImages(); mitk::PixelBasedParameterFitImageGenerator::ParameterImageMapType derivedResultImages = generator->GetDerivedParameterImages(); CPPUNIT_ASSERT_MESSAGE("Check number of parameter images", 2 == resultImages.size()); MITK_TEST_CONDITION(resultImages.find("slope") != resultImages.end(),"Check if \"slope\" parameter image exists."); MITK_TEST_CONDITION(resultImages.find("offset") != resultImages.end(),"Check if \"offset\" parameter image exists."); CPPUNIT_ASSERT_MESSAGE("Check number of derived parameter images", 1 == derivedResultImages.size()); MITK_TEST_CONDITION(derivedResultImages.find("x-intercept") != derivedResultImages.end(),"Check if \"x-intercept\" derived parameter image exists."); mitk::ImagePixelReadAccessor slopeAccessor(resultImages["slope"]); mitk::ImagePixelReadAccessor offsetAccessor(resultImages["offset"]); double testValue = slopeAccessor.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #1"); testValue = slopeAccessor.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #2"); testValue = slopeAccessor.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(4000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #3"); testValue = slopeAccessor.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(8000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #4"); testValue = offsetAccessor.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #1"); testValue = offsetAccessor.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(10,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #2"); testValue = offsetAccessor.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(20,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #3"); testValue = offsetAccessor.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #4"); //Test with mask set mitk::Image::Pointer maskImage = mitk::GenerateTestMaskMITK(); generator->SetMask(maskImage); generator->Generate(); resultImages = generator->GetParameterImages(); derivedResultImages = generator->GetDerivedParameterImages(); CPPUNIT_ASSERT_MESSAGE("Check number of parameter images", 2 == resultImages.size()); MITK_TEST_CONDITION(resultImages.find("slope") != resultImages.end(),"Check if \"slope\" parameter image exists."); MITK_TEST_CONDITION(resultImages.find("offset") != resultImages.end(),"Check if \"offset\" parameter image exists."); CPPUNIT_ASSERT_MESSAGE("Check number of derived parameter images", 1 == derivedResultImages.size()); MITK_TEST_CONDITION(derivedResultImages.find("x-intercept") != derivedResultImages.end(),"Check if \"x-intercept\" derived parameter image exists."); mitk::ImagePixelReadAccessor slopeAccessor2(resultImages["slope"]); mitk::ImagePixelReadAccessor offsetAccessor2(resultImages["offset"]); testValue = slopeAccessor2.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #1"); testValue = slopeAccessor2.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #2"); testValue = slopeAccessor2.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #3"); testValue = slopeAccessor2.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(8000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #4"); testValue = slopeAccessor2.GetPixelByIndex(testIndex5); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(4000,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #5"); testValue = slopeAccessor2.GetPixelByIndex(testIndex6); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #6"); testValue = offsetAccessor2.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #1"); testValue = offsetAccessor2.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(10,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #2"); testValue = offsetAccessor2.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #3"); testValue = offsetAccessor2.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #4"); testValue = offsetAccessor2.GetPixelByIndex(testIndex5); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(10,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #5"); testValue = offsetAccessor2.GetPixelByIndex(testIndex6); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #6"); MITK_TEST_END() } diff --git a/Modules/ModelFit/test/mitkROIBasedParameterFitImageGeneratorTest.cpp b/Modules/ModelFit/test/mitkROIBasedParameterFitImageGeneratorTest.cpp index 4df176529a..24e9d71372 100644 --- a/Modules/ModelFit/test/mitkROIBasedParameterFitImageGeneratorTest.cpp +++ b/Modules/ModelFit/test/mitkROIBasedParameterFitImageGeneratorTest.cpp @@ -1,142 +1,142 @@ /*=================================================================== 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 "itkImageRegionIterator.h" #include "mitkTestingMacros.h" #include "mitkImage.h" #include "mitkImagePixelReadAccessor.h" #include "mitkROIBasedParameterFitImageGenerator.h" #include "mitkLinearModelParameterizer.h" #include "mitkLevenbergMarquardtModelFitFunctor.h" -#include "mitkTestArtifactGenerator.h" +#include "mitkTestDynamicImageGenerator.h" int mitkROIBasedParameterFitImageGeneratorTest(int /*argc*/, char*[] /*argv[]*/) { // always start with this! MITK_TEST_BEGIN("mitkROIBasedParameterFitImageGenerator") //Prepare test artifacts and helper itk::Index<3> testIndex1; testIndex1[0] = 0; testIndex1[1] = 0; testIndex1[2] = 0; itk::Index<3> testIndex2; testIndex2[0] = 2; testIndex2[1] = 0; testIndex2[2] = 1; itk::Index<3> testIndex3; testIndex3[0] = 1; testIndex3[1] = 1; testIndex3[2] = 2; itk::Index<3> testIndex4; testIndex4[0] = 2; testIndex4[1] = 2; testIndex4[2] = 0; itk::Index<3> testIndex5; testIndex5[0] = 1; testIndex5[1] = 1; testIndex5[2] = 1; itk::Index<3> testIndex6; testIndex6[0] = 2; testIndex6[1] = 1; testIndex6[2] = 1; mitk::Image::Pointer maskImage = mitk::GenerateTestMaskMITK(); mitk::ROIBasedParameterFitImageGenerator::TimeGridType timeGrid; timeGrid.SetSize(5); timeGrid[0] = 0; timeGrid[1] = 1; timeGrid[2] = 2; timeGrid[3] = 3; timeGrid[4] = 4; mitk::ROIBasedParameterFitImageGenerator::SignalType signal; signal.SetSize(5); signal[0] = 3; signal[1] = 5; signal[2] = 7; signal[3] = 9; signal[4] = 11; mitk::LinearModel::Pointer model = mitk::LinearModel::New(); mitk::LevenbergMarquardtModelFitFunctor::Pointer testFunctor = mitk::LevenbergMarquardtModelFitFunctor::New(); //Test default usage of filter mitk::ROIBasedParameterFitImageGenerator::Pointer generator = mitk::ROIBasedParameterFitImageGenerator::New(); mitk::LinearModelParameterizer::Pointer parameterizer = mitk::LinearModelParameterizer::New(); generator->SetModelParameterizer(parameterizer); generator->SetFitFunctor(testFunctor); generator->SetMask(maskImage); generator->SetSignal(signal); generator->SetTimeGrid(timeGrid); generator->Generate(); mitk::ROIBasedParameterFitImageGenerator::ParameterImageMapType resultImages = generator->GetParameterImages(); mitk::ROIBasedParameterFitImageGenerator::ParameterImageMapType derivedResultImages = generator->GetDerivedParameterImages(); CPPUNIT_ASSERT_MESSAGE("Check number of parameter images", 2 == resultImages.size()); MITK_TEST_CONDITION(resultImages.find("slope") != resultImages.end(),"Check if \"slope\" parameter image exists."); MITK_TEST_CONDITION(resultImages.find("offset") != resultImages.end(),"Check if \"offset\" parameter image exists."); CPPUNIT_ASSERT_MESSAGE("Check number of derived parameter images", 1 == derivedResultImages.size()); MITK_TEST_CONDITION(derivedResultImages.find("x-intercept") != derivedResultImages.end(),"Check if \"x-intercept\" derived parameter image exists."); mitk::ImagePixelReadAccessor slopeAccessor2(resultImages["slope"]); mitk::ImagePixelReadAccessor offsetAccessor2(resultImages["offset"]); double testValue = slopeAccessor2.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #1"); testValue = slopeAccessor2.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #2"); testValue = slopeAccessor2.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #3"); testValue = slopeAccessor2.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #4"); testValue = slopeAccessor2.GetPixelByIndex(testIndex5); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(2,testValue, 1e-4, true)==true, "Check param #1 (slope) at index #5"); testValue = slopeAccessor2.GetPixelByIndex(testIndex6); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #1 (slope) at index #6"); testValue = offsetAccessor2.GetPixelByIndex(testIndex1); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(3,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #1"); testValue = offsetAccessor2.GetPixelByIndex(testIndex2); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(3,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #2"); testValue = offsetAccessor2.GetPixelByIndex(testIndex3); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #3"); testValue = offsetAccessor2.GetPixelByIndex(testIndex4); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(3,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #4"); testValue = offsetAccessor2.GetPixelByIndex(testIndex5); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(3,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #5"); testValue = offsetAccessor2.GetPixelByIndex(testIndex6); MITK_TEST_CONDITION_REQUIRED(mitk::Equal(0,testValue, 1e-5, true)==true, "Check param #2 (offset) at index #6"); MITK_TEST_END() } diff --git a/Plugins/org.mitk.gui.qt.fit.demo/CMakeLists.txt b/Plugins/org.mitk.gui.qt.fit.demo/CMakeLists.txt index c4a48e7ffc..22d8affbe5 100644 --- a/Plugins/org.mitk.gui.qt.fit.demo/CMakeLists.txt +++ b/Plugins/org.mitk.gui.qt.fit.demo/CMakeLists.txt @@ -1,7 +1,7 @@ project(org_mitk_gui_qt_fit_demo) mitk_create_plugin( EXPORT_DIRECTIVE FitGeneratorDemo_EXPORT EXPORTED_INCLUDE_SUFFIXES src - MODULE_DEPENDS MitkQtWidgetsExt MitkModelFit MitkModelFitUI + MODULE_DEPENDS MitkQtWidgetsExt MitkTestingHelper MitkModelFit MitkModelFitUI ) diff --git a/Plugins/org.mitk.gui.qt.fit.demo/src/internal/FitGeneratorDemoView.cpp b/Plugins/org.mitk.gui.qt.fit.demo/src/internal/FitGeneratorDemoView.cpp index 159f88d044..bb96d6f664 100644 --- a/Plugins/org.mitk.gui.qt.fit.demo/src/internal/FitGeneratorDemoView.cpp +++ b/Plugins/org.mitk.gui.qt.fit.demo/src/internal/FitGeneratorDemoView.cpp @@ -1,258 +1,258 @@ /*=================================================================== 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 "FitGeneratorDemoView.h" #include #include #include #include #include "mitkWorkbenchUtil.h" #include #include #include #include #include #include #include #include #include #include #include #include -#include +#include #include const std::string FitGeneratorDemoView::VIEW_ID = "org.mitk.gui.qt.fit.demo"; typedef itk::Image FrameITKImageType; typedef itk::Image DynamicITKImageType; void FitGeneratorDemoView::SetFocus() { m_Controls.btnModelling->setFocus(); } void FitGeneratorDemoView::CreateQtPartControl(QWidget* parent) { m_Controls.setupUi(parent); m_Controls.btnModelling->setEnabled(false); connect(m_Controls.btnModelling, SIGNAL(clicked()), this, SLOT(OnModellingButtonClicked())); connect(m_Controls.btnGenerateTestData, SIGNAL(clicked()), this, SLOT(OnGenerateTestDataButtonClicked())); m_Controls.leFitName->setText(tr("demo")); } void FitGeneratorDemoView::OnModellingButtonClicked() { Generate(); } void FitGeneratorDemoView::OnGenerateTestDataButtonClicked() { mitk::Image::Pointer testImage = mitk::GenerateDynamicTestImageMITK(); mitk::DataNode::Pointer testNode = mitk::DataNode::New(); testNode->SetData(testImage); testNode->SetName("LinearModel_4DTestImage"); this->GetDataStorage()->Add(testNode); } void FitGeneratorDemoView::OnSelectionChanged(berry::IWorkbenchPart::Pointer /*source*/, const QList& /*nodes*/) { QList dataNodes = this->GetDataManagerSelection(); m_selectedNode = NULL; m_selectedImage = NULL; m_selectedMaskNode = NULL; m_selectedMask = NULL; if (!dataNodes.empty()) { m_selectedNode = dataNodes[0]; mitk::Image* selectedImage = dynamic_cast(m_selectedNode->GetData()); if (selectedImage && selectedImage->GetDimension(3) > 1) { m_selectedImage = selectedImage; } if (dataNodes.size() > 1) { m_selectedMaskNode = dataNodes[1]; mitk::NodePredicateDataType::Pointer isLabelSet = mitk::NodePredicateDataType::New("LabelSetImage"); mitk::NodePredicateDataType::Pointer isImage = mitk::NodePredicateDataType::New("Image"); mitk::NodePredicateProperty::Pointer isBinary = mitk::NodePredicateProperty::New("binary", mitk::BoolProperty::New(true)); mitk::NodePredicateAnd::Pointer isLegacyMask = mitk::NodePredicateAnd::New(isImage, isBinary); mitk::NodePredicateOr::Pointer maskPredicate = mitk::NodePredicateOr::New(isLegacyMask, isLabelSet); mitk::Image* selectedMask = dynamic_cast(this->m_selectedMaskNode->GetData()); if (selectedMask && maskPredicate->CheckNode(m_selectedMaskNode)) { m_selectedMask = selectedMask; if (this->m_selectedMask->GetTimeSteps() > 1) { MITK_INFO << "Selected mask has multiple timesteps. Only use first timestep to mask model fit. Mask name: " << m_selectedMaskNode->GetName() ; mitk::ImageTimeSelector::Pointer maskedImageTimeSelector = mitk::ImageTimeSelector::New(); maskedImageTimeSelector->SetInput(this->m_selectedMask); maskedImageTimeSelector->SetTimeNr(0); maskedImageTimeSelector->UpdateLargestPossibleRegion(); this->m_selectedMask = maskedImageTimeSelector->GetOutput(); } } } } if (m_selectedImage) { m_Controls.lTimeseries->setText((m_selectedNode->GetName()).c_str()); } else { if (m_selectedNode.IsNull()) { m_Controls.lTimeseries->setText("None"); } else { m_Controls.lTimeseries->setText("Error. Selected node #1 is no 4D image!"); } } if (m_selectedMask) { m_Controls.lMask->setText((m_selectedMaskNode->GetName()).c_str()); } else { if (m_selectedMaskNode.IsNull()) { m_Controls.lMask->setText("None"); } else { m_Controls.lMask->setText("Error. Selected node #2 is no mask!"); } } m_Controls.btnModelling->setEnabled(m_selectedImage.IsNotNull()); } void FitGeneratorDemoView::Generate() { mitk::PixelBasedParameterFitImageGenerator::Pointer fitGenerator = mitk::PixelBasedParameterFitImageGenerator::New(); //Model configuration (static parameters) can be done now //Specify fitting strategy and evaluation parameters mitk::LevenbergMarquardtModelFitFunctor::Pointer fitFunctor = mitk::LevenbergMarquardtModelFitFunctor::New(); mitk::SumOfSquaredDifferencesFitCostFunction::Pointer evaluation = mitk::SumOfSquaredDifferencesFitCostFunction::New(); fitFunctor->RegisterEvaluationParameter("sum_diff^2", evaluation); //Parametrize fit generator mitk::LinearModelParameterizer::Pointer parameterizer = mitk::LinearModelParameterizer::New(); fitGenerator->SetModelParameterizer(parameterizer); fitGenerator->SetDynamicImage(m_selectedImage); fitGenerator->SetFitFunctor(fitFunctor); if (m_selectedMask.IsNotNull()) { fitGenerator->SetMask(m_selectedMask); } mitk::modelFit::ModelFitInfo::Pointer fitSession = mitk::modelFit::CreateFitInfoFromModelParameterizer(parameterizer, m_selectedNode->GetData(), mitk::ModelFitConstants::FIT_TYPE_VALUE_PIXELBASED(), m_Controls.leFitName->text().toStdString()); ///////////////////////// //create job and put it into the thread pool ParameterFitBackgroundJob* pJob = new ParameterFitBackgroundJob(fitGenerator, fitSession, m_selectedNode); pJob->setAutoDelete(true); connect(pJob, SIGNAL(Error(QString)), this, SLOT(OnJobError(QString))); connect(pJob, SIGNAL(Finished()), this, SLOT(OnJobFinished())); connect(pJob, SIGNAL(ResultsAreAvailable(mitk::modelFit::ModelFitResultNodeVectorType, const ParameterFitBackgroundJob*)), this, SLOT(OnJobResultsAreAvailable(mitk::modelFit::ModelFitResultNodeVectorType, const ParameterFitBackgroundJob*)), Qt::BlockingQueuedConnection); connect(pJob, SIGNAL(JobProgress(double)), this, SLOT(OnJobProgress(double))); connect(pJob, SIGNAL(JobStatusChanged(QString)), this, SLOT(OnJobStatusChanged(QString))); QThreadPool* threadPool = QThreadPool::globalInstance(); threadPool->start(pJob); } FitGeneratorDemoView::FitGeneratorDemoView() { m_selectedImage = NULL; m_selectedNode = NULL; } void FitGeneratorDemoView::OnJobFinished() { this->m_Controls.textEdit->append(QString("Fitting finished")); }; void FitGeneratorDemoView::OnJobError(QString err) { MITK_ERROR << err.toStdString().c_str(); m_Controls.textEdit->append(QString("") + err + QString("")); }; void FitGeneratorDemoView::OnJobResultsAreAvailable( mitk::modelFit::ModelFitResultNodeVectorType results, const ParameterFitBackgroundJob* pJob) { //Store the resulting parameter fit image via convenience helper function in data storage //(handles the correct generation of the nodes and their properties) mitk::modelFit::StoreResultsInDataStorage(this->GetDataStorage(), results, pJob->GetParentNode()); }; void FitGeneratorDemoView::OnJobProgress(double progress) { QString report = QString("Progress. ") + QString::number(progress); this->m_Controls.textEdit->append(report); }; void FitGeneratorDemoView::OnJobStatusChanged(QString info) { this->m_Controls.textEdit->append(info); }