C:/cmcintos/defOrgs/examples/Phys_LevelSetTest/Phys_LevelSetTest.cxx

00001 #if defined(_MSC_VER)
00002 #pragma warning ( disable : 4786 )
00003 #endif
00004 
00005 #include "itkImage.h"
00006 #include "itkGeodesicActiveContourLevelSetImageFilter.h"
00007 
00008 #include "itkCurvatureAnisotropicDiffusionImageFilter.h"
00009 #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"
00010 #include "itkSigmoidImageFilter.h"
00011 #include "itkFastMarchingImageFilter.h"
00012 #include "itkRescaleIntensityImageFilter.h"
00013 #include "itkBinaryThresholdImageFilter.h"
00014 #include "itkImageFileReader.h"
00015 #include "itkImageFileWriter.h"
00016 #include "itkRescaleIntensityImageFilter.h"
00017 #include "itkCastImageFilter.h"
00018 
00019 #include "Phys_LevelSet.h"
00020 #include "Geometric.h"
00021 #include "Geom_vGeometry.h"
00022 
00023 #include <string>
00024 
00025 using namespace mial;
00026 
00027 int main( int argc, char *argv[] )
00028 {
00029         std::string inputFilename = "..\\basic\\data\\square.bmp";
00030         std::string outputFilename = "C:\\Phys_LevelSetTest_output.png";
00031         std::string nodeInputFileName = "nodesInSimple.txt";
00032         std::string nodeOutputFileName = "C:\\nodesOut.txt";
00033 
00034         // For Andy's computer:
00035         //std::string nodeInputFileName = "nodesInSimple.txt";
00036         //std::string inputFilename = "..\\build\\data\\letterU.png";
00037         //std::string outputFilename = "C:\\Documents and Settings\\Andy\\Desktop\\Phys_LevelSetTest_output.png";
00038 
00039         typedef itk::Image< double, 2 > ImageType; 
00040 
00041         typedef itk::Image< unsigned char, 2 > OutputImageType;
00042 
00043         typedef itk::ImageFileReader< ImageType >  ReaderType;
00044         ReaderType::Pointer reader = ReaderType::New();
00045 
00046         typedef itk::ImageFileWriter< OutputImageType >  WriterType;
00047         WriterType::Pointer writer = WriterType::New();
00048 
00049         typedef itk::RescaleIntensityImageFilter< 
00050                 ImageType, 
00051                 OutputImageType > CastFilterType;
00052         CastFilterType::Pointer castFilter = CastFilterType::New();
00053 
00054         typedef vnl_matrix< double > vType;
00055 
00056         reader->SetFileName(inputFilename.c_str());
00057         writer->SetFileName(outputFilename.c_str());
00058 
00059         std::cout << "This is a test of the Phys_LevelSet class." << std::endl << std::endl;
00060  
00061         Geom_vGeometry<vType, double, 2> geom;                  // geometric object
00062         std::cout << "Geometric object created..." << std::endl;
00063         //read nodes from file:
00064         geom.readNodesFromFile(nodeInputFileName);
00065         std::cout << "Nodes read from file..." << std::endl;
00066         std::cout << "numNodes: " << geom.numNodes() << std::endl;
00067 
00068         Phys_LevelSet<double, vType, 2>  physLevelSetLayer;                             // Phys_LevelSet object
00069         std::cout << "Phys_LevelSet object created..." << std::endl;
00070 
00071         try
00072         {
00073                 // set the input image of the Phys_LevelSet object:
00074                 reader->Update();
00075                 physLevelSetLayer.setInput( reader->GetOutput() );
00076 
00077                 // create the distance image using node information:
00078                 std::cout << "Starting fast marching initialization of distance image..." << std::endl;
00079                 physLevelSetLayer.initializeDistanceImg(&geom);
00080                 std::cout << "Finished initializing distance image..." << std::endl;
00081 
00082                 // run the level set simulation:
00083                 std::cout << "Starting geodesic active contour level set simulate()..." << std::endl;
00084                 physLevelSetLayer.simulate(); 
00085                 std::cout << "Finished level set simulation..." << std::endl;
00086                 physLevelSetLayer.printInternalValues(); // cout member variable status
00087 
00088                 // DEBUG:
00089                 // Output the distance image to file:
00090                 //castFilter->SetInput( physLevelSetLayer.getDistanceImage() );
00091                 //writer->SetInput( castFilter->GetOutput() );
00092                 //castFilter->SetOutputMinimum( 0 );
00093                 //castFilter->SetOutputMaximum( 255 );
00094 
00095                 // Output the segmentation result:
00096                 castFilter->SetInput( physLevelSetLayer.getOutputImage() );
00097                 writer->SetInput( castFilter->GetOutput() );
00098                 castFilter->SetOutputMinimum( 0 );
00099                 castFilter->SetOutputMaximum( 255 );
00100                 
00101                 writer->Update();
00102                 std::cout << "Output image written to " << writer->GetFileName() << std::endl;
00103         }
00104         catch(itk::ExceptionObject & err)
00105         {
00106                 std::cerr << "ExceptionObject caught:" << std::endl;
00107                 std::cerr << err << std::endl;
00108                 return -1;
00109         }
00110 
00111         return EXIT_SUCCESS;
00112 }

Generated on Wed Jul 19 13:05:16 2006 for IDO by  doxygen 1.4.7