00001 /*========================================================================= 00002 00003 Program: 3DMed 00004 Date: $Date: 2014-02-25 18:30:00 +0800 $ 00005 Version: $Version: 4.6.0 $ 00006 Copyright: MIPG, Institute of Automation, Chinese Academy of Sciences 00007 00008 =========================================================================*/ 00009 00010 00011 #ifndef __mitkThinPlateSplineTransform_h 00012 #define __mitkThinPlateSplineTransform_h 00013 00014 #include "mitkTransform.h" 00015 #include "mitkPointSetKernelTransformEstimator.h" 00016 00020 00021 class MITK_REGISTRATION_API mitkThinPlateSplineTransform : public mitkTransform 00022 { 00023 public: 00024 MITK_TYPE(mitkThinPlateSplineTransform, mitkTransform) 00025 virtual void PrintSelf(ostream &os); 00026 00030 mitkThinPlateSplineTransform(); 00031 00035 mitkThinPlateSplineTransform(unsigned int imageDimension, 00036 int transformMode = MITK_TRANSFORM_THINPLATESPLINE_R); 00037 00043 const MatrixType & GetJacobian(VectorParameterType& inPoint); 00044 00049 virtual void ConvertTransformMaxtrixToVector(); 00050 00051 mitkPointSetKernelTransformEstimator* GetEstimator(); 00052 00053 void SetEstimator(mitkPointSetKernelTransformEstimator* e); 00054 00055 void SetFixedLandmarks(mitkPointSet* p); 00056 00057 void SetMovingLandmarks(mitkPointSet* p); 00058 00059 mitk_nl_matrix<double>* GetDeformMatrix() { return m_DeformMatrix; } 00060 00061 // void SetParameters(vector<float>* parameters); 00062 00063 // vector<float>* GetParameters(); 00064 00065 void ComputeWarp(); 00066 00067 virtual void GetInverse(); 00068 00069 protected: 00070 virtual ~mitkThinPlateSplineTransform(); 00071 virtual void ComputeTransformMatrix(); 00072 virtual bool Execute(); 00073 virtual void _transform(const ScalarParameterType* inPoint, ScalarParameterType* outPoint); 00074 00075 mitkPointSetKernelTransformEstimator* m_Estimator; 00076 mitk_nl_matrix<double>* m_DeformMatrix; 00077 unsigned int m_NumberOfLandmarks; 00078 mitkPointSet* m_MovingLandmarks; 00079 00080 private: 00081 mitkThinPlateSplineTransform(const mitkThinPlateSplineTransform&); 00082 void operator = (const mitkThinPlateSplineTransform&); 00083 00084 }; 00085 00086 00087 //#define DEFINED_mitkThinPlateSplineTransform 00088 00089 00090 00091 #endif 00092