Functions

mitkManualSegmentationToSurfaceFilterTest.cpp File Reference

#include "mitkManualSegmentationToSurfaceFilter.h"
#include <itksys/SystemTools.hxx>
#include "mitkDataNodeFactory.h"
#include <mitkSurfaceVtkWriter.h>
#include <vtkSTLWriter.h>
#include <fstream>

Go to the source code of this file.

Functions

int mitkManualSegmentationToSurfaceFilterTest (int argc, char *argv[])

Function Documentation

int mitkManualSegmentationToSurfaceFilterTest ( int  argc,
char *  argv[] 
)

Test class for ManualSegmentationToSurfaceFilter and ImageToSurface 1. Read an image 2. Create a surface 3. Create a Surface with all image processing facillities

Definition at line 32 of file mitkManualSegmentationToSurfaceFilterTest.cpp.

References mitk::ImageToSurfaceFilter::DecimatePro, EXIT_FAILURE, EXIT_SUCCESS, mitk::SurfaceVtkWriter< VTKWRITER >::GetVtkWriter(), MITK_ERROR, MITK_INFO, mitk::SurfaceVtkWriter< VTKWRITER >::New(), mitk::ManualSegmentationToSurfaceFilter::New(), mitk::DataNodeFactory::New(), mitk::SurfaceVtkWriter< VTKWRITER >::SetFileName(), mitk::SurfaceVtkWriter< VTKWRITER >::SetInput(), and mitk::SurfaceVtkWriter< VTKWRITER >::Write().

{
  
  if(argc==0)
  {
    std::cout<<"no file specified [FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  
  std::string path = argv[1];
  itksys::SystemTools::ConvertToUnixSlashes(path);
  std::string fileIn = path;
  std::string fileOut = "BallBinary30x30x30.stl";

  
  fileIn = itksys::SystemTools::ConvertToOutputPath(fileIn.c_str());
  fileOut = itksys::SystemTools::ConvertToOutputPath(fileOut.c_str());
  std::cout<<"Eingabe Datei: "<<fileIn<<std::endl;
  std::cout<<"Ausgabe Datei: "<<fileOut<<std::endl;
  mitk::Image::Pointer image = NULL;
  mitk::DataNodeFactory::Pointer factory = mitk::DataNodeFactory::New();
  try
  {
    std::cout << "Loading file: "<<std::flush;
    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;
    }
  }
  catch ( itk::ExceptionObject & ex )
  {
    std::cout << "Exception: " << ex << "[FAILED]" << std::endl;
    return EXIT_FAILURE;
  }


  mitk::ManualSegmentationToSurfaceFilter::Pointer filter;
  std::cout << "Instantiat mitk::ManualSegmentationToSurfaceFilter - implicit: mitk::ImageToSurface: ";
  filter = mitk::ManualSegmentationToSurfaceFilter::New();

  if (filter.IsNull())
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  else {
  std::cout<<"[PASSED]"<<std::endl;
  }


  //Wirter instance
  mitk::SurfaceVtkWriter<vtkSTLWriter>::Pointer writer = mitk::SurfaceVtkWriter<vtkSTLWriter>::New();
  if (filter.IsNull())
  {
    std::cout<<"Instantiat SurfaceVtkWirter: [FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  else {  
    writer->GlobalWarningDisplayOn();
    writer->SetFileName(fileOut.c_str());
    writer->GetVtkWriter()->SetFileTypeToBinary();  
   
  }
  
  std::cout << "Create surface with default settings: ";
  if (image->GetDimension()==3)
  {
    filter->SetInput(image);
    filter->Update();
    writer->SetInput(filter->GetOutput());
    writer->Write();

    if( writer->GetNumberOfInputs() < 1 )
    {
      std::cout<<"[FAILED]"<<std::endl;
      writer->Delete();
      return EXIT_FAILURE;
    }
    else
    {
      std::cout<<"[PASSED]"<<std::endl;
    }

    std::cout << "Create surface all optimised settings: ";
    //configure ImageToSurfaceFilter
    filter->MedianFilter3DOn();
    filter->SetGaussianStandardDeviation(1.5);
    filter->InterpolationOn();
    filter->UseGaussianImageSmoothOn();
    filter->SetThreshold( 1 ); //if( Gauss ) --> TH manipulated for vtkMarchingCube
    filter->SetDecimate( mitk::ImageToSurfaceFilter::DecimatePro );
    filter->SetTargetReduction(0.05f);
    filter->SmoothOn();
    
    try 
    {
      filter->Update();
    }
    catch( itk::ExceptionObject & err ) 
    { 
      MITK_INFO << " ERROR!" << std::endl;
      MITK_ERROR << "ExceptionObject caught!" << std::endl; 
      MITK_ERROR << err << std::endl; 
      return EXIT_FAILURE;
    } 

    writer->SetInput( filter->GetOutput() );
    if( writer->GetNumberOfInputs() < 1 )
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    else
    {
      std::cout<<"[PASSED]"<<std::endl;
      try {
        writer->Write();
      }
      catch( itk::ExceptionObject e)
      {
        std::cout<<"caught exception: "<<e<<std::endl;
      }
    }
  }
  else
  {
    std::cout<<"Image not suitable for filter: Dimension!=3"<<std::endl;
  }

  std::cout<<"[TEST DONE]"<<std::endl;

  //writer->Delete();

  return EXIT_SUCCESS;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines