DGtal 1.4.2
Loading...
Searching...
No Matches
VoronoiMapComplete.h
1
17#pragma once
18
34#if defined(VoronoiMapComplete_RECURSES)
35#error Recursive header files inclusion detected in VoronoiMapComplete.h
36#else // defined(VoronoiMapComplete_RECURSES)
38#define VoronoiMapComplete_RECURSES
39
40#if !defined VoronoiMapComplete_h
42#define VoronoiMapComplete_h
43
45// Inclusions
46#include <iostream>
47#include <vector>
48#include <array>
49#include <set>
50#include "DGtal/base/Common.h"
51#include "DGtal/base/CountedPtr.h"
52#include "DGtal/images/ImageContainerBySTLVector.h"
53#include "DGtal/images/CImage.h"
54#include "DGtal/kernel/CPointPredicate.h"
55#include "DGtal/kernel/domains/HyperRectDomain.h"
56#include "DGtal/geometry/volumes/distance/CSeparableMetric.h"
57#include "DGtal/kernel/domains/HyperRectDomain.h"
58#include "DGtal/base/ConstAlias.h"
60
61namespace DGtal
62{
63
65 // template class VoronoiMapComplete
128 template < typename TSpace,
129 typename TPointPredicate,
130 typename TSeparableMetric,
131 typename TImageContainer =
132 ImageContainerBySTLVector<HyperRectDomain<TSpace>,
133 std::set<typename TSpace::Vector> >
134 >
136 {
137
138 public:
143
145 BOOST_STATIC_ASSERT ((boost::is_same< typename TSpace::Point,
146 typename TPointPredicate::Point >::value ));
147
148 //ImageContainer::Domain::Space must match with TSpace
149 BOOST_STATIC_ASSERT ((boost::is_same< TSpace,
150 typename TImageContainer::Domain::Space >::value ));
151
152 //ImageContainer value type must be std::vector<TSpace::Vector>
153 BOOST_STATIC_ASSERT ((boost::is_same< std::set<typename TSpace::Vector>,
154 typename TImageContainer::Value >::value ));
155
156 //ImageContainer domain type must be HyperRectangular
158 typename TImageContainer::Domain >::value ));
159
161 typedef TSpace Space;
162
164 typedef TPointPredicate PointPredicate;
165
168
170 typedef TSeparableMetric SeparableMetric;
171
174
175 typedef typename Space::Vector Vector;
176 typedef typename Space::Point Point;
177 typedef typename Space::Dimension Dimension;
178 typedef typename Space::Size Size;
179 typedef typename Space::Point::Coordinate Abscissa;
180
183
185 typedef typename OutputImage::Value Value;
186
189
191 typedef VoronoiMapComplete< TSpace, TPointPredicate,
192 TSeparableMetric,TImageContainer > Self;
193
194
196 typedef std::array< bool, Space::dimension > PeriodicitySpec;
197
220
248 PeriodicitySpec const & aPeriodicitySpec);
253
258
259 public:
260 // ------------------- ConstImage model ------------------------
261
268 Self & operator=(const Self &aOtherVoronoiMap ) = default;
269
274 const Domain & domain() const
275 {
276 return *myDomainPtr;
277 }
278
284 {
285 return myImagePtr->constRange();
286 }
287
295 {
296 return myImagePtr->operator()(aPoint);
297 }
298
302 const SeparableMetric* metric() const
303 {
304 return myMetricPtr;
305 }
306
312 {
313 return myPeriodicitySpec;
314 }
315
321 bool isPeriodic( const Dimension n ) const
322 {
323 return myPeriodicitySpec[ n ];
324 }
325
337
343 void selfDisplay ( std::ostream & out ) const;
344
345 // ------------------- Private functions ------------------------
346 private:
347
354 void compute ( ) ;
355
361 void computeOtherSteps(const Dimension dim) const;
371 void computeOtherStep1D (const Point &row,
372 const Dimension dim) const;
373
385 typename Point::Coordinate projectCoordinate( typename Point::Coordinate aCoordinate, const Dimension aDim ) const;
386
387 // ------------------- Private members ------------------------
388 private:
389
392
395
398
401
404
406 std::vector< Dimension > myPeriodicityIndex; // Could be boost::static_vector but it needs Boost >= 1.54.
407
410
411 protected:
412
415
418
421
422 }; // end of class VoronoiMapComplete
423
430 template <typename S, typename P,
431 typename Sep, typename TI>
432 std::ostream&
433 operator<< ( std::ostream & out, const VoronoiMapComplete<S,P,Sep,TI> & object );
434
435
436} // namespace DGtal
437
438
440// Includes inline functions.
441#include "DGtal/geometry/volumes/distance/VoronoiMapComplete.ih"
442
443// //
445
446#endif // !defined VoronoiMap_h
447
448#undef VoronoiMapComplete_RECURSES
449#endif // else defined(VoronoiMapComplete_RECURSES)
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition ConstAlias.h:187
Aim: Smart pointer based on reference counts.
Definition CountedPtr.h:80
Aim: Parallelepidec region of a digital space, model of a 'CDomain'.
Aim: model of CConstBidirectionalRangeFromPoint that adapts any range of elements bounded by two iter...
size_t Size
Type used to represent sizes in the digital space.
Definition SpaceND.h:107
DGtal::Dimension Dimension
Copy of the type used for the dimension.
Definition SpaceND.h:129
Aim: Implementation of the linear in time Voronoi map construction.
CountedPtr< OutputImage > myImagePtr
Voronoi map image.
const Domain & domain() const
TImageContainer OutputImage
Type of resulting image.
Value operator()(const Point &aPoint) const
Point myDomainExtent
Domain extent.
Point::Coordinate projectCoordinate(typename Point::Coordinate aCoordinate, const Dimension aDim) const
BOOST_STATIC_ASSERT((boost::is_same< HyperRectDomain< TSpace >, typename TImageContainer::Domain >::value))
bool isPeriodic(const Dimension n) const
void selfDisplay(std::ostream &out) const
std::vector< Dimension > myPeriodicityIndex
Index of the periodic dimensions.
TSeparableMetric SeparableMetric
Definition of the separable metric type.
VoronoiMapComplete(ConstAlias< Domain > aDomain, ConstAlias< PointPredicate > predicate, ConstAlias< SeparableMetric > aMetric, PeriodicitySpec const &aPeriodicitySpec)
std::array< bool, Space::dimension > PeriodicitySpec
Periodicity specification type.
BOOST_CONCEPT_ASSERT((concepts::CSpace< TSpace >))
Space::Point::Coordinate Abscissa
Point myLowerBoundCopy
Copy of the image lower bound.
BOOST_STATIC_ASSERT((boost::is_same< TSpace, typename TImageContainer::Domain::Space >::value))
OutputImage::ConstRange ConstRange
Definition of the image value type.
BOOST_STATIC_ASSERT((boost::is_same< typename TSpace::Point, typename TPointPredicate::Point >::value))
Both Space points and PointPredicate points must be the same.
PeriodicitySpec const & getPeriodicitySpec() const
BOOST_CONCEPT_ASSERT((concepts::CSeparableMetric< TSeparableMetric >))
void computeOtherStep1D(const Point &row, const Dimension dim) const
const SeparableMetric * metric() const
const PointPredicate * myPointPredicatePtr
Pointer to the point predicate.
const Domain * myDomainPtr
Pointer to the computation domain.
TImageContainer::Domain Domain
Definition of the underlying domain type.
VoronoiMapComplete< TSpace, TPointPredicate, TSeparableMetric, TImageContainer > Self
Self type.
Point myInfinity
Value to act as a +infinity value.
BOOST_STATIC_ASSERT((boost::is_same< std::set< typename TSpace::Vector >, typename TImageContainer::Value >::value))
DGtal::int64_t IntegerLong
Large integer type for SeparableMetricHelper construction.
const SeparableMetric * myMetricPtr
Pointer to the separable metric instance.
TSpace Space
Copy of the space type.
BOOST_CONCEPT_ASSERT((concepts::CPointPredicate< TPointPredicate >))
Point projectPoint(Point aPoint) const
void computeOtherSteps(const Dimension dim) const
BOOST_CONCEPT_ASSERT((concepts::CImage< TImageContainer >))
OutputImage::Value Value
Definition of the image value type.
VoronoiMapComplete(ConstAlias< Domain > aDomain, ConstAlias< PointPredicate > predicate, ConstAlias< SeparableMetric > aMetric)
TPointPredicate PointPredicate
Copy of the point predicate type.
Self & operator=(const Self &aOtherVoronoiMap)=default
Point myUpperBoundCopy
Copy of the image lower bound.
PeriodicitySpec myPeriodicitySpec
Periodicity along each dimension.
DGtal is the top-level namespace which contains all DGtal functions and types.
boost::int64_t int64_t
signed 94-bit integer.
Definition BasicTypes.h:74
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
Aim: Defines the concept describing a read/write image, having an output iterator.
Definition CImage.h:103
Aim: Defines a predicate on a point.
Aim: defines the concept of separable metrics.
Aim: Defines the concept describing a digital space, ie a cartesian product of integer lines.
Definition CSpace.h:106
const Point aPoint(3, 4)
ImageContainerBySTLVector< HyperRectDomain< Z2i::Space >, std::unordered_set< Z2i::Point > > TImageContainer