File: itkGPUNearestNeighborInterpolateImageFunctionFactory.h

package info (click to toggle)
elastix 5.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 42,480 kB
  • sloc: cpp: 68,403; lisp: 4,118; python: 1,013; xml: 182; sh: 177; makefile: 33
file content (132 lines) | stat: -rw-r--r-- 5,270 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*=========================================================================
 *
 *  Copyright UMC Utrecht and contributors
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef itkGPUNearestNeighborInterpolateImageFunctionFactory_h
#define itkGPUNearestNeighborInterpolateImageFunctionFactory_h

#include "itkGPUObjectFactoryBase.h"
#include "itkGPUNearestNeighborInterpolateImageFunction.h"

namespace itk
{
/** \class GPUNearestNeighborInterpolateImageFunctionFactory2
 * \brief Object Factory implementation for GPUNearestNeighborInterpolateImageFunction
 *
 * \author Denis P. Shamonin and Marius Staring. Division of Image Processing,
 * Department of Radiology, Leiden, The Netherlands
 *
 * \note This work was funded by the Netherlands Organisation for
 * Scientific Research (NWO NRG-2010.02 and NWO 639.021.124).
 *
 */
template <typename TTypeList, typename NDimensions>
class ITK_TEMPLATE_EXPORT GPUNearestNeighborInterpolateImageFunctionFactory2 : public GPUObjectFactoryBase<NDimensions>
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(GPUNearestNeighborInterpolateImageFunctionFactory2);

  using Self = GPUNearestNeighborInterpolateImageFunctionFactory2;
  using Superclass = GPUObjectFactoryBase<NDimensions>;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;

  /** Return a descriptive string describing the factory. */
  const char *
  GetDescription() const
  {
    return "A Factory for GPUNearestNeighborInterpolateImageFunction";
  }

  /** Method for class instantiation. */
  itkFactorylessNewMacro(Self);

  /** Run-time type information (and related methods). */
  itkTypeMacro(GPUNearestNeighborInterpolateImageFunctionFactory2, GPUObjectFactoryBase);

  /** Register one factory of this type. */
  static void
  RegisterOneFactory();

  /** Operator() to register override. */
  template <typename TType, unsigned int VImageDimension>
  void
  operator()()
  {
    // Image typedefs
    using InputImageType = Image<TType, VImageDimension>;
    using GPUInputImageType = GPUImage<TType, VImageDimension>;

    // Override default with the coordinate representation type as float
    this->RegisterOverride(
      typeid(NearestNeighborInterpolateImageFunction<InputImageType, float>).name(),
      typeid(GPUNearestNeighborInterpolateImageFunction<InputImageType, float>).name(),
      "GPU NearestNeighborInterpolateImageFunction override with coord rep as float",
      true,
      CreateObjectFunction<GPUNearestNeighborInterpolateImageFunction<InputImageType, float>>::New());

    // Override when itkGPUImage is first template argument
    // and the coordinate representation type as float
    this->RegisterOverride(
      typeid(NearestNeighborInterpolateImageFunction<GPUInputImageType, float>).name(),
      typeid(GPUNearestNeighborInterpolateImageFunction<GPUInputImageType, float>).name(),
      "GPU NearestNeighborInterpolateImageFunction override for GPUImage with coord rep as float",
      true,
      CreateObjectFunction<GPUNearestNeighborInterpolateImageFunction<GPUInputImageType, float>>::New());

    // Override default with and the coordinate representation type as double
    this->RegisterOverride(
      typeid(NearestNeighborInterpolateImageFunction<InputImageType, double>).name(),
      typeid(GPUNearestNeighborInterpolateImageFunction<InputImageType, double>).name(),
      "GPU NearestNeighborInterpolateImageFunction override with coord rep as double",
      true,
      CreateObjectFunction<GPUNearestNeighborInterpolateImageFunction<InputImageType, double>>::New());

    // Override when itkGPUImage is first template argument
    // and the coordinate representation type as double
    this->RegisterOverride(
      typeid(NearestNeighborInterpolateImageFunction<GPUInputImageType, double>).name(),
      typeid(GPUNearestNeighborInterpolateImageFunction<GPUInputImageType, double>).name(),
      "GPU NearestNeighborInterpolateImageFunction override for GPUImage with coord rep as double",
      true,
      CreateObjectFunction<GPUNearestNeighborInterpolateImageFunction<GPUInputImageType, double>>::New());
  }


protected:
  GPUNearestNeighborInterpolateImageFunctionFactory2();
  virtual ~GPUNearestNeighborInterpolateImageFunctionFactory2() {}

  /** Register methods for 1D. */
  virtual void
  Register1D();

  /** Register methods for 2D. */
  virtual void
  Register2D();

  /** Register methods for 3D. */
  virtual void
  Register3D();
};

} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#  include "itkGPUNearestNeighborInterpolateImageFunctionFactory.hxx"
#endif

#endif // end #ifndef itkGPUNearestNeighborInterpolateImageFunctionFactory_h