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
00035
00036
00037
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;
00062 std::cout << "Geometric object created..." << std::endl;
00063
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;
00069 std::cout << "Phys_LevelSet object created..." << std::endl;
00070
00071 try
00072 {
00073
00074 reader->Update();
00075 physLevelSetLayer.setInput( reader->GetOutput() );
00076
00077
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
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();
00087
00088
00089
00090
00091
00092
00093
00094
00095
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 }