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

itkDeformableMesh3DFilter.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkDeformableMesh3DFilter.h,v $ 00005 Language: C++ 00006 Date: $Date: 2003/09/10 14:28:29 $ 00007 Version: $Revision: 1.25 $ 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 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef __itkDeformableMesh3DFilter_h 00018 #define __itkDeformableMesh3DFilter_h 00019 00020 #include "itkMeshToMeshFilter.h" 00021 #include "vnl/vnl_matrix_fixed.h" 00022 #include "vnl/vnl_math.h" 00023 #include "itkMesh.h" 00024 #include "itkVector.h" 00025 #include "itkTriangleCell.h" 00026 #include "itkImage.h" 00027 #include "itkImageRegionIterator.h" 00028 #include <itkCovariantVector.h> 00029 00030 namespace itk 00031 { 00032 00050 template <class TInputMesh, class TOutputMesh> 00051 class ITK_EXPORT DeformableMesh3DFilter : public MeshToMeshFilter<TInputMesh, TOutputMesh> 00052 { 00053 public: 00055 typedef DeformableMesh3DFilter Self; 00056 00058 typedef MeshToMeshFilter<TInputMesh, TOutputMesh> Superclass; 00059 00061 typedef SmartPointer<Self> Pointer; 00062 typedef SmartPointer<const Self> ConstPointer; 00063 00065 itkNewMacro(Self); 00066 00068 itkTypeMacro(DeformableMesh3DFilter,MeshToMeshFilter); 00069 00071 typedef TInputMesh InputMeshType; 00072 typedef TOutputMesh OutputMeshType; 00073 typedef typename InputMeshType::PointsContainerPointer 00074 InputPointsContainerPointer; 00075 typedef typename InputMeshType::PointsContainer::Iterator 00076 InputPointsContainerIterator; 00077 typedef typename InputMeshType::PointDataContainerPointer 00078 InputPointDataContainerPointer; 00079 typedef typename InputMeshType::PointDataContainer::Iterator 00080 InputPointDataContainerIterator; 00081 typedef typename InputMeshType::CellsContainerPointer 00082 InputCellsContainerPointer; 00083 typedef typename InputMeshType::CellsContainer::Iterator 00084 InputCellsContainerIterator; 00085 typedef typename InputMeshType::CellDataContainerPointer 00086 InputCellDataContainerPointer; 00087 typedef typename InputMeshType::CellDataContainer::Iterator 00088 InputCellDataContainerIterator; 00089 typedef typename OutputMeshType::PointsContainerPointer 00090 OutputPointsContainerPointer; 00091 typedef typename OutputMeshType::CellsContainer 00092 OutputCellsContainer; 00093 typedef typename OutputMeshType::CellsContainerPointer 00094 OutputCellsContainerPointer; 00095 typedef typename OutputMeshType::PointsContainer::Iterator 00096 OutputPointsContainerIterator; 00097 00099 typedef typename InputMeshType::CellType CellType; 00100 typedef typename InputMeshType::CellTraits CellTraits; 00101 typedef typename InputMeshType::PointType InputPointType; 00102 typedef typename InputMeshType::PixelType PixelType; 00103 00105 typedef Image<unsigned char, 3> PotentialImageType; 00106 typedef ImageRegionIterator<PotentialImageType> PotentialIterator; 00107 typedef CovariantVector<PixelType, 3> GradientType; 00108 typedef Image<GradientType, 3> GradientImageType; 00109 typedef ImageRegionIterator<GradientImageType> GradientIterator; 00110 typedef typename GradientImageType::SizeType ImageSizeType; 00111 typedef typename GradientImageType::IndexType ImageIndexType; 00112 00113 typedef itk::CellInterface<PixelType, CellTraits> TCellInterface; 00114 typedef itk::TriangleCell<TCellInterface> TriCell; 00115 00116 typedef CovariantVector<int, 3> int3DVector; 00117 typedef CovariantVector<double, 2> double2DVector; 00118 typedef CovariantVector<double, 3> double3DVector; 00119 00120 /* Mesh pointer definition. */ 00121 typedef typename InputMeshType::Pointer InputMeshPointer; 00122 typedef typename OutputMeshType::Pointer OutputMeshPointer; 00123 typedef typename GradientImageType::Pointer GradientImagePointer; 00124 00126 void SetStiffnessMatrix( vnl_matrix_fixed<double, 4, 4> *stiff, int i ); 00127 00129 itkSetMacro(Gradient, GradientImagePointer); 00130 itkGetMacro(Gradient, GradientImagePointer); 00131 00132 itkSetMacro(StepThreshold, int); 00133 itkGetMacro(StepThreshold, int); 00134 00135 itkSetMacro(Stiffness, double2DVector); 00136 itkGetMacro(Stiffness, double2DVector); 00137 00138 itkSetMacro(TimeStep, double); 00139 itkGetMacro(TimeStep, double); 00140 00141 itkSetMacro(Scale, double3DVector); 00142 00143 itkSetMacro(PotentialMagnitude, PixelType); 00144 itkSetMacro(GradientMagnitude, PixelType); 00145 itkSetMacro(PotentialOn, unsigned short); 00146 itkSetMacro(ObjectLabel, unsigned char); 00147 00148 itkGetMacro(Normals, InputMeshPointer); 00149 00150 protected: 00151 DeformableMesh3DFilter(); 00152 ~DeformableMesh3DFilter(); 00153 DeformableMesh3DFilter(const Self&) {} 00154 void operator=(const Self&) {} 00155 void PrintSelf(std::ostream& os, Indent indent) const; 00156 00157 virtual void GenerateData(); 00158 00159 private: 00161 InputMeshPointer m_Forces; 00162 InputMeshPointer m_Normals; 00163 InputMeshPointer m_Displacements; 00164 InputMeshPointer m_Derives; 00165 InputMeshPointer m_Locations; 00166 00167 void Initialize(); 00168 void SetDefaultStiffnessMatrix(); 00169 void SetMeshStiffness(); 00170 void Advance(); // update data for next iteration 00171 void ComputeDt(); // compute point positions 00172 void ComputeOutput(); 00173 void GradientFit(); // fit the model with gradient information 00174 void ComputeNormals(); 00175 void PotentialFit(); 00176 00178 vnl_matrix_fixed<double, 4, 4> m_StiffnessMatrix[10]; 00179 vnl_matrix_fixed<double, 4, 4> **m_K; 00180 00182 double2DVector m_Stiffness; 00183 double m_TimeStep; 00184 double3DVector m_Scale; 00185 int m_Step; 00186 int m_NumberOfNodes; 00187 int m_NumberOfCells; 00188 int m_ImageWidth; 00189 int m_ImageHeight; 00190 int m_ImageDepth; 00191 int m_StepThreshold; 00192 unsigned short m_ModelXUpLimit; 00193 unsigned short m_ModelXDownLimit; 00194 unsigned short m_ModelYUpLimit; 00195 unsigned short m_ModelYDownLimit; 00196 unsigned short m_ModelZUpLimit; 00197 unsigned short m_ModelZDownLimit; 00198 unsigned short m_PotentialOn; 00199 unsigned char m_ObjectLabel; 00200 PixelType m_GradientMagnitude; 00201 PixelType m_PotentialMagnitude; 00202 00204 GradientImagePointer m_Gradient; 00205 PotentialImageType::Pointer m_Potential; 00206 }; 00207 00208 } // end namespace itk 00209 00210 #ifndef ITK_MANUAL_INSTANTIATION 00211 #include "itkDeformableMesh3DFilter.txx" 00212 #endif 00213 00214 #endif

Generated at Sat Mar 31 02:16:57 2007 for ITK by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2000