ITK  6.0.0
Insight Toolkit
itkUpdateWhitakerSparseLevelSet.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * https://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 
19 #ifndef itkUpdateWhitakerSparseLevelSet_h
20 #define itkUpdateWhitakerSparseLevelSet_h
21 
22 #include "itkImage.h"
30 
31 namespace itk
32 {
42 template <unsigned int VDimension, typename TLevelSetValueType, typename TEquationContainer>
43 class ITK_TEMPLATE_EXPORT UpdateWhitakerSparseLevelSet : public Object
44 {
45 public:
46  ITK_DISALLOW_COPY_AND_MOVE(UpdateWhitakerSparseLevelSet);
47 
51  using Superclass = Object;
52 
54  itkNewMacro(Self);
55 
57  itkOverrideGetNameOfClassMacro(UpdateWhitakerSparseLevelSet);
58 
59  static constexpr unsigned int ImageDimension = VDimension;
60 
61  using LevelSetOutputType = TLevelSetValueType;
62 
67 
70 
75 
81 
85 
86  using EquationContainerType = TEquationContainer;
88 
89  using TermContainerType = typename EquationContainerType::TermContainerType;
90  using TermContainerPointer = typename EquationContainerType::TermContainerPointer;
91 
94 
97 
98  itkGetModifiableObjectMacro(OutputLevelSet, LevelSetType);
99 
101  void
102  Update();
103 
105  itkSetObjectMacro(InputLevelSet, LevelSetType);
106  itkGetModifiableObjectMacro(InputLevelSet, LevelSetType);
110  itkSetMacro(TimeStep, LevelSetOutputType);
111  itkGetMacro(TimeStep, LevelSetOutputType);
115  itkGetMacro(RMSChangeAccumulator, LevelSetOutputType);
116 
118  itkSetObjectMacro(EquationContainer, EquationContainerType);
119  itkGetModifiableObjectMacro(EquationContainer, EquationContainerType);
123  itkSetMacro(CurrentLevelSetId, IdentifierType);
124  itkGetMacro(CurrentLevelSetId, IdentifierType);
128  void
129  SetUpdate(const LevelSetLayerType & update);
130 
131 protected:
133  ~UpdateWhitakerSparseLevelSet() override = default;
134 
136  void
137  UpdateLayerZero();
138 
140  void
141  UpdateLayerMinus1();
142 
144  void
145  UpdateLayerPlus1();
146 
148  void
149  UpdateLayerMinus2();
150 
152  void
153  UpdateLayerPlus2();
154 
156  void
157  MovePointIntoZeroLevelSet();
158 
160  void
161  MovePointFromMinus1();
162 
164  void
165  MovePointFromPlus1();
166 
168  void
169  MovePointFromMinus2();
170 
172  void
173  MovePointFromPlus2();
174 
175 private:
176  LevelSetOutputType m_TimeStep{};
177  LevelSetOutputType m_RMSChangeAccumulator{};
178  IdentifierType m_CurrentLevelSetId{};
179 
180  EquationContainerPointer m_EquationContainer{};
181 
182  LevelSetLayerType m_Update{};
183  LevelSetPointer m_InputLevelSet{};
184  LevelSetPointer m_OutputLevelSet{};
185 
186  LevelSetPointer m_TempLevelSet{};
187  LevelSetLayerType m_TempPhi{};
188 
189  LevelSetLayerIdType m_MinStatus{};
190  LevelSetLayerIdType m_MaxStatus{};
191 
192  LabelImagePointer m_InternalImage{};
193 
194  LevelSetOffsetType m_Offset{};
195 
197 
198  using NodePairType = std::pair<LevelSetInputType, LevelSetOutputType>;
199 };
200 } // namespace itk
201 
202 #ifndef ITK_MANUAL_INSTANTIATION
203 # include "itkUpdateWhitakerSparseLevelSet.hxx"
204 #endif
205 #endif // itkUpdateWhitakerSparseLevelSet_h
itkLabelImageToLabelMapFilter.h
itk::WhitakerSparseLevelSetImage
Derived class for the sparse-field representation of level-set function.
Definition: itkWhitakerSparseLevelSetImage.h:41
Pointer
SmartPointer< Self > Pointer
Definition: itkAddImageFilter.h:93
itk::UpdateWhitakerSparseLevelSet::LevelSetPointer
typename LevelSetType::Pointer LevelSetPointer
Definition: itkUpdateWhitakerSparseLevelSet.h:64
itk::Index
Represent a n-dimensional index in a n-dimensional image.
Definition: itkIndex.h:68
itk::LevelSetSparseImage::LayerMapConstIterator
typename LayerMapType::const_iterator LayerMapConstIterator
Definition: itkLevelSetSparseImage.h:83
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelMapType
typename LevelSetType::LabelMapType LevelSetLabelMapType
Definition: itkUpdateWhitakerSparseLevelSet.h:68
itkNeighborhoodAlgorithm.h
itk::UpdateWhitakerSparseLevelSet::EquationContainerType
TEquationContainer EquationContainerType
Definition: itkUpdateWhitakerSparseLevelSet.h:86
itk::LevelSetBase< Index< VDimension >, VDimension, TOutput, ImageBase< VDimension > >::OutputRealType
typename NumericTraits< OutputType >::RealType OutputRealType
Definition: itkLevelSetBase.h:61
itk::UpdateWhitakerSparseLevelSet::NodePairType
std::pair< LevelSetInputType, LevelSetOutputType > NodePairType
Definition: itkUpdateWhitakerSparseLevelSet.h:198
itk::LevelSetSparseImage::LabelObjectLineType
typename LabelObjectType::LineType LabelObjectLineType
Definition: itkLevelSetSparseImage.h:70
itk::LevelSetSparseImage::LayerMapType
std::map< LayerIdType, LayerType > LayerMapType
Definition: itkLevelSetSparseImage.h:81
itkWhitakerSparseLevelSetImage.h
itk::LabelImageToLabelMapFilter
convert a labeled image to a label collection image
Definition: itkLabelImageToLabelMapFilter.h:49
itkDiscreteLevelSetImage.h
itk::UpdateWhitakerSparseLevelSet::EquationContainerPointer
typename EquationContainerType::Pointer EquationContainerPointer
Definition: itkUpdateWhitakerSparseLevelSet.h:87
itkImage.h
itk::LevelSetSparseImage::LayerIdType
int8_t LayerIdType
Definition: itkLevelSetSparseImage.h:64
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerIterator
typename LevelSetType::LayerIterator LevelSetLayerIterator
Definition: itkUpdateWhitakerSparseLevelSet.h:78
itk::LevelSetSparseImage::LabelMapPointer
typename LabelMapType::Pointer LabelMapPointer
Definition: itkLevelSetSparseImage.h:73
itk::SmartPointer< Self >
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerMapIterator
typename LevelSetType::LayerMapIterator LevelSetLayerMapIterator
Definition: itkUpdateWhitakerSparseLevelSet.h:83
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelObjectType
typename LevelSetType::LabelObjectType LevelSetLabelObjectType
Definition: itkUpdateWhitakerSparseLevelSet.h:71
itkImageRegionIteratorWithIndex.h
itk::ShapedNeighborhoodIterator
A neighborhood iterator which can take on an arbitrary shape.
Definition: itkShapedNeighborhoodIterator.h:150
itk::UpdateWhitakerSparseLevelSet
Base class for updating the level-set function.
Definition: itkUpdateWhitakerSparseLevelSet.h:43
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelObjectPointer
typename LevelSetType::LabelObjectPointer LevelSetLabelObjectPointer
Definition: itkUpdateWhitakerSparseLevelSet.h:72
itk::LabelMap
Templated n-dimensional image to store labeled objects.
Definition: itkLabelMap.h:70
itk::LevelSetSparseImage::LabelObjectPointer
typename LabelObjectType::Pointer LabelObjectPointer
Definition: itkLevelSetSparseImage.h:68
itk::LevelSetSparseImage::LayerMapIterator
typename LayerMapType::iterator LayerMapIterator
Definition: itkLevelSetSparseImage.h:82
itk::LevelSetSparseImage::LayerType
std::map< InputType, OutputType, Functor::LexicographicCompare > LayerType
Definition: itkLevelSetSparseImage.h:77
itk::LightObject
Light weight base class for most itk classes.
Definition: itkLightObject.h:55
itk::LabelObject
The base class for the representation of a labeled binary object in an image.
Definition: itkLabelObject.h:65
itk::LevelSetSparseImage::LabelObjectLengthType
typename LabelObjectType::LengthType LabelObjectLengthType
Definition: itkLevelSetSparseImage.h:69
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerConstIterator
typename LevelSetType::LayerConstIterator LevelSetLayerConstIterator
Definition: itkUpdateWhitakerSparseLevelSet.h:79
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelObjectLineType
typename LevelSetType::LabelObjectLineType LevelSetLabelObjectLineType
Definition: itkUpdateWhitakerSparseLevelSet.h:74
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerType
typename LevelSetType::LayerType LevelSetLayerType
Definition: itkUpdateWhitakerSparseLevelSet.h:77
itk::LevelSetSparseImage::LayerIterator
typename LayerType::iterator LayerIterator
Definition: itkLevelSetSparseImage.h:78
itk::UpdateWhitakerSparseLevelSet::LevelSetInputType
typename LevelSetType::InputType LevelSetInputType
Definition: itkUpdateWhitakerSparseLevelSet.h:65
itk::UpdateWhitakerSparseLevelSet::TermContainerPointer
typename EquationContainerType::TermContainerPointer TermContainerPointer
Definition: itkUpdateWhitakerSparseLevelSet.h:90
itk::UpdateWhitakerSparseLevelSet::LabelImagePointer
typename LabelImageType::Pointer LabelImagePointer
Definition: itkUpdateWhitakerSparseLevelSet.h:93
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerMapConstIterator
typename LevelSetType::LayerMapConstIterator LevelSetLayerMapConstIterator
Definition: itkUpdateWhitakerSparseLevelSet.h:84
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelObjectLengthType
typename LevelSetType::LabelObjectLengthType LevelSetLabelObjectLengthType
Definition: itkUpdateWhitakerSparseLevelSet.h:73
itk::LevelSetSparseImage::LayerConstIterator
typename LayerType::const_iterator LayerConstIterator
Definition: itkLevelSetSparseImage.h:79
itkShapedNeighborhoodIterator.h
itk::UpdateWhitakerSparseLevelSet::LevelSetLabelMapPointer
typename LevelSetType::LabelMapPointer LevelSetLabelMapPointer
Definition: itkUpdateWhitakerSparseLevelSet.h:69
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnatomicalOrientation.h:29
itk::UpdateWhitakerSparseLevelSet::TermContainerType
typename EquationContainerType::TermContainerType TermContainerType
Definition: itkUpdateWhitakerSparseLevelSet.h:89
itk::LabelMapToLabelImageFilter
Converts a LabelMap to a labeled image.
Definition: itkLabelMapToLabelImageFilter.h:46
itk::Object
Base class for most ITK classes.
Definition: itkObject.h:61
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerIdType
typename LevelSetType::LayerIdType LevelSetLayerIdType
Definition: itkUpdateWhitakerSparseLevelSet.h:76
itk::Image
Templated n-dimensional image class.
Definition: itkImage.h:88
itk::UpdateWhitakerSparseLevelSet::LevelSetLayerMapType
typename LevelSetType::LayerMapType LevelSetLayerMapType
Definition: itkUpdateWhitakerSparseLevelSet.h:82
itk::UpdateWhitakerSparseLevelSet::LevelSetOutputRealType
typename LevelSetType::OutputRealType LevelSetOutputRealType
Definition: itkUpdateWhitakerSparseLevelSet.h:80
itkLabelMapToLabelImageFilter.h
itk::LevelSetImage< Index< VDimension >, VDimension, TOutput >::OffsetType
typename ImageBaseType::OffsetType OffsetType
Definition: itkLevelSetImage.h:62
itk::IdentifierType
SizeValueType IdentifierType
Definition: itkIntTypes.h:90
itk::UpdateWhitakerSparseLevelSet::LevelSetOffsetType
typename LevelSetType::OffsetType LevelSetOffsetType
Definition: itkUpdateWhitakerSparseLevelSet.h:66
itk::UpdateWhitakerSparseLevelSet::LevelSetOutputType
TLevelSetValueType LevelSetOutputType
Definition: itkUpdateWhitakerSparseLevelSet.h:61