00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkSymmetricEigenSystem_h
00018 #define __itkSymmetricEigenSystem_h
00019
00020 #include "itkObject.h"
00021 #include "vnl/algo/vnl_symmetric_eigensystem.h"
00022 #include "itkObjectFactory.h"
00023 #include "itkObject.h"
00024 #include "itkFixedArray.h"
00025 #include "itkMatrix.h"
00026 #include "itkObjectFactory.h"
00027
00028 namespace itk
00029 {
00030
00045 template< class TMatrixElement, int VNumberOfRows >
00046 class ITK_EXPORT SymmetricEigenSystem : public Object
00047 {
00048 public:
00050 typedef SymmetricEigenSystem Self;
00051 typedef Object Superclass;
00052 typedef SmartPointer<Self> Pointer;
00053 typedef SmartPointer<const Self> ConstPointer;
00054
00056 itkTypeMacro( SymmetricEigenSystem, Object );
00057
00059 itkNewMacro(Self);
00060
00062 typedef FixedArray< TMatrixElement, VNumberOfRows > ArrayType;
00063
00065 typedef FixedArray< ArrayType, VNumberOfRows > Array2DType ;
00066
00068 typedef Array2DType EigenVectorArrayType ;
00069
00071 typedef ArrayType EigenValueArrayType ;
00072
00074 typedef Matrix< TMatrixElement, VNumberOfRows, VNumberOfRows > MatrixType ;
00075
00077 typedef vnl_symmetric_eigensystem< TMatrixElement > InternalEigenSystemType;
00078
00080 itkSetObjectMacro(Matrix, MatrixType) ;
00081 MatrixType* GetMatrix()
00082 { return m_Matrix ; }
00083
00090 itkSetMacro(UseAbsoluteOrder, bool) ;
00091 itkGetMacro(UseAbsoluteOrder, bool) ;
00092
00094 EigenVectorArrayType* GetEigenVectors()
00095 { return &m_EigenVectors ; }
00096
00098 EigenValueArrayType* GetEigenValues()
00099 { return &m_EigenValues ; }
00100
00103 void Update()
00104 { this->GenerateData() ; }
00105
00106 protected:
00107 SymmetricEigenSystem();
00108 virtual ~SymmetricEigenSystem();
00109 void PrintSelf(std::ostream& os, Indent indent) const;
00110
00112 void GenerateData() ;
00113
00114 private:
00115 SymmetricEigenSystem(const Self&);
00116 void operator=(const Self&);
00117
00119 MatrixType* m_Matrix ;
00120
00122 EigenVectorArrayType m_EigenVectors ;
00123
00125 EigenValueArrayType m_EigenValues ;
00126
00129 bool m_UseAbsoluteOrder ;
00130 };
00131
00132 }
00133
00134 #ifndef ITK_MANUAL_INSTANTIATION
00135 #include "itkSymmetricEigenSystem.txx"
00136 #endif
00137
00138 #endif
00139
00140
00141