File: antsListSampleFunction.h

package info (click to toggle)
ants 2.5.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 11,672 kB
  • sloc: cpp: 85,685; sh: 15,850; perl: 863; xml: 115; python: 111; makefile: 68
file content (153 lines) | stat: -rw-r--r-- 5,051 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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/*=========================================================================

  Program:   Advanced Normalization Tools

  Copyright (c) ConsortiumOfANTS. All rights reserved.
  See accompanying COPYING.txt or
  https://github.com/stnava/ANTs/blob/master/ANTSCopyright.txt
  for details.

  This software is distributed WITHOUT ANY WARRANTY; without even
  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef __antsListSampleFunction_h
#define __antsListSampleFunction_h

#include "itkFunctionBase.h"

#include "itkArray.h"

namespace itk
{
namespace ants
{
namespace Statistics
{
/** \class ListSampleFunction
 * \brief Evaluates a function of an image at specified position.
 *
 * ListSampleFunction is a baseclass for all objects that evaluates
 * a function of a list sample at a measurement
 * This class is templated over the input list type, the type
 * of the function output and the coordinate representation type
 * (e.g. float or double).
 *
 * The input list sample is set via method SetInputListSample().
 * The methods Evaluate() evaluates the function at a measurement vector.
 *
 * \ingroup ListSampleFunctions
 */
template <typename TInputListSample, typename TOutput, typename TCoordRep = float>
class ListSampleFunction : public FunctionBase<typename TInputListSample::MeasurementVectorType, TOutput>
{
public:
  /** Standard class typedefs. */
  typedef ListSampleFunction                      Self;
  typedef FunctionBase<TInputListSample, TOutput> Superclass;
  typedef SmartPointer<Self>                      Pointer;
  typedef SmartPointer<const Self>                ConstPointer;

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

  /** InputListSampleType typedef support. */
  typedef TInputListSample InputListSampleType;

  /** Array typedef for weights */
  typedef Array<double> ListSampleWeightArrayType;

  /** InputPixel typedef support */
  typedef typename InputListSampleType::MeasurementVectorType InputMeasurementVectorType;
  typedef typename InputListSampleType::MeasurementType       InputMeasurementType;

  /** OutputType typedef support. */
  typedef TOutput OutputType;

  /** CoordRepType typedef support. */
  typedef TCoordRep CoordRepType;

  /** Set the input point set.
   * \warning this method caches BufferedRegion information.
   * If the BufferedRegion has changed, user must call
   * SetInputListSample again to update cached values. */
  virtual void
  SetInputListSample(const InputListSampleType * ptr)
  {
    this->SetIndexedInputListSample(0, ptr);
  }

  virtual void
  SetIndexedInputListSample(const unsigned int d, const InputListSampleType * ptr);

  /** Sets the weights using an array */
  virtual void
  SetListSampleWeights(ListSampleWeightArrayType * array)
  {
    this->SetListSampleWeights(0, array);
  }

  virtual void
  SetListSampleWeights(const unsigned int, ListSampleWeightArrayType *);

  /** Get the input image. */
  virtual const InputListSampleType *
  GetInputListSample(const unsigned int idx = 0) const;

  /** Clear the input list sample to free memory */
  virtual void
  ClearInputListSample(const unsigned int idx = 0)
  {
    this->SetIndexedInputListSample(idx, nullptr);
  }

  /** Gets the weights array */
  virtual ListSampleWeightArrayType *
  GetListSampleWeights(const unsigned int idx = 0);

  /** Evaluate the function at specified Point position.
   * Subclasses must provide this method. */
  TOutput
  Evaluate(const InputMeasurementVectorType & measurement) const override = 0;

protected:
  ListSampleFunction();
  ~ListSampleFunction() override = default;

  void
  PrintSelf(std::ostream & os, Indent indent) const override;

  /** Const pointer to the input image. */
  std::vector<typename InputListSampleType::ConstPointer> m_ListSamples;
  std::vector<ListSampleWeightArrayType *>                m_ListSampleWeights;

private:
  ListSampleFunction(const Self &) = delete;
  void
  operator=(const Self &) = delete;
};
} // end of namespace Statistics
} // end of namespace ants
} // end of namespace itk

// Define instantiation macro for this template.
#define ITK_TEMPLATE_ListSampleFunction(_, EXPORT, x, y)              \
  namespace itk                                                       \
  {                                                                   \
  _(3(class EXPORT ListSampleFunction<ITK_TEMPLATE_3 x>))             \
  namespace Templates                                                 \
  {                                                                   \
  typedef ListSampleFunction<ITK_TEMPLATE_3 x> ListSampleFunction##y; \
  }                                                                   \
  }

#if ITK_TEMPLATE_EXPLICIT
#  include "Templates/antsListSampleFunction+-.h"
#endif

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

#endif