]> Creatis software - clitk.git/blob - registration/clitkGenericInterpolator.h
initial image centralization (BLUT) is optional
[clitk.git] / registration / clitkGenericInterpolator.h
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18
19 #ifndef __clitkGenericInterpolator_h
20 #define __clitkGenericInterpolator_h
21
22 //itk include
23 #include "itkNearestNeighborInterpolateImageFunction.h"
24 #include "itkLinearInterpolateImageFunction.h"
25 #include "itkBSplineInterpolateImageFunction.h"
26 #include "itkBSplineInterpolateImageFunctionWithLUT.h"
27
28
29 /*
30
31 Requires at least the following section is the .ggo file
32
33 option "interp"         -       "Interpolation: 0=NN, 1=Linear, 2=BSpline, 3=BLUT"      int     no  default="1"
34 option "interpOrder"    -       "Order if BLUT or BSpline (0-5)"                        int     no  default="3"
35 option "interpSF"       -       "Sampling factor if BLUT"                               int     no  default="20"
36
37 The use will look something like
38
39 typedef clitk::GenericInterpolator<InputImageType, double> GenericInterpolatorType;
40 typename GenericInterpolatorType::Pointer genericInterpolator=GenericInterpolatorType::New();
41 genericInterpolator->SetArgsInfo(m_ArgsInfo);
42 typedef itk::InterpolateImageFunction<InputImageType, double> InterpolatorType;
43 typename InterpolatorType::Pointer interpolator=genericInterpolator->GetInterpolatorPointer();
44
45 */
46
47 namespace clitk
48 {
49
50 template <class args_info_type,  class ImageType,  class TCoordRep >
51 class GenericInterpolator : public itk::LightObject
52 {
53 public:
54   //==============================================
55   typedef GenericInterpolator     Self;
56   typedef itk::LightObject     Superclass;
57   typedef itk::SmartPointer<Self>            Pointer;
58   typedef itk::SmartPointer<const Self>      ConstPointer;
59
60   typedef itk::InterpolateImageFunction<ImageType, TCoordRep> InterpolatorType;
61   typedef typename InterpolatorType::Pointer InterpolatorPointer;
62
63   /** Method for creation through the object factory. */
64   itkNewMacro(Self);
65
66   //==============================================
67   //Set members
68   void SetArgsInfo(args_info_type args_info) {
69     m_ArgsInfo= args_info;
70     m_Verbose=m_ArgsInfo.verbose_flag;
71   }
72
73   //==============================================
74   //Get members
75   InterpolatorPointer GetInterpolatorPointer(void);
76
77   //==============================================
78 protected:
79   GenericInterpolator();
80   ~GenericInterpolator() {};
81
82 private:
83   args_info_type m_ArgsInfo;
84   InterpolatorPointer m_Interpolator;
85   bool m_Verbose;
86 };
87
88 } // end namespace clitk
89 #ifndef ITK_MANUAL_INSTANTIATION
90 #include "clitkGenericInterpolator.txx"
91 #endif
92
93 #endif // #define __clitkGenericInterpolator_h