ITK  4.3.0
Insight Segmentation and Registration Toolkit
itkFastMarchingBase.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
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  * http://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 __itkFastMarchingBase_h
20 #define __itkFastMarchingBase_h
21 
22 #include "itkIntTypes.h"
24 #include "itkFastMarchingTraits.h"
25 
26 #include <queue>
27 #include <functional>
28 
29 namespace itk
30 {
101 template< class TInput, class TOutput >
103  {
104 public:
106  typedef typename Traits::SuperclassType SuperclassType;
108 
113 
115  typedef typename Traits::InputDomainType InputDomainType;
116  typedef typename Traits::InputDomainPointer InputDomainPointer;
117  typedef typename Traits::InputPixelType InputPixelType;
118 
120  typedef typename Traits::OutputDomainType OutputDomainType;
121  typedef typename Traits::OutputDomainPointer OutputDomainPointer;
122  typedef typename Traits::OutputPixelType OutputPixelType;
123 
125  typedef typename Traits::NodeType NodeType;
126 
128  typedef typename Traits::NodePairType NodePairType;
129  typedef typename Traits::NodePairContainerType NodePairContainerType;
130  typedef typename Traits::NodePairContainerPointer NodePairContainerPointer;
131  typedef typename Traits::NodePairContainerConstIterator
133 
134  typedef typename Traits::LabelType LabelType;
135 
139 
140  /*
141  typedef long ElementIdentifier;
142 
143  typedef MinPriorityQueueElementWrapper< NodeType,
144  OutputPixelType,
145  ElementIdentifier > PriorityQueueElementType;
146 
147  typedef PriorityQueueContainer< PriorityQueueElementType,
148  PriorityQueueElementType,
149  OutputPixelType,
150  ElementIdentifier > PriorityQueueType;
151  typedef typename PriorityQueueType::Pointer PriorityQueuePointer;
152  */
153 
156 
158  Nothing = 0,
159 
162 
165 
168  itkSetMacro( TopologyCheck, TopologyCheckType );
169  itkGetConstReferenceMacro( TopologyCheck, TopologyCheckType );
171 
173  itkSetObjectMacro( TrialPoints, NodePairContainerType );
174  itkGetObjectMacro( TrialPoints, NodePairContainerType );
176 
178  itkSetObjectMacro( AlivePoints, NodePairContainerType );
179  itkGetObjectMacro( AlivePoints, NodePairContainerType );
181 
183  itkSetObjectMacro( ProcessedPoints, NodePairContainerType );
184  itkGetObjectMacro( ProcessedPoints, NodePairContainerType );
186 
188  itkSetObjectMacro( ForbiddenPoints, NodePairContainerType );
189  itkGetObjectMacro( ForbiddenPoints, NodePairContainerType );
191 
193  itkGetObjectMacro( StoppingCriterion, StoppingCriterionType );
194  itkSetObjectMacro( StoppingCriterion, StoppingCriterionType );
195 
197  itkGetMacro( SpeedConstant, double );
198  itkSetMacro( SpeedConstant, double );
199 
201  itkGetMacro( NormalizationFactor, double );
202  itkSetMacro( NormalizationFactor, double );
203 
205  itkGetMacro( TargetReachedValue, OutputPixelType );
206 
211  itkSetMacro(CollectPoints, bool);
212 
214  itkGetConstReferenceMacro(CollectPoints, bool);
215  itkBooleanMacro(CollectPoints);
217 
218 protected:
219 
222 
224  virtual ~FastMarchingBase();
225 
227 
231 
235 
240 
242 
243  //PriorityQueuePointer m_Heap;
244  typedef std::vector< NodePairType > HeapContainerType;
245  typedef std::greater< NodePairType > NodeComparerType;
246 
247  typedef std::priority_queue<
248  NodeType,
252 
254 
256 
258  virtual IdentifierType GetTotalNumberOfNodes() const = 0;
259 
261  virtual const OutputPixelType GetOutputValue( OutputDomainType* oDomain,
262  const NodeType& iNode ) const = 0;
263 
265  virtual void SetOutputValue( OutputDomainType* oDomain,
266  const NodeType& iNode,
267  const OutputPixelType& iValue ) = 0;
268 
272  virtual unsigned char
273  GetLabelValueForGivenNode( const NodeType& iNode ) const = 0;
274 
278  virtual void SetLabelValueForGivenNode( const NodeType& iNode,
279  const LabelType& iLabel ) = 0;
280 
285  virtual void UpdateNeighbors( OutputDomainType* oDomain,
286  const NodeType& iNode ) = 0;
287 
292  virtual void UpdateValue( OutputDomainType* oDomain,
293  const NodeType& iNode ) = 0;
294 
299  virtual bool CheckTopology( OutputDomainType* oDomain,
300  const NodeType& iNode ) = 0;
301 
303  void Initialize( OutputDomainType* oDomain );
304 
306  virtual void InitializeOutput( OutputDomainType* oDomain ) = 0;
307 
309  void GenerateData();
310 
312  void PrintSelf(std::ostream & os, Indent indent) const;
313 
314 private:
315  FastMarchingBase( const Self& );
316  void operator = ( const Self& );
317  };
318 }
319 
320 #include "itkFastMarchingBase.hxx"
321 #endif
322