C:/cmcintos/defOrgs/source/physical/Phys_LevelSet.h

00001 #include "stdafx.h"
00002 
00003 #if defined (_MSC_VER) && (_MSC_VER >= 1000)
00004 #pragma once
00005 #endif
00006 
00007 #ifndef _PHYS_LEVEL_SET_H
00008 #define _PHYS_LEVEL_SET_H
00009 
00010 #include "Physics.h"
00011 #include "Geom_MeshSpatialObject.h"
00012 #include "Geometric.h"
00013 #include <vnl/vnl_matrix.h>
00014 #include "itkImage.h"
00015 #include "itkRescaleIntensityImageFilter.h"
00016 
00017 #include "itkGeodesicActiveContourLevelSetImageFilter.h"
00018 #include "itkCurvatureAnisotropicDiffusionImageFilter.h"
00019 #include "itkGradientMagnitudeRecursiveGaussianImageFilter.h"
00020 #include "itkSigmoidImageFilter.h"
00021 #include "itkFastMarchingImageFilter.h"
00022 #include "itkRescaleIntensityImageFilter.h"
00023 #include "itkBinaryThresholdImageFilter.h"
00024 #include "itkImageFileReader.h"
00025 #include "itkImageFileWriter.h"
00026 #include "itkCastImageFilter.h"
00027 #include "itkBinaryMask3DMeshSource.h"
00028 #include "itkSpatialObjectToImageFilter.h"
00029 #include "itkSignedDanielssonDistanceMapImageFilter.h"
00030 #include "LevelSetDeformation.h"
00031 
00032 #define DEBUG 0
00033 
00034 namespace mial
00035 {
00037 
00053         template<class DataType, class InputImageType, int nDims,class MType = vnl_matrix<DataType>, class VType = vnl_vector<DataType> >
00054         class Phys_LevelSet 
00055                 : public Physics< DataType, nDims, MType, VType >
00056         {
00057         public:
00058                 typedef Phys_LevelSet Self;
00059                 typedef itk::SmartPointer<Self>  Pointer;
00060                 typedef itk::SmartPointer<const Self>  ConstPointer;
00061                 typedef itk::WeakPointer<const Self>  ConstWeakPointer;
00062                 itkNewMacro(Self);
00063 
00064                 typedef typename Physics<DataType,nDims,MType,VType>::Error Error;
00065                 typedef typename itk::Image< DataType, nDims >                                          InternalImageType;
00066                 typedef typename Geometric< DataType, nDims >::BinaryImageType          BinaryImageType;
00067 
00068         private:
00069                 typename InputImageType::ConstPointer                   inputImg;
00070                 typename InternalImageType::Pointer                     distanceImg;
00071                 typename InternalImageType::Pointer                     edgePotentialImg;
00072                 double propagationScaling;
00073                 double curvatureScaling;
00074                 double advectionScaling;
00075                 double maximumRMSError;
00076                 double numIterations;
00077 
00078                 typename BinaryImageType::Pointer                       outputImg;
00079 
00080         public:
00081                 
00082 
00083                 typedef LevelSetDeformation<DataType,nDims,InternalImageType> DeformationType;
00084                 virtual void initializeDistanceImg(); 
00085                 virtual void initializeEdgePotentialImg();
00086 
00087                 // functions which are pure virtual in the Physics ABC:
00088                 virtual bool simulate();
00089                 virtual bool runDeformation(const std::string defName,typename DeformationType::deformationIn* const i,std::stringstream * const s = NULL);
00090                 virtual void setExternalForces( void * );
00091                 //--------------------
00092 
00094 
00097                 virtual void setInput( typename InputImageType::ConstPointer img ){ inputImg = img; }   // inline
00098                 
00099                 virtual void    setPropagationScaling(  const double ps ) { propagationScaling = ps; }  // inline
00100                 virtual void    setCurvatureScaling(    const double cs ) { curvatureScaling = cs; }    // inline
00101                 virtual void    setAdvectionScaling(    const double as ) { advectionScaling = as; }    // inline
00102                 virtual void    setMaximumRMSError(             const double me ) { maximumRMSError = me; }             // inline
00103                 virtual void    setNumIterations(               const double ni ) { numIterations = ni; }               // inline
00104                 virtual double  getPropagationScaling() {       return this->propagationScaling; }                      // inline
00105                 virtual double  getCurvatureScaling() {         return this->curvatureScaling; }                        // inline
00106                 virtual double  getAdvectionScaling() {         return this->advectionScaling; }                        // inline
00107                 virtual double  getMaximumRMSError() {          return this->maximumRMSError; }                         // inline
00108                 virtual double  getNumIterations() {            return this->numIterations; }                           // inline
00109 
00110                 // DEBUG TEMP FUNCTIONS:
00111                 void printInternalValues();
00112                 typename InternalImageType::Pointer getDistanceImage() { return this->distanceImg; }                    // DEBUG inline
00113                 typename InternalImageType::Pointer getEdgePotentialImage() { return this->edgePotentialImg; }  // DEBUG inline
00114                 typename BinaryImageType::Pointer getOutputImage() { return this->outputImg; }                                  // DEBUG inline
00115 
00116         protected:
00117                 Phys_LevelSet(); // constructor
00118         };
00119 
00120 } // end namespace mial
00121 
00122 #include "Phys_LevelSet.cxx"
00123 #endif // _PHYS_LEVEL_SET_H include

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