|
DGtal 1.4.2
|
Aim: Implementation of the linear in time Power map construction. More...
#include <DGtal/geometry/volumes/distance/PowerMap.h>
Public Types | |
| typedef TWeightImage | WeightImage |
| Copy of the distance image types. | |
| typedef TWeightImage::Value | Weight |
| typedef WeightImage::Domain::Space | Space |
| typedef Space::Vector | Vector |
| typedef Space::Point | Point |
| typedef Space::Dimension | Dimension |
| typedef Space::Size | Size |
| typedef Space::Point::Coordinate | Abscissa |
| typedef TImageContainer::Domain | Domain |
| Definition of the underlying domain type. | |
| typedef TPowerSeparableMetric | PowerSeparableMetric |
| We construct the type associated to the separable metric. | |
| typedef TImageContainer | OutputImage |
| Type of resulting image. | |
| typedef Vector | Value |
| Definition of the image model value type. | |
| typedef OutputImage::ConstRange | ConstRange |
| Definition of the image value type. | |
| typedef PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer > | Self |
| Self type. | |
| typedef std::array< bool, Space::dimension > | PeriodicitySpec |
| Periodicity specification type. | |
Public Member Functions | |
| BOOST_CONCEPT_ASSERT ((concepts::CImage< TImageContainer >)) | |
| BOOST_CONCEPT_ASSERT ((concepts::CConstImage< TWeightImage >)) | |
| BOOST_CONCEPT_ASSERT ((concepts::CPowerSeparableMetric< TPowerSeparableMetric >)) | |
| BOOST_STATIC_ASSERT ((boost::is_same< typename TWeightImage::Domain::Space, typename TImageContainer::Domain::Space >::value)) | |
| BOOST_STATIC_ASSERT ((boost::is_same< typename TWeightImage::Domain::Space::Vector, typename TImageContainer::Value >::value)) | |
| BOOST_STATIC_ASSERT ((boost::is_same< HyperRectDomain< typename TWeightImage::Domain::Space >, typename TImageContainer::Domain >::value)) | |
| PowerMap (ConstAlias< Domain > aDomain, ConstAlias< WeightImage > aWeightImage, ConstAlias< PowerSeparableMetric > aMetric) | |
| PowerMap (ConstAlias< Domain > aDomain, ConstAlias< WeightImage > aWeightImage, ConstAlias< PowerSeparableMetric > aMetric, PeriodicitySpec const &aPeriodicitySpec) | |
| PowerMap ()=delete | |
| ~PowerMap ()=default | |
| Self & | operator= (const Self &aOtherPowerMap)=default |
| const Domain & | domain () const |
| ConstRange | constRange () const |
| Value | operator() (const Point &aPoint) const |
| const PowerSeparableMetric * | metricPtr () const |
| const WeightImage * | weightImagePtr () const |
| PeriodicitySpec const & | getPeriodicitySpec () const |
| bool | isPeriodic (const Dimension n) const |
| Point | projectPoint (Point aPoint) const |
| void | selfDisplay (std::ostream &out) const |
Protected Attributes | |
| const PowerSeparableMetric * | myMetricPtr |
| Pointer to the separable metric instance. | |
| CountedPtr< OutputImage > | myImagePtr |
| Power map image. | |
| const WeightImage * | myWeightImagePtr |
| Pointer to the point predicate. | |
| PeriodicitySpec | myPeriodicitySpec |
| Periodicity along each dimension. | |
Private Member Functions | |
| void | compute () |
| void | computeOtherSteps (const Dimension dim) const |
| void | computeOtherStep1D (const Point &row, const Dimension dim) const |
| Point | projectPoint (Point aPoint, const Dimension aMaxDim) const |
| Point::Coordinate | projectCoordinate (typename Point::Coordinate aCoordinate, const Dimension aDim) const |
Private Attributes | |
| const Domain * | myDomainPtr |
| Pointer to the computation domain. | |
| Point | myLowerBoundCopy |
| Copy of the image lower bound. | |
| Point | myUpperBoundCopy |
| Copy of the image lower bound. | |
| Point | myInfinity |
| Value to act as a +infinity value. | |
| std::vector< Dimension > | myPeriodicityIndex |
| Index of the periodic dimensions. | |
| Point | myDomainExtent |
| Domain extent. | |
Aim: Implementation of the linear in time Power map construction.
Description of template class 'PowerMap'
The algorithm uses a separable process to construct Power maps as discussed in [27]. Along periodic dimensions, the algorithm is adapted following [34].
Given an image mapping points to values and a power separable metric, the class computes the power map of the weighted points specified in the image. Similarly to the VoronoiMap class, if two points are equi-distant according to the power distance, this power map will only consider one of them.
By default, the domain is considered non-periodic but per-dimension periodicity can be specified in the constructor. When the domain has periodic dimensions, the closest point coordinates B to a given point A may not be between the lower and upper bounds of the domain, in such a way that the non-periodic power distance between A and B is equal to their power distance considering the periodicity.
If the separable metric has a complexity of O(h) for its "hiddenByPower" predicate, the overall Power map construction algorithm is in \( O(h.d.n^d)\) for \( n^d\) domains (see class constructor). For Euclidean the \( l_2\) metric, the overall computation is in \( O(d.n^d)\), which is optimal.
This class is a model of concepts::CConstImage.
| TWeightImage | model of CConstImage |
| TPowerSeparableMetric | model of concepts::CPowerSeparableMetric |
| TImageContainer | any model of CImage to store the PowerMap (default: ImageContainerBySTLVector). The space of the image container and the TSpace should match. Furthermore the container value type must be TSpace::Vector. Lastly, the domain of the container must be HyperRectDomain. |
Definition at line 110 of file PowerMap.h.
| Space::Point::Coordinate DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Abscissa |
Definition at line 127 of file PowerMap.h.
| OutputImage::ConstRange DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::ConstRange |
Definition of the image value type.
Definition at line 153 of file PowerMap.h.
| Space::Dimension DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Dimension |
Definition at line 125 of file PowerMap.h.
| TImageContainer::Domain DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Domain |
Definition of the underlying domain type.
Definition at line 142 of file PowerMap.h.
| TImageContainer DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::OutputImage |
Type of resulting image.
Definition at line 148 of file PowerMap.h.
| std::array< bool, Space::dimension > DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::PeriodicitySpec |
Periodicity specification type.
Definition at line 159 of file PowerMap.h.
| Space::Point DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Point |
Definition at line 124 of file PowerMap.h.
| TPowerSeparableMetric DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::PowerSeparableMetric |
We construct the type associated to the separable metric.
Definition at line 145 of file PowerMap.h.
| PowerMap<TWeightImage, TPowerSeparableMetric, TImageContainer> DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Self |
Self type.
Definition at line 156 of file PowerMap.h.
| Space::Size DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Size |
Definition at line 126 of file PowerMap.h.
| WeightImage::Domain::Space DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Space |
Definition at line 122 of file PowerMap.h.
| Vector DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Value |
Definition of the image model value type.
Definition at line 151 of file PowerMap.h.
| Space::Vector DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Vector |
Definition at line 123 of file PowerMap.h.
| TWeightImage::Value DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::Weight |
Definition at line 121 of file PowerMap.h.
| TWeightImage DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::WeightImage |
Copy of the distance image types.
Definition at line 120 of file PowerMap.h.
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::PowerMap | ( | ConstAlias< Domain > | aDomain, |
| ConstAlias< WeightImage > | aWeightImage, | ||
| ConstAlias< PowerSeparableMetric > | aMetric ) |
Constructor.
This constructor computes the Power Map of a set of point sites using a SeparableMetric metric on a non-periodic domain.
The method associates to each point satisfying the foreground predicate, the closest site for which the predicate is false.
All parameters are aliased in this class.
| aDomain | defines the (hyper-rectangular) domain on which the computation is performed. |
| aWeightImage | an image returning the weight for some points |
| aMetric | a power seprable metric instance. |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::PowerMap | ( | ConstAlias< Domain > | aDomain, |
| ConstAlias< WeightImage > | aWeightImage, | ||
| ConstAlias< PowerSeparableMetric > | aMetric, | ||
| PeriodicitySpec const & | aPeriodicitySpec ) |
Constructor with periodicity specification.
This constructor computes the Power Map of a set of point sites using a SeparableMetric metric, on a domain with specified periodicity.
The method associates to each point satisfying the foreground predicate, the closest site for which the predicate is false.
All parameters are aliased in this class.
| aDomain | defines the (hyper-rectangular) domain on which the computation is performed. |
| aWeightImage | an image returning the weight for some points. |
| aMetric | a power separable metric instance. |
| aPeriodicitySpec | an array of size equal to the space dimension where the i-th value is true if the i-th dimension of the space is periodic, false otherwise. |
|
delete |
Disable default constructor.
|
default |
Default destructor
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_CONCEPT_ASSERT | ( | (concepts::CConstImage< TWeightImage >) | ) |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_CONCEPT_ASSERT | ( | (concepts::CImage< TImageContainer >) | ) |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_CONCEPT_ASSERT | ( | (concepts::CPowerSeparableMetric< TPowerSeparableMetric >) | ) |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_STATIC_ASSERT | ( | (boost::is_same< HyperRectDomain< typename TWeightImage::Domain::Space >, typename TImageContainer::Domain >::value) | ) |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_STATIC_ASSERT | ( | (boost::is_same< typename TWeightImage::Domain::Space, typename TImageContainer::Domain::Space >::value) | ) |
| DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::BOOST_STATIC_ASSERT | ( | (boost::is_same< typename TWeightImage::Domain::Space::Vector, typename TImageContainer::Value >::value) | ) |
|
private |
Compute the Power Map of a set of point sites using a SeparableMetric metric. The method associates to each point satisfying the foreground predicate, the closest site for which the predicate is false. This algorithm is O(d.|domain size|).
|
private |
Given a voronoi map valid at dimension dim-1, this method updates the map to make it consistent at dimension dim along the 1D span starting at row along the dimension dim.
| row | starting point of the 1D process. |
| dim | dimension of the update. |
|
private |
Compute the other steps of the separable Power map.
| dim | the dimension to process |
|
inline |
Returns a const range on the Power map values.
Definition at line 249 of file PowerMap.h.
References DGtal::ImageContainerBySTLVector< TDomain, TValue >::constRange(), and DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myImagePtr.
|
inline |
Returns a reference (const) to the Power map domain.
Definition at line 239 of file PowerMap.h.
References DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myDomainPtr.
Referenced by checkPowerMap(), and DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::domain().
|
inline |
Periodicity specification.
Definition at line 284 of file PowerMap.h.
References DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myPeriodicitySpec.
|
inline |
Periodicity specification along one dimensions.
| [in] | n | the dimension index. |
true if the n-th dimension is periodic, false otherwise. Definition at line 295 of file PowerMap.h.
References DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myPeriodicitySpec.
Referenced by checkPowerMap().
|
inline |
Definition at line 267 of file PowerMap.h.
References DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myMetricPtr.
Referenced by checkPowerMap(), and DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::metricPtr().
|
inline |
Access to a Power value (a.k.a. vector to the closest site) at a point.
| aPoint | the point to probe. |
Definition at line 259 of file PowerMap.h.
References aPoint(), and DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myImagePtr.
|
default |
Assignment operator from another Power map.
| aOtherPowerMap | another instance of Self |
|
private |
Project a coordinate into the domain, taking into account the periodicity.
| aCoordinate | the coordinate. |
| aDim | dimension of the coordinate. |
| Point DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::projectPoint | ( | Point | aPoint | ) | const |
Project point coordinates into the domain, taking into account the periodicity.
| aPoint | the point to project |
Referenced by checkPowerMap().
|
private |
Project point coordinates into the domain, taking into account the periodicity up to a fixed dimension.
| aPoint | the point to project |
| aMaxDim | maximal dimension along which to project the coordinates. |
| void DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::selfDisplay | ( | std::ostream & | out | ) | const |
Self Display method.
| out | output stream |
Referenced by DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::selfDisplay().
|
inline |
Definition at line 275 of file PowerMap.h.
References DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::myWeightImagePtr.
Referenced by checkPowerMap().
|
private |
Domain extent.
Definition at line 401 of file PowerMap.h.
|
private |
Pointer to the computation domain.
Definition at line 386 of file PowerMap.h.
Referenced by DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::domain().
|
protected |
Power map image.
Definition at line 408 of file PowerMap.h.
Referenced by DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::constRange(), DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::getPowerVector(), DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::operator()(), and DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::operator()().
|
private |
Value to act as a +infinity value.
Definition at line 395 of file PowerMap.h.
|
private |
Copy of the image lower bound.
Definition at line 389 of file PowerMap.h.
|
protected |
Pointer to the separable metric instance.
Definition at line 405 of file PowerMap.h.
Referenced by DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::metricPtr(), and DGtal::ReverseDistanceTransformation< TWeightImage, TPSeparableMetric, TImageContainer >::operator()().
|
private |
Index of the periodic dimensions.
Definition at line 398 of file PowerMap.h.
|
protected |
Periodicity along each dimension.
Definition at line 414 of file PowerMap.h.
Referenced by DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::getPeriodicitySpec(), and DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::isPeriodic().
|
private |
Copy of the image lower bound.
Definition at line 392 of file PowerMap.h.
|
protected |
Pointer to the point predicate.
Definition at line 411 of file PowerMap.h.
Referenced by DGtal::PowerMap< TWeightImage, TPowerSeparableMetric, TImageContainer >::weightImagePtr().