DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
DistanceTransformation.h
1 
17 #pragma once
18 
34 #if defined(DistanceTransformation_RECURSES)
35 #error Recursive header files inclusion detected in DistanceTransformation.h
36 #else // defined(DistanceTransformation_RECURSES)
37 
38 #define DistanceTransformation_RECURSES
39 
40 #if !defined DistanceTransformation_h
41 
42 #define DistanceTransformation_h
43 
45 // Inclusions
46 #include <iostream>
47 #include <vector>
48 #include "DGtal/base/Common.h"
49 #include "DGtal/kernel/NumberTraits.h"
50 #include "DGtal/kernel/CSignedInteger.h"
51 #include "DGtal/images/CImage.h"
52 #include "DGtal/kernel/CPointPredicate.h"
53 #include "DGtal/images/imagesSetsUtils/ImageFromSet.h"
54 
55 #include "DGtal/geometry/volumes/distance/SeparableMetricHelper.h"
56 #include "DGtal/kernel/domains/HyperRectDomain.h"
58 
59 namespace DGtal
60 {
61 
63  // template class DistanceTransformation
90  template < typename TSpace,
91  typename TPointPredicate,
92  DGtal::uint32_t p,
93  typename IntegerLong = DGtal::int64_t>
95  {
96 
97  public:
98 
102 
103 
105  typedef TSpace Space;
106 
108  typedef TPointPredicate PointPredicate;
109 
112 
115  IntegerLong > OutputImage;
116 
117  typedef typename Space::Vector Vector;
118  typedef typename Space::Point Point;
119  typedef typename Space::Dimension Dimension;
120  typedef typename Space::Size Size;
121  typedef typename Space::Point::Coordinate Abscissa;
122 
125 
126 
130  DistanceTransformation(const Domain & aDomain,
131  const PointPredicate & predicate);
132 
137 
138  public:
139 
152  OutputImage compute( ) ;
153 
154 
164  bool checkTypesValidity () const;
165 
166 
167  // ------------------- Private functions ------------------------
168  private:
169 
170 
176  void computeFirstStep(OutputImage & output) const;
177 
184  void computeFirstStep1D (OutputImage & output,
185  const Point &startingPoint) const;
186 
195  void computeOtherSteps(const OutputImage & inputImage,
196  OutputImage & output,
197  const Dimension dim) const;
198 
209  void computeOtherStep1D (const OutputImage & input,
210  OutputImage & output,
211  const Point &row,
212  const Size dim,
213  Abscissa s[], Abscissa t[]) const;
214 
215 
216  // ------------------- protected methods ------------------------
217  protected:
218 
224 
225 
226  // ------------------- Private members ------------------------
227  private:
228 
231 
233  const Domain & myDomain;
234 
237 
240 
243 
246 
249 
251  IntegerLong myInfinity;
252 
253 
254  }; // end of class DistanceTransformation
255 
256 } // namespace DGtal
257 
258 
260 // Includes inline functions.
261 #include "DGtal/geometry/volumes/distance/DistanceTransformation.ih"
262 
263 // //
265 
266 #endif // !defined DistanceTransformation_h
267 
268 #undef DistanceTransformation_RECURSES
269 #endif // else defined(DistanceTransformation_RECURSES)