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
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; }
00098
00099 virtual void setPropagationScaling( const double ps ) { propagationScaling = ps; }
00100 virtual void setCurvatureScaling( const double cs ) { curvatureScaling = cs; }
00101 virtual void setAdvectionScaling( const double as ) { advectionScaling = as; }
00102 virtual void setMaximumRMSError( const double me ) { maximumRMSError = me; }
00103 virtual void setNumIterations( const double ni ) { numIterations = ni; }
00104 virtual double getPropagationScaling() { return this->propagationScaling; }
00105 virtual double getCurvatureScaling() { return this->curvatureScaling; }
00106 virtual double getAdvectionScaling() { return this->advectionScaling; }
00107 virtual double getMaximumRMSError() { return this->maximumRMSError; }
00108 virtual double getNumIterations() { return this->numIterations; }
00109
00110
00111 void printInternalValues();
00112 typename InternalImageType::Pointer getDistanceImage() { return this->distanceImg; }
00113 typename InternalImageType::Pointer getEdgePotentialImage() { return this->edgePotentialImg; }
00114 typename BinaryImageType::Pointer getOutputImage() { return this->outputImg; }
00115
00116 protected:
00117 Phys_LevelSet();
00118 };
00119
00120 }
00121
00122 #include "Phys_LevelSet.cxx"
00123 #endif // _PHYS_LEVEL_SET_H include