00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __mitkPointSetKernelTransformEstimator_h
00012 #define __mitkPointSetKernelTransformEstimator_h
00013
00014 #include "mitkPointSetEstimator.h"
00015 #include "mitkPointSet.h"
00016
00017 #define MITK_KERNEL_FUNC_TPS_R 1
00018 #define MITK_KERNEL_FUNC_TPS_R2LOGR 2
00019 #define MITK_KERNEL_FUNC_EBS 3
00020 #define MITK_KERNEL_FUNC_VS 4
00021
00022
00025
00026
00027 class MITK_REGISTRATION_API mitkPointSetKernelTransformEstimator : public mitkPointSetEstimator
00028 {
00029 public:
00030 MITK_TYPE(mitkPointSetKernelTransformEstimator, mitkPointSetEstimator)
00031 virtual void PrintSelf(ostream &os);
00032
00036 mitkPointSetKernelTransformEstimator();
00037
00038 mitkPointSetKernelTransformEstimator(int tfMode);
00039
00044 void SetMovingPointSet(mitkPointSet *movingPointSet);
00045
00046 void SetKernelFunction(int m) { m_KernelFunction = m; }
00047
00048 void SetKernelFunctionToTPSR() { this->SetKernelFunction(MITK_KERNEL_FUNC_TPS_R); }
00049
00050 void SetKernelFunctionToTPSR2LOGR() { this->SetKernelFunction(MITK_KERNEL_FUNC_TPS_R2LOGR); }
00051
00052 void SetKernelFunctionToEBS() { this->SetKernelFunction(MITK_KERNEL_FUNC_EBS); }
00053
00054 void SetKernelFunctionToVS() { this->SetKernelFunction(MITK_KERNEL_FUNC_VS); }
00055
00056 void SetAlphaCoefficient(ScalarParameterType a) { m_Alpha = a; }
00057
00058 ScalarParameterType GetAlphaCoefficient() { return m_Alpha; }
00059
00060 void SetStiffnessCoefficient(ScalarParameterType s) { m_Stiffness = s; }
00061
00062 ScalarParameterType GetStiffnessCoefficient() { return m_Stiffness; }
00063
00064 MatrixType& GetDeformMatrix() { return m_DMatrix; }
00065
00066 bool IsTransformSupported(mitkTransform* transform = NULL);
00067
00068 bool ComputeWMatrix();
00069
00070 protected:
00071 virtual ~mitkPointSetKernelTransformEstimator();
00072 virtual bool Execute();
00073 void ComputeLMatrix();
00074 void ComputeKMatrix();
00075 void ComputePMatrix();
00076 void ComputeYMatrix();
00077 void ComputeDisplacement();
00078 void ComputeGMatrix(const mitkPoint<double> & s);
00079
00080 mitkPointSet m_Displacements;
00081
00082 MatrixType m_LMatrix;
00083 MatrixType m_KMatrix;
00084 MatrixType m_PMatrix;
00085 MatrixType m_YMatrix;
00086 MatrixType m_WMatrix;
00087 MatrixType m_GMatrix;
00088 MatrixType m_DMatrix;
00089
00090 int m_KernelFunction;
00091 ScalarParameterType m_Stiffness;
00092 ScalarParameterType m_Alpha;
00093
00094
00095
00096
00097 private:
00098 mitkPointSetKernelTransformEstimator(const mitkPointSetKernelTransformEstimator&);
00099 void operator = (const mitkPointSetKernelTransformEstimator&);
00100
00101 };
00102
00103
00104
00105
00106
00107
00108 #endif
00109