#include "mitkLabeledImageToSurfaceFilter.h"#include <itksys/SystemTools.hxx>#include "mitkDataNodeFactory.h"#include "mitkReferenceCountWatcher.h"#include <cmath>Go to the source code of this file.
Functions | |
| bool | equals (const mitk::ScalarType &val1, const mitk::ScalarType &val2, mitk::ScalarType epsilon=mitk::eps) |
| int | mitkLabeledImageToSurfaceFilterTest (int argc, char *argv[]) |
| bool equals | ( | const mitk::ScalarType & | val1, |
| const mitk::ScalarType & | val2, | ||
| mitk::ScalarType | epsilon = mitk::eps |
||
| ) |
Definition at line 25 of file mitkLabeledImageToSurfaceFilterTest.cpp.
Referenced by mitkLabeledImageToSurfaceFilterTest().
{
return ( std::fabs(val1 - val2) <= epsilon );
}
| int mitkLabeledImageToSurfaceFilterTest | ( | int | argc, |
| char * | argv[] | ||
| ) |
Definition at line 30 of file mitkLabeledImageToSurfaceFilterTest.cpp.
References mitk::ImageToSurfaceFilter::DecimatePro, equals(), EXIT_FAILURE, EXIT_SUCCESS, mitk::LabeledImageToSurfaceFilter::New(), and mitk::DataNodeFactory::New().
{
if(argc<2)
{
std::cout<<"no path to testing specified [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
std::string fileIn = argv[1];
std::cout<<"Eingabe Datei: "<<fileIn<<std::endl;
mitk::Image::Pointer image = NULL;
mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New();
try
{
std::cout << "Loading file: ";
factory->SetFileName( fileIn.c_str() );
factory->Update();
if(factory->GetNumberOfOutputs()<1)
{
std::cout<<"file could not be loaded [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
mitk::DataNode::Pointer node = factory->GetOutput( 0 );
image = dynamic_cast<mitk::Image*>(node->GetData());
if(image.IsNull())
{
std::cout<<"file not an image - test will not be applied [PASSED]"<<std::endl;
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
else if(image->GetPixelType() != mitk::PixelType(typeid(char))
|| image->GetPixelType() != mitk::PixelType(typeid(unsigned char)) )
{
std::cout<<"file not a char or unsigned char image - test will not be applied [PASSED]"<<std::endl;
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
}
catch ( itk::ExceptionObject & ex )
{
std::cout << "Exception: " << ex << "[FAILED]" << std::endl;
return EXIT_FAILURE;
}
std::cout << "Testing instantiation: " ;
mitk::LabeledImageToSurfaceFilter::Pointer filter = mitk::LabeledImageToSurfaceFilter::New();
if (filter.IsNull())
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else {
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Create surface with default settings: ";
filter->SetInput(image);
filter->Update();
if ( filter->GetNumberOfOutputs() != 1 )
{
std::cout<<"Wrong number of outputs, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput() == NULL )
{
std::cout<<"Output is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput()->GetVtkPolyData() == NULL )
{
std::cout<<"PolyData of surface is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing index to label conversion: ";
if ( filter->GetLabelForNthOutput( 0 ) != 257 )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for label calculation: ";
if ( ! equals ( filter->GetVolumeForLabel( 257 ) , 14.328 ) )
{
std::cout<<filter->GetVolumeForLabel( 257 )<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for index calculation: ";
if ( ! equals ( filter->GetVolumeForNthOutput( 0 ) , 14.328 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Create surface using optimised settings: ";
filter->GenerateAllLabelsOn();
filter->SetGaussianStandardDeviation( 1.5 );
filter->SetSmooth(true); // smooth wireframe
filter->SetDecimate( mitk::ImageToSurfaceFilter::DecimatePro );
filter->SetTargetReduction( 0.8 );
if( filter->GetNumberOfOutputs() != 1 )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Create surface for label 257: ";
filter->GenerateAllLabelsOff();
filter->SetLabel(257);
filter->Update();
if ( filter->GetNumberOfOutputs() != 1 )
{
std::cout<<"Wrong number of outputs, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput() == NULL )
{
std::cout<<"Output is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput()->GetVtkPolyData() == NULL )
{
std::cout<<"PolyData of surface is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for label calculation: ";
if ( ! equals ( filter->GetVolumeForLabel( 257 ) , 14.328 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for index calculation: ";
if ( ! equals ( filter->GetVolumeForNthOutput( 0 ) , 14.328 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Create surface for multiple labels: ";
filter->GenerateAllLabelsOn();
filter->SetBackgroundLabel(32000);
filter->Update();
if ( filter->GetNumberOfOutputs() != 2 )
{
std::cout<<"Wrong number of outputs, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput(0) == NULL )
{
std::cout<<"Output 0 is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput(0)->GetVtkPolyData() == NULL )
{
std::cout<<"PolyData of output 0 is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput(1) == NULL )
{
std::cout<<"Output 1 is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput(1)->GetVtkPolyData() == NULL )
{
std::cout<<"PolyData of output 1 is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for label calculation: ";
if ( ! equals ( filter->GetVolumeForLabel( 257 ) , 14.328 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( ! equals ( filter->GetVolumeForLabel( 0 ), 12.672 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for index calculation: ";
if ( ! equals( filter->GetVolumeForNthOutput( 1 ), 14.328 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( ! equals ( filter->GetVolumeForNthOutput( 0 ), 12.672 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
mitk::ReferenceCountWatcher::Pointer outputSurface1Watcher = new mitk::ReferenceCountWatcher(filter->GetOutput(1), "outputSurface1");
mitk::ReferenceCountWatcher::Pointer filterWatcher = new mitk::ReferenceCountWatcher(filter, "filter");
std::cout << "Create surface for background (label 0): " << std::flush;
filter->GenerateAllLabelsOff();
filter->SetLabel(0);
filter->SetBackgroundLabel(257);
//mitk::Surface::Pointer surface = filter->GetOutput(1);
//std::cout<< surface->GetReferenceCount() << std::endl;
filter->Update();
//surface = NULL;
if ( filter->GetNumberOfOutputs() != 1 )
{
std::cout<<"Wrong number of outputs, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput() == NULL )
{
std::cout<<"Output is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput()->GetVtkPolyData() == NULL )
{
std::cout<<"PolyData of surface is NULL, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing reference count correctness of old output 1: " << std::flush;
if ( outputSurface1Watcher->GetReferenceCount() != 0 )
{
std::cout<<"outputSurface1Watcher->GetReferenceCount()=="
<< outputSurface1Watcher->GetReferenceCount()
<< "!=0, [FAILED]" << std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing reference count correctness of filter: " << std::flush;
if ( filterWatcher->GetReferenceCount() != 2 )
{
std::cout<<"filterWatcher->GetReferenceCount()=="
<< outputSurface1Watcher->GetReferenceCount()
<< "!=2, [FAILED]" << std::endl;
return EXIT_FAILURE;
}
std::cout<<"[PASSED]"<<std::endl;
std::cout << "Testing index to label conversion: ";
if ( filter->GetLabelForNthOutput( 0 ) != 0 )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for label calculation: ";
if ( ! equals ( filter->GetVolumeForLabel( filter->GetLabel() ) , 12.672 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Testing volume for index calculation: ";
if ( ! equals( filter->GetVolumeForNthOutput( 0 ), 12.672 ) )
{
std::cout<<"[FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout << "Create surface for invalid label: ";
filter->GenerateAllLabelsOff();
filter->SetLabel(1);
filter->Update();
if ( filter->GetNumberOfOutputs() != 1 )
{
std::cout<<"Number of outputs != 1, [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else if ( filter->GetOutput()->GetVtkPolyData()->GetNumberOfPoints() != 0 )
{
std::cout<<"PolyData is not empty ("<<filter->GetOutput()->GetVtkPolyData()->GetNumberOfPoints()<<"), [FAILED]"<<std::endl;
return EXIT_FAILURE;
}
else
{
std::cout<<"[PASSED]"<<std::endl;
}
std::cout<<"[TEST DONE]"<<std::endl;
return EXIT_SUCCESS;
}
1.7.2