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