MeVisLabToolboxReference
|
00001 // **InsertLicense** code 00002 //---------------------------------------------------------------------------------- 00004 00013 //---------------------------------------------------------------------------------- 00014 00015 #ifndef __DTICalculator__H_ 00016 #define __DTICalculator__H_ 00017 00018 #include "IDTICalculator.h" 00019 00020 00021 #define DEFINE_DIM(DIM) \ 00022 const MLuint32 DTICalculator<DIM>::ms_Dim = DIM; \ 00023 const MLuint32 DTICalculator<DIM>::ms_SymmTensDim = SYMM_MAT_SIZE(DIM) 00024 00025 #define DEFINE_EPSILONS(DIM) \ 00026 const double DTICalculator<DIM>::m_sEpsilonRel = 1.0e-00; \ 00027 const double DTICalculator<DIM>::m_sEpsilonAbs = 0.0e-08 00028 00029 template<MLuint32 DIM> 00030 class DTICalculator : public IDTICalculator 00031 { 00032 00033 public: 00034 00035 DTICalculator(); 00036 virtual ~DTICalculator(); 00037 00038 virtual void DeleteDTICalculator (); 00039 00040 DTICalculator(const DTICalculator& calcObj); 00041 DTICalculator& operator=(const DTICalculator& calcObj); 00042 00043 virtual MLuint32 getDimension() const; 00044 00045 00046 virtual Error_Type setGradients(const double **aGradients, const MLuint32 lNrOfGradients); 00047 virtual MLuint32 getNrOfGradients() const; 00048 00051 virtual double getTensorError(const double *pLNNorm, const MLuint32 lNrOfGradients); 00052 00053 virtual const double* calcDiffusionTensor(const double *pLNNorm); 00054 00055 virtual Error_Type eigenAnaly(); 00056 virtual Error_Type eigenAnaly(double regularizationParam); 00057 virtual const double* getEigenvalues() const; 00058 virtual const double* getEigenvectors() const; 00059 00060 00061 private: 00062 00063 static const MLuint32 ms_SymmTensDim; //(DIM*(DIM+1))/2; 00064 00065 static const double m_sEpsilonRel; 00066 static const double m_sEpsilonAbs; 00067 00068 float *m_pGradientMem; 00069 float *m_pGradPseudoInvMem; 00070 float *m_aGradPseudoInv[MLMISCMATH_SYMM_MAT_SIZE(DIM)]; 00071 00072 double m_aEigenvalue[DIM]; 00073 double m_aEigenvector[DIM*DIM]; 00074 double m_aDiffusionTensor[MLMISCMATH_SYMM_MAT_SIZE(DIM)]; 00075 double m_aOriginalDiffusionTensor[MLMISCMATH_SYMM_MAT_SIZE(DIM)]; // remains equal after eigenAnaly() !!!!!!!! 00076 00077 MLuint32 m_lNrOfGradients; 00078 00079 }; 00080 00081 00082 00083 00084 #endif