File: itkNormalVectorFunctionBase.h

package info (click to toggle)
insighttoolkit5 5.4.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704,384 kB
  • sloc: cpp: 783,592; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,874; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 464; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (133 lines) | stat: -rw-r--r-- 4,175 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
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  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
 *
 *         https://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 itkNormalVectorFunctionBase_h
#define itkNormalVectorFunctionBase_h

#include "itkFiniteDifferenceSparseImageFunction.h"

namespace itk
{
/**
 * \class NormalVectorFunctionBase
 *
 * \brief This class defines the common functionality for Sparse Image
 * neighborhoods of unit vectors.
 *
 * \par
 * This class is derived from the FiniteDifferenceSparseImageFunction class and
 * adds the functionality needed to process unit normal vector
 * neighborhoods.
 *
 * \par
 * This class is the parent class of the NormalVectorDiffusionFunction
 * class which defines all the necessary functionality for performing diffusion
 * operations on unit vectors stored in sparse images. Other (non-diffusion)
 * filters (such as median filtering) on unit vectors can also be derived from
 * this base class.
 *
 * \par PARAMETERS
 * This function class has a time step parameter which is returned by the
 * ComputeGlobalTimeStep method. Unlike other finite difference function
 * classes, this class does not use the maximum change magnitude to compute the
 * time step, it returns this predetermined time step.
 * \ingroup ITKLevelSets
 */

template <typename TSparseImageType>
class ITK_TEMPLATE_EXPORT NormalVectorFunctionBase : public FiniteDifferenceSparseImageFunction<TSparseImageType>
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(NormalVectorFunctionBase);

  /** Standard class type alias. */
  using Self = NormalVectorFunctionBase;
  using Superclass = FiniteDifferenceSparseImageFunction<TSparseImageType>;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;

  /** \see LightObject::GetNameOfClass() */
  itkOverrideGetNameOfClassMacro(NormalVectorFunctionBase);

  /** Image dimension derived from the superclass. */
  static constexpr unsigned int ImageDimension = Superclass::ImageDimension;

  /** Typedefs from the superclass. */
  using typename Superclass::TimeStepType;
  using typename Superclass::RadiusType;
  using typename Superclass::NeighborhoodType;
  using typename Superclass::FloatOffsetType;
  using typename Superclass::IndexType;
  using typename Superclass::SparseImageType;

  /** The node type for the sparse image. */
  using NodeType = typename SparseImageType::NodeType;

  /** The basic floating point type for the variables. */
  using NodeValueType = typename NodeType::NodeValueType;

  /** The vector type for the normals. */
  using NormalVectorType = typename NodeType::NodeDataType;

  /** GlobalData methods are not needed in this class. */
  void *
  GetGlobalDataPointer() const override
  {
    return nullptr;
  }
  void
  ReleaseGlobalDataPointer(void *) const override
  {}

  /** For the global time step, we return the time step parameter. */
  TimeStepType
  ComputeGlobalTimeStep(void *) const override
  {
    return m_TimeStep;
  }

  /** Sets the time step. */
  void
  SetTimeStep(const TimeStepType & ts)
  {
    m_TimeStep = ts;
  }

  /** Returns the time step. */
  TimeStepType
  GetTimeStep() const
  {
    return m_TimeStep;
  }

protected:
  NormalVectorFunctionBase();
  ~NormalVectorFunctionBase() override = default;
  void
  PrintSelf(std::ostream & os, Indent indent) const override;

private:
  /** The time step for normal vector finite difference computations. */
  TimeStepType m_TimeStep{};
};
} // end namespace itk

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

#endif