00001 #include "itkImageFileReader.h"
00002 #include "itkImageFileWriter.h"
00003 #include "itkMeanImageFilter.h"
00004 #include "itkBinaryThresholdImageFilter.h"
00005 #include "itkCovariantVector.h"
00006
00007
00008 #include <iostream>
00009 #include "Org_EulerSchedule.h"
00010 #include "Org_LevelSetSchedule.h"
00011 #include "Geometric.h"
00012
00013 using namespace mial;
00014 int main(int argc, char * argv[] )
00015 {
00016 if( argc < 5 )
00017 {
00018 std::cerr << "Usage: " << std::endl;
00019 std::cerr << argv[0] << " inputImageFile outputImageFile inputEulerScheduleFile inputLeveSetScheduleFile inputMesh" << std::endl;
00020 return EXIT_FAILURE;
00021 }
00022 std::string inputImageFileName = argv[1];
00023 std::string outputImageFileName = argv[2];
00024 std::string eulerScheduleFileName = argv[3];
00025 std::string levelSetScheduleFileName = argv[4];
00026 std::string topologyInputFileName = argv[5];
00027
00028 typedef unsigned char PixelType;
00029 const unsigned int Dimension = 3;
00030 typedef itk::Image< PixelType, Dimension > ImageType;
00031
00032
00033 typedef itk::CovariantVector< float, 3 > GradientPixelType;
00034 typedef itk::Image< GradientPixelType, 3 > GradientImageType;
00035
00036
00037 typedef itk::ImageFileReader< ImageType > ReaderType;
00038 typedef itk::ImageFileWriter< ImageType > WriterType;
00039 ReaderType::Pointer reader = ReaderType::New();
00040 WriterType::Pointer writer = WriterType::New();
00041
00042 reader->SetFileName(inputImageFileName.c_str());
00043
00044 reader->Update();
00045 writer->SetFileName(outputImageFileName.c_str());
00046
00047
00048
00049 typedef itk::Org_EulerSchedule<ImageType, Geometric<float,3>::BinaryImageType, GradientImageType, float, 3> eulerOrganismType;
00050 eulerOrganismType::Pointer eulerOrg = eulerOrganismType::New();
00051 std::cout << "Euler organism created..." << std::endl;
00052
00053
00054 eulerOrg->setTopology(topologyInputFileName);
00055 std::cout << "Topology read from '" << topologyInputFileName << "'..." << std::endl;
00056
00057
00058
00059 eulerOrg->setSchedule(eulerScheduleFileName);
00060
00061
00062 eulerOrg->SetInput(reader->GetOutput());
00063
00064
00065
00066 eulerOrg->setUp();
00067
00068
00069 std::cout << "Running Euler organism..." << std::endl;
00070 for(int i=0; i<25;i++)
00071 {
00072 eulerOrg->run();
00073 std::cout << "one run" << std::endl;
00074 }
00075
00076 eulerOrg->Update();
00077
00078
00079
00080 typedef itk::Org_LevelSetSchedule<ImageType, ImageType, GradientImageType, float, 3> levelSetOrganismType;
00081 levelSetOrganismType::Pointer levelSetOrg = levelSetOrganismType::New();
00082 levelSetOrg->SetInput(reader->GetOutput());
00083 levelSetOrg->setSchedule(levelSetScheduleFileName);
00084 levelSetOrg->setUp();
00085
00086 levelSetOrg->setTopologyFromBinaryImage(eulerOrg->GetOutput());
00087
00088 std::cout << "Running levelSet organism..." << std::endl;
00089 for(int i=0; i<25;i++)
00090 {
00091 levelSetOrg->run();
00092 std::cout << "one run" << std::endl;
00093 }
00094
00095 writer->SetInput(levelSetOrg->GetOutput());
00096 try
00097 {
00098 writer->Update();
00099 std::cout << "Output written to '" << outputImageFileName << "'." << std::endl;
00100 }
00101 catch(itk::ExceptionObject & err)
00102 {
00103 std::cout << "ExceptionObject caught!" << std::endl;
00104 std::cout << err << std::endl;
00105 return -1;
00106 }
00107 return 0;
00108 }