Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages
Hybrid/vtkThinPlateSplineTransform.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00051 #ifndef __vtkThinPlateSplineTransform_h
00052 #define __vtkThinPlateSplineTransform_h
00053
00054 #include "vtkWarpTransform.h"
00055
00056 #define VTK_RBF_CUSTOM 0
00057 #define VTK_RBF_R 1
00058 #define VTK_RBF_R2LOGR 2
00059
00060 class VTK_HYBRID_EXPORT vtkThinPlateSplineTransform : public vtkWarpTransform
00061 {
00062 public:
00063 vtkTypeRevisionMacro(vtkThinPlateSplineTransform,vtkWarpTransform);
00064 void PrintSelf(ostream& os, vtkIndent indent);
00065 static vtkThinPlateSplineTransform *New();
00066
00068
00069 vtkGetMacro(Sigma,double);
00070 vtkSetMacro(Sigma,double);
00072
00074
00076 void SetBasis(int basis);
00077 vtkGetMacro(Basis,int);
00078 void SetBasisToR() { this->SetBasis(VTK_RBF_R); };
00079 void SetBasisToR2LogR() { this->SetBasis(VTK_RBF_R2LOGR); };
00080 const char *GetBasisAsString();
00082
00083
00085
00086 both the function and its derivative with respect to r. */
00087 void SetBasisFunction(double (*U)(double r)) {
00088 if (this->BasisFunction == U) { return; }
00089 this->SetBasis(VTK_RBF_CUSTOM);
00090 this->BasisFunction = U;
00091 this->Modified(); };
00092 void SetBasisDerivative(double (*dUdr)(double r, double &dU)) {
00093 this->BasisDerivative = dUdr;
00094 this->Modified(); };
00096
00097
00099
00102 void SetSourceLandmarks(vtkPoints *source);
00103 vtkGetObjectMacro(SourceLandmarks,vtkPoints);
00105
00107
00110 void SetTargetLandmarks(vtkPoints *target);
00111 vtkGetObjectMacro(TargetLandmarks,vtkPoints);
00113
00115 unsigned long GetMTime();
00116
00118 vtkAbstractTransform *MakeTransform();
00119
00120 protected:
00121 vtkThinPlateSplineTransform();
00122 ~vtkThinPlateSplineTransform();
00123
00125 void InternalUpdate();
00126
00128 void InternalDeepCopy(vtkAbstractTransform *transform);
00129
00130 void ForwardTransformPoint(const float in[3], float out[3]);
00131 void ForwardTransformPoint(const double in[3], double out[3]);
00132
00133 void ForwardTransformDerivative(const float in[3], float out[3],
00134 float derivative[3][3]);
00135 void ForwardTransformDerivative(const double in[3], double out[3],
00136 double derivative[3][3]);
00137
00138 double Sigma;
00139 vtkPoints *SourceLandmarks;
00140 vtkPoints *TargetLandmarks;
00141
00142
00143
00144 double (*BasisFunction)(double r);
00145 double (*BasisDerivative)(double r, double& dUdr);
00146
00147 int Basis;
00148
00149 int NumberOfPoints;
00150 double **MatrixW;
00151 private:
00152 vtkThinPlateSplineTransform(const vtkThinPlateSplineTransform&);
00153 void operator=(const vtkThinPlateSplineTransform&);
00154 };
00155
00156 #endif
00157
00158
00159
00160
00161