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
00037 template< class TMatrixElement, int VNumberOfRows >
00038 class ITK_EXPORT SymmetricEigenSystem : public Object
00039 {
00040 public:
00042 typedef SymmetricEigenSystem Self;
00043 typedef Object Superclass;
00044 typedef SmartPointer<Self> Pointer;
00045 typedef SmartPointer<const Self> ConstPointer;
00046
00048 itkTypeMacro( SymmetricEigenSystem, Object );
00049
00051 itkNewMacro(Self);
00052
00054 typedef FixedArray< TMatrixElement, VNumberOfRows > ArrayType;
00055
00057 typedef FixedArray< ArrayType, VNumberOfRows > Array2DType ;
00058
00060 typedef Array2DType EigenVectorArrayType ;
00061
00063 typedef ArrayType EigenValueArrayType ;
00064
00066 typedef Matrix< TMatrixElement, VNumberOfRows, VNumberOfRows > MatrixType ;
00067
00069 typedef vnl_symmetric_eigensystem< TMatrixElement > InternalEigenSystemType;
00070
00072 itkSetObjectMacro(Matrix, MatrixType) ;
00073 MatrixType* GetMatrix()
00074 { return m_Matrix ; }
00075
00082 itkSetMacro(UseAbsoluteOrder, bool) ;
00083 itkGetMacro(UseAbsoluteOrder, bool) ;
00084
00086 EigenVectorArrayType* GetEigenVectors()
00087 { return &m_EigenVectors ; }
00088
00090 EigenValueArrayType* GetEigenValues()
00091 { return &m_EigenValues ; }
00092
00095 void Update()
00096 { this->GenerateData() ; }
00097
00098 protected:
00099 SymmetricEigenSystem();
00100 virtual ~SymmetricEigenSystem();
00101 void PrintSelf(std::ostream& os, Indent indent) const;
00102
00104 void GenerateData() ;
00105
00106 private:
00107 SymmetricEigenSystem(const Self&);
00108 void operator=(const Self&);
00109
00111 MatrixType* m_Matrix ;
00112
00114 EigenVectorArrayType m_EigenVectors ;
00115
00117 EigenValueArrayType m_EigenValues ;
00118
00121 bool m_UseAbsoluteOrder ;
00122 };
00123
00124 }
00125
00126 #ifndef ITK_MANUAL_INSTANTIATION
00127 #include "itkSymmetricEigenSystem.txx"
00128 #endif
00129
00130 #endif
00131
00132
00133