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

itkBalloonForceFilter.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkBalloonForceFilter.h,v $ 00005 Language: C++ 00006 Date: $Date: 2003/09/10 14:28:28 $ 00007 Version: $Revision: 1.37 $ 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 __itkBalloonForceFilter_h 00018 #define __itkBalloonForceFilter_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 00055 template <class TInputMesh, class TOutputMesh> 00056 class ITK_EXPORT BalloonForceFilter : public MeshToMeshFilter<TInputMesh, TOutputMesh> 00057 { 00058 public: 00060 typedef BalloonForceFilter Self; 00061 typedef MeshToMeshFilter<TInputMesh, TOutputMesh> Superclass; 00062 typedef SmartPointer<Self> Pointer; 00063 typedef SmartPointer<const Self> ConstPointer; 00064 00066 itkNewMacro(Self); 00067 00069 itkTypeMacro(BalloonForceFilter,MeshToMeshFilter); 00070 00072 typedef TInputMesh InputMeshType; 00073 typedef TOutputMesh OutputMeshType; 00074 00076 typedef typename InputMeshType::PointsContainerPointer 00077 InputPointsContainerPointer; 00078 typedef typename InputMeshType::PointsContainer::Iterator 00079 InputPointsContainerIterator; 00080 typedef typename InputMeshType::PointDataContainerPointer 00081 InputPointDataContainerPointer; 00082 typedef typename InputMeshType::PointDataContainer::Iterator 00083 InputPointDataContainerIterator; 00084 typedef typename InputMeshType::CellsContainerPointer 00085 InputCellsContainerPointer; 00086 typedef typename InputMeshType::CellsContainer::Iterator 00087 InputCellsContainerIterator; 00088 typedef typename InputMeshType::CellDataContainerPointer 00089 InputCellDataContainerPointer; 00090 typedef typename InputMeshType::CellDataContainer::Iterator 00091 InputCellDataContainerIterator; 00092 typedef typename OutputMeshType::PointsContainerPointer 00093 OutputPointsContainerPointer; 00094 typedef typename OutputMeshType::PointsContainer::Iterator 00095 OutputPointsContainerIterator; 00096 00098 typedef typename InputMeshType::PointType IPixelType; 00099 typedef typename InputMeshType::PixelType PixelType; 00100 00101 typedef Image<unsigned short, 2> ImageType; 00102 typedef CovariantVector<PixelType, 2> GradientType; 00103 typedef Image<GradientType, 2> GradientImageType; 00104 typedef typename InputMeshType::Pointer InputMeshPointer; 00105 typedef typename OutputMeshType::Pointer OutputMeshPointer; 00106 typedef typename ImageType::Pointer ImagePointer; 00107 typedef typename ImageType::IndexType IndexType; 00108 typedef typename GradientImageType::Pointer GradientImagePointer; 00109 typedef typename GradientImageType::IndexType GradientIndexType; 00110 typedef ImageRegionIterator<ImageType> ImageIterator; 00111 typedef Vector<float, 3> FloatVector; 00112 typedef Vector<int, 3> IntVector; 00113 typedef Vector<double, 2> Double2Vector; 00114 typedef Vector<int, 2> Int2Vector; 00115 00117 typedef typename InputMeshType::CellType CellType; 00118 typedef typename InputMeshType::CellTraits CellTraits; 00119 typedef CellInterface<PixelType, CellTraits> CellInterface; 00120 typedef TriangleCell< CellInterface > TriCell; 00121 00122 00124 void ComputeForce(); 00125 void Initialize(); 00126 void SetStiffnessMatrix(); 00127 void Advance(); // update data for next iteration 00128 void Reset(); // reset all data 00129 void ComputeDt(); // compute point positions 00130 void ComputeOutput(); 00131 void NodeAddition(int i, int res, IPixelType z); // (folowing 3) for adding new nodes, now disabled for further tests 00132 void NodesRearrange(); 00133 void GapSearch(); 00134 void GradientFit(); // fit the model with gradient information 00135 void ComputeNormals(); 00136 void ACDSearch(); // remove weird structures on the model surface 00137 00139 itkSetMacro(ImageOutput, ImagePointer); 00140 itkGetMacro(ImageOutput, ImagePointer); 00141 itkSetMacro(Gradient, GradientImagePointer); 00142 00144 itkSetMacro(Stiffness, Double2Vector); 00145 itkSetMacro(TimeStep, double); 00146 itkSetMacro(GradientBegin, int); 00147 itkSetMacro(Resolution, int); 00148 itkSetMacro(Center, IndexType); 00149 itkGetMacro(Normals, InputMeshPointer); 00150 itkSetMacro(DistanceForGradient, float); 00151 itkSetMacro(DistanceToStop, float); 00152 itkSetMacro(Potential, ImagePointer); 00153 itkGetMacro(Locations, InputMeshPointer); 00154 itkGetMacro(Displacements, InputMeshPointer); 00155 itkGetMacro(Derives, InputMeshPointer); 00156 itkGetMacro(Forces, InputMeshPointer); 00157 00158 protected: 00159 BalloonForceFilter(); 00160 ~BalloonForceFilter(); 00161 void PrintSelf(std::ostream& os, Indent indent) const; 00162 00163 virtual void GenerateData(); 00164 00165 private: 00166 BalloonForceFilter(const Self&); //purposely not implemented 00167 void operator=(const Self&); //purposely not implemented 00168 00170 InputMeshPointer m_Forces; 00171 InputMeshPointer m_Normals; 00172 InputMeshPointer m_Displacements; 00173 InputMeshPointer m_Derives; 00174 InputMeshPointer m_Locations; 00175 InputMeshPointer m_Input; 00176 OutputMeshPointer m_Output; 00177 00179 vnl_matrix_fixed<double, 4, 4> m_NStiffness; 00180 vnl_matrix_fixed<double, 4, 4> m_SStiffness; 00181 vnl_matrix_fixed<double, 4, 4> m_CStiffness; 00182 vnl_matrix_fixed<double, 4, 4> **m_K; 00183 00184 Double2Vector m_Stiffness; 00185 double m_TimeStep; // the time step of each iteration 00186 int m_Resolution; 00187 IndexType m_Center; 00188 float m_MiniT; // variabel help to stop the model when near potential estimation 00189 int m_Step; // the number of iteration 00190 unsigned int m_NumberOfNodes; 00191 unsigned int m_NumberOfCells; 00192 unsigned int m_NumNewNodes; // for adding new nodes, now disabled for further tests 00193 int *m_GapLocations; 00194 float **m_NewNodes; 00195 int m_NewNodesExisted; 00196 unsigned int m_NewNodeLimit; 00197 unsigned int m_ImageWidth; // input image size 00198 unsigned int m_ImageHeight; 00199 unsigned int m_ImageDepth; 00200 int m_ModelXUpLimit; // the following 4 variables record the size of the model 00201 int m_ModelXDownLimit; 00202 int m_ModelYUpLimit; 00203 int m_ModelYDownLimit; 00204 int **m_ACD; // help to remove the weird structure on the model surface 00205 int m_ModelRestart; 00206 int m_GradientBegin; 00207 Int2Vector m_StepThreshold; // the threshold decide when to transfer from potential fit to gradient fit 00208 // and the threshold decide when to stop the model 00209 float m_DistanceToBoundary; 00210 float m_DistanceToStop; 00211 float m_DistanceForGradient; 00212 00213 ImagePointer m_Potential; // for calculate of image force from potential 00214 GradientImagePointer m_Gradient; // for calculate of image force from gradient 00215 00216 // for Gibbs Prior Model parameters' recalculation 00217 ImagePointer m_ImageOutput; 00218 unsigned short m_ObjectLabel; 00219 00220 typedef ImageType::SizeType ImageSizeType; 00221 00222 }; 00223 00224 } // end namespace itk 00225 00226 #ifndef ITK_MANUAL_INSTANTIATION 00227 #include "itkBalloonForceFilter.txx" 00228 #endif 00229 00230 #endif

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