Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkDeformableSimplexMesh3DFilter.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkDeformableSimplexMesh3DFilter.h,v $
00005   Language:  C++
00006   Date:      $Date: 2008-12-08 16:00:52 $
00007   Version:   $Revision: 1.15 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012   Portions of this code are covered under the VTK copyright.
00013   See VTKCopyright.txt or http://www.kitware.com/VTKCopyright.htm for details.
00014 
00015      This software is distributed WITHOUT ANY WARRANTY; without even 
00016      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00017      PURPOSE.  See the above copyright notices for more information.
00018 
00019 =========================================================================*/
00020 #ifndef __itkDeformableSimplexMesh3DFilter_h
00021 #define __itkDeformableSimplexMesh3DFilter_h
00022 
00023 #include "itkMeshToMeshFilter.h"
00024 #include "itkSimplexMesh.h"
00025 #include "itkSimplexMeshGeometry.h"
00026 #include "itkImage.h"
00027 #include "itkCovariantVector.h"
00028 #include "itkVector.h"
00029 #include "itkSphereSpatialFunction.h"
00030 #include "itkFloodFilledSpatialFunctionConditionalIterator.h"
00031 #include "itkVectorGradientMagnitudeImageFilter.h"
00032 #include "itkBinaryThresholdImageFilter.h"
00033 #include "itkArray.h"
00034 
00035 #include <set>
00036 
00037 namespace itk
00038 {
00039 
00071 template <class TInputMesh, class TOutputMesh>
00072 class DeformableSimplexMesh3DFilter : public MeshToMeshFilter<TInputMesh, TOutputMesh>
00073 {
00074 public:
00076   typedef DeformableSimplexMesh3DFilter  Self;
00077 
00079   typedef MeshToMeshFilter<TInputMesh, TOutputMesh> Superclass;
00080 
00082   typedef SmartPointer<Self>        Pointer;
00083   typedef SmartPointer<const Self>  ConstPointer;
00084 
00086   itkNewMacro(Self);
00087 
00089   itkTypeMacro(DeformableSimplexMesh3DFilter,MeshToMeshFilter);
00090 
00092   typedef TInputMesh  InputMeshType;
00093   typedef TOutputMesh OutputMeshType;
00094 
00095   typedef typename InputMeshType::PointsContainerPointer     InputPointsContainerPointer;
00096   typedef typename InputMeshType::PointsContainer            InputPointsContainer;
00097   typedef typename InputMeshType::PointsContainer::Iterator  InputPointsContainerIterator;
00098 
00100   typedef typename SimplexMeshGeometry::PointType     PointType;
00101   typedef typename PointType::VectorType              VectorType;
00102   typedef CovariantVector< 
00103     typename VectorType::ValueType, 3 >               CovariantVectorType;
00104   typedef typename InputMeshType::PixelType           PixelType;
00105 
00107   typedef CovariantVector<PixelType, 3>                   GradientType;
00108   typedef Image<GradientType, 3>                          GradientImageType;
00109   typedef Image<unsigned char, 3>                         BinaryOutput;
00110   typedef Image<float, 3>                                 MagnitudeOutput;
00111 
00112   typedef typename GradientImageType::Pointer             GradientImagePointer;
00113   typedef typename GradientImageType::IndexType           GradientIndexType;
00114   typedef typename GradientImageType::PixelType           GradientPixelType;
00115   typedef typename GradientIndexType::IndexValueType      GradientIndexValueType;
00116   typedef typename GradientImageType::SizeType            GradientImageSizeType;
00117 
00118   /* Mesh pointer definition. */
00119   typedef typename InputMeshType::Pointer     InputMeshPointer;
00120   typedef typename OutputMeshType::Pointer    OutputMeshPointer;
00121 
00122   typedef typename InputMeshType::PointType                     MeshPointType;
00123   typedef typename InputMeshType::CellsContainerPointer         CellsContainerPointer;
00124   typedef typename InputMeshType::CellsContainer::Iterator      CellsContainerIterator;
00125   typedef typename InputMeshType::NeighborListType              InputNeighbors;
00126   typedef typename InputMeshType::NeighborListType::iterator    InputNeighborsIterator;
00127 
00128   typedef itk::MapContainer<unsigned long, std::set<unsigned long> >
00129                                                 VertexNeighborListType;
00130   typedef std::set<unsigned long>               NeighborSetType;
00131   typedef std::set<unsigned long>               IndexSetType;
00132   typedef typename NeighborSetType::iterator    NeighborSetIterator;
00133   typedef typename IndexSetType::iterator       IndexSetIterator;
00134 
00135 
00136   typedef typename InputMeshType::GeometryMapType   GeometryMapType;
00137   typedef typename GeometryMapType::Pointer         GeometryMapPointer;
00138   typedef typename GeometryMapType::Iterator        GeometryMapIterator;
00139 
00140 
00148   itkSetMacro(Gradient, GradientImagePointer);
00149 
00153   itkGetMacro(Gradient, GradientImagePointer);
00154 
00158   itkSetMacro(Iterations, int);
00159   itkGetMacro(Iterations, int);
00161 
00163   itkSetMacro(Alpha, double);
00164 
00166   itkGetMacro(Alpha, double);
00167 
00169   itkSetMacro(Beta, double);
00170 
00172   itkGetMacro(Beta, double);
00173 
00175   itkSetMacro(Gamma, double);
00176 
00178   itkGetMacro(Gamma, double);
00179 
00181   itkSetMacro(Damping, double);
00182 
00184   itkGetMacro(Damping, double);
00185 
00187   itkSetMacro(Rigidity, unsigned int);
00188 
00190   itkGetMacro(Rigidity, unsigned int);
00191 
00192   itkSetObjectMacro(Data, GeometryMapType );
00193   itkGetObjectMacro(Data, GeometryMapType );
00194      
00196   itkGetMacro(ImageWidth,int);
00197   itkGetMacro(ImageHeight,int);
00198   itkGetMacro(ImageDepth,int);
00200 
00202   itkGetMacro(Step, int);
00203 
00204 protected:
00205   DeformableSimplexMesh3DFilter();
00206   ~DeformableSimplexMesh3DFilter();
00207   DeformableSimplexMesh3DFilter(const Self&); //purposely not implemented
00208   void operator=(const Self&); //purposely not implemented
00209   
00210   void PrintSelf(std::ostream& os, Indent indent) const;
00211 
00213   virtual void GenerateData();
00214 
00220   virtual void Initialize();
00221 
00227   virtual void ComputeGeometry();
00228 
00234   virtual void ComputeDisplacement();
00235 
00239   virtual void ComputeInternalForce(SimplexMeshGeometry* data);
00240 
00244   virtual void ComputeExternalForce(SimplexMeshGeometry* data);  
00245 
00250   virtual void ComputeOutput();
00251 
00255   virtual void UpdateReferenceMetrics();
00256 
00260   double L_Func(double r,double d, double phi);
00261 
00265   PointType ComputeBarycentricCoordinates(PointType p, SimplexMeshGeometry* data);
00266 
00274   double    m_Alpha;
00275 
00282   double    m_Beta;
00283 
00290   double    m_Gamma;
00291   double    m_Damping;
00292 
00299   unsigned int m_Rigidity;
00300 
00301   // definition of internal parameters
00303   int       m_Step;
00304 
00306   int       m_ImageWidth;
00307 
00309   int       m_ImageHeight;
00310 
00312   int       m_ImageDepth;
00313 
00315   int       m_Iterations;
00316 
00320   GeometryMapPointer m_Data;
00321 
00322   /* gradient image pointer */
00323   GradientImagePointer m_Gradient;
00324 
00325   
00326 }; // end of class
00327 
00328 
00329 } // end namespace itk
00330 
00331 #ifndef ITK_MANUAL_INSTANTIATION
00332 #include "itkDeformableSimplexMesh3DFilter.txx"
00333 #endif
00334 
00335 #endif //__itkDeformableSimplexMesh3DFilter_h
00336 

Generated at Sat Feb 28 12:18:02 2009 for ITK by doxygen 1.5.6 written by Dimitri van Heesch, © 1997-2000