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 "vnl/algo/vnl_symmetric_eigensystem.h"
00021 #include "itkFixedArray.h"
00022 #include "itkMatrix.h"
00023
00024 namespace itk
00025 {
00026
00033 template< class TMatrixElement, int VNumberOfRows >
00034 class ITK_EXPORT SymmetricEigenSystem : public Object
00035 {
00036 public:
00038 typedef SymmetricEigenSystem Self;
00039 typedef Object Superclass;
00040 typedef SmartPointer<Self> Pointer;
00041 typedef SmartPointer<const Self> ConstPointer;
00042
00044 itkTypeMacro( SymmetricEigenSystem, Object );
00045
00047 itkNewMacro(Self);
00048
00050 typedef FixedArray< TMatrixElement, VNumberOfRows > ArrayType;
00051
00053 typedef FixedArray< ArrayType, VNumberOfRows > Array2DType ;
00054
00056 typedef Array2DType EigenVectorArrayType ;
00057
00059 typedef ArrayType EigenValueArrayType ;
00060
00062 typedef Matrix< TMatrixElement, VNumberOfRows, VNumberOfRows > MatrixType ;
00063
00065 typedef vnl_symmetric_eigensystem< TMatrixElement > InternalEigenSystemType;
00066
00068 itkSetObjectMacro(Matrix, MatrixType) ;
00069 MatrixType* GetMatrix()
00070 { return m_Matrix ; }
00071
00078 itkSetMacro(UseAbsoluteOrder, bool) ;
00079 itkGetMacro(UseAbsoluteOrder, bool) ;
00080
00082 EigenVectorArrayType* GetEigenVectors()
00083 { return &m_EigenVectors ; }
00084
00086 EigenValueArrayType* GetEigenValues()
00087 { return &m_EigenValues ; }
00088
00091 void Update()
00092 { this->GenerateData() ; }
00093
00094 protected:
00095 SymmetricEigenSystem();
00096 virtual ~SymmetricEigenSystem();
00097 void PrintSelf(std::ostream& os, Indent indent) const;
00098
00100 void GenerateData() ;
00101
00102 private:
00103 SymmetricEigenSystem(const Self&);
00104 void operator=(const Self&);
00105
00107 MatrixType* m_Matrix ;
00108
00110 EigenVectorArrayType m_EigenVectors ;
00111
00113 EigenValueArrayType m_EigenValues ;
00114
00117 bool m_UseAbsoluteOrder ;
00118 };
00119
00120 }
00121
00122 #ifndef ITK_MANUAL_INSTANTIATION
00123 #include "itkSymmetricEigenSystem.txx"
00124 #endif
00125
00126 #endif
00127
00128
00129