C:/cmcintos/defOrgs/examples/basic/defOrg.cxx

00001 #include "itkImageFileReader.h"
00002 #include "itkImageFileWriter.h"
00003 #include "itkMeanImageFilter.h"
00004 #include "itkBinaryThresholdImageFilter.h"
00005 #include "itkCovariantVector.h"
00006 
00007 //#include "itkImage.h"
00008 #include <iostream>
00009 #include "itkOrganism.h"
00010 #include "Phys_Euler.h"
00011 #include "Ctrl_ScheduleDriven.h"
00012 #include "Beh_TranslateAll.h"
00013 #include "Def_Translation.h"
00014 #include "Beh_UniformScale.h"
00015 #include "Def_UniformScale.h"
00016 #include "Sense_Gradient.h"
00017 #include "Geom_MeshSpatialObject.h"
00018 
00019 using namespace mial;
00020 int main(int argc, char ** argv)
00021 {
00022         if( argc < 4 )
00023         {
00024                 std::cerr << "Usage: " << std::endl;
00025                 std::cerr << argv[0] << "  inputImageFile   outputImageFile  inputEulerScheduleFile inputMesh" << std::endl;
00026                 return EXIT_FAILURE;
00027         }
00028         std::string inputImageFileName = argv[1];
00029         std::string outputImageFileName = argv[2];
00030         std::string topologyInputFileName = argv[4];
00031         std::string scheduleFileName = argv[3];
00032         
00033         typedef unsigned char PixelType;
00034         const unsigned int Dimension = 3;
00035         typedef itk::Image< PixelType, Dimension > ImageType; 
00036 
00037 
00038         typedef itk::CovariantVector< float, 3 >  GradientPixelType;
00039         typedef itk::Image< GradientPixelType, 3 > GradientImageType;
00040 
00041         //Instantiate the reader/writer:
00042         typedef itk::ImageFileReader< ImageType >  ReaderType;
00043         typedef itk::ImageFileWriter< ImageType >  WriterType;
00044         ReaderType::Pointer reader = ReaderType::New();
00045         WriterType::Pointer writer = WriterType::New();
00046 
00047         reader->SetFileName(inputImageFileName.c_str());
00048         writer->SetFileName(outputImageFileName.c_str());
00049 
00050 
00051 
00052         // Instantiate the organism:
00053         typedef itk::ItkOrganism <ImageType, ImageType, GradientImageType, float, 3> organismType;
00054         organismType::Pointer testOrg = organismType::New();
00055         std::cout << "Organism created..." << std::endl;
00056 
00057         //Instatiate a sensor
00058         typedef Sense_Gradient<float,ImageType,GradientImageType,3> gradientSensorType;
00059         gradientSensorType::sensorIn::Pointer input = gradientSensorType::sensorIn::New();
00060         gradientSensorType::Pointer gradientSensor = gradientSensorType::New();
00061         input->sigma = 1.0;
00062         reader->Update();
00063         input->imageIn = reader->GetOutput();
00064         gradientSensor->run(input);
00065         gradientSensorType::sensorOut::Pointer output = (gradientSensorType::sensorOut *) (gradientSensor->getOutput()).GetPointer();
00066 
00067 
00068         //Instantiate geomtery and physics layers
00069         typedef Phys_Euler<float,GradientImageType,3> PhysLayerType;
00070         typedef Geom_MeshSpatialObject<float,3> GeometricType;
00071 
00072         PhysLayerType::Pointer physLayer = PhysLayerType::New();
00073         GeometricType::Pointer geomLayer = GeometricType::New();
00074         
00075         physLayer->setExternalForces((void *) &(output->imageOut));
00076         physLayer->setGeometry(geomLayer);
00077 
00078         testOrg->setPhysicsLayer(physLayer);
00079         testOrg->setGeometricLayer(geomLayer);
00080         std::cout << "Physics layer added..." << std::endl;
00081 
00082         //Load the topology
00083         geomLayer->readTopologyFromFile(topologyInputFileName);
00084         std::cout << "Topology read from '" << topologyInputFileName << "'..." << std::endl;
00085         
00086         //Add cogntive, behavioral, and deformations
00087         Ctrl_ScheduleDriven<float, 3>::Pointer cgL = Ctrl_ScheduleDriven<float, 3>::New();
00088         cgL->setSchedule(scheduleFileName);
00089         Beh_TranslateAll<float, 3>::Pointer beh1 = Beh_TranslateAll<float,3>::New();
00090         Beh_UniformScale<float, 3>::Pointer beh2 = Beh_UniformScale<float,3>::New();
00091         Def_Translation<float, 3>::Pointer def1 = Def_Translation<float,3>::New();                                                              
00092         Def_UniformScale<float, 3>::Pointer def2 = Def_UniformScale<float,3>::New();                                                            
00093         testOrg->setCognitiveLayer(cgL);
00094         testOrg->addBehaviour(beh1);
00095         testOrg->addBehaviour(beh2);
00096         testOrg->addDeformation(def1);
00097         testOrg->addDeformation(def2);
00098 
00099         //Pass the output of the reader to the filter, then to the writer.
00100         testOrg->SetInput(reader->GetOutput());
00101 
00102         writer->SetInput(testOrg->GetOutput());
00103         try
00104         {
00105                 std::cout << "Running organism..." << std::endl;
00106                 for(int i=0; i<25;i++)
00107                 {
00108                         testOrg->run();
00109                         std::cout << "one run" << std::endl;
00110                 }
00111                 writer->Update(); //Will cause an update on the reader, because it depends on it
00112                 std::cout << "Output written to '" << outputImageFileName << "'." << std::endl;
00113         }
00114         catch(itk::ExceptionObject & err)
00115         {
00116                 std::cout << "ExceptionObject caught!" << std::endl;
00117                 std::cout << err << std::endl;
00118                 return -1;
00119         }
00120         return 0;
00121 }

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