1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkScalarChanAndVeseSparseLevelSetImageFilterTest2.cxx
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#include "itkScalarChanAndVeseSparseLevelSetImageFilter.h"
#include "itkScalarChanAndVeseLevelSetFunction.h"
#include "itkScalarChanAndVeseLevelSetFunctionData.h"
#include "itkConstrainedRegionBasedLevelSetFunctionSharedData.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkImage.h"
#include "itkTestingMacros.h"
#include "itkAtanRegularizedHeavisideStepFunction.h"
int itkScalarChanAndVeseSparseLevelSetImageFilterTest2( int argc, char * argv [] )
{
if( argc < 4 )
{
std::cerr << "Missing arguments" << std::endl;
std::cerr << "Usage: " << std::endl;
std::cerr << argv[0] << "inputLevelSetImage inputFeatureImage ";
std::cerr << " outputLevelSetImage" << std::endl;
return EXIT_FAILURE;
}
unsigned int nb_iteration = 50;
double rms = 0.;
double epsilon = 1.;
double mu = 0.;
double nu = 0.;
double l1 = 1.;
double l2 = 3.;
const unsigned int Dimension = 2;
typedef float ScalarPixelType;
typedef itk::Image< ScalarPixelType, Dimension > LevelSetImageType;
typedef itk::Image< ScalarPixelType, Dimension > FeatureImageType;
typedef itk::ScalarChanAndVeseLevelSetFunctionData< LevelSetImageType, FeatureImageType >
DataHelperType;
typedef itk::ConstrainedRegionBasedLevelSetFunctionSharedData< LevelSetImageType, FeatureImageType, DataHelperType >
SharedDataHelperType;
typedef itk::ScalarChanAndVeseLevelSetFunction< LevelSetImageType,
FeatureImageType, SharedDataHelperType > LevelSetFunctionType;
typedef itk::ScalarChanAndVeseSparseLevelSetImageFilter< LevelSetImageType,
FeatureImageType, LevelSetImageType, LevelSetFunctionType, SharedDataHelperType > MultiLevelSetType;
typedef itk::ImageFileReader< LevelSetImageType > LevelSetReaderType;
typedef itk::ImageFileReader< FeatureImageType > FeatureReaderType;
typedef itk::ImageFileWriter< LevelSetImageType > WriterType;
typedef itk::AtanRegularizedHeavisideStepFunction< ScalarPixelType, ScalarPixelType > DomainFunctionType;
DomainFunctionType::Pointer domainFunction = DomainFunctionType::New();
domainFunction->SetEpsilon( epsilon );
LevelSetReaderType::Pointer levelSetReader1 = LevelSetReaderType::New();
levelSetReader1->SetFileName( argv[1] );
levelSetReader1->Update();
FeatureReaderType::Pointer featureReader = FeatureReaderType::New();
featureReader->SetFileName( argv[2] );
featureReader->Update();
MultiLevelSetType::Pointer levelSetFilter = MultiLevelSetType::New();
levelSetFilter->SetFunctionCount( 1 ); // Protected ?
levelSetFilter->SetFeatureImage( featureReader->GetOutput() );
levelSetFilter->SetLevelSet( 0, levelSetReader1->GetOutput() );
levelSetFilter->SetNumberOfIterations( nb_iteration );
levelSetFilter->SetMaximumRMSError( rms );
levelSetFilter->SetUseImageSpacing( 0 );
levelSetFilter->SetInPlace( false );
levelSetFilter->GetDifferenceFunction(0)->SetDomainFunction( domainFunction );
levelSetFilter->GetDifferenceFunction(0)->SetCurvatureWeight( mu );
levelSetFilter->GetDifferenceFunction(0)->SetAreaWeight( nu );
levelSetFilter->GetDifferenceFunction(0)->SetLambda1( l1 );
levelSetFilter->GetDifferenceFunction(0)->SetLambda2( l2 );
levelSetFilter->Update();
WriterType::Pointer writer1 = WriterType::New();
writer1->SetInput( levelSetFilter->GetOutput() );
writer1->UseCompressionOn();
writer1->SetFileName( argv[3] );
try
{
writer1->Update();
}
catch( itk::ExceptionObject & excep )
{
std::cerr << "Exception caught !" << std::endl;
std::cerr << excep << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
|