DGtal  1.5.beta
DGtal::CBDRSolver_GAvec< TSpace, TDomain > Class Template Reference

CBDR solver, use a policy to choose the composition of digitized reflections that minimises an error. More...

#include <DGtal/images/bijectiveRotations/CBDRSolver.h>

Public Types

typedef CBDR_naiverotation< TSpace, typename TSpace::RealPointBijectiveReflections
 
typedef functors::ForwardRigidTransformation2D< TSpace, typename TSpace::RealPoint, typename TSpace::RealPoint, functors::IdentityRealRotation
 
typedef std::vector< std::pair< std::vector< GAVector< TSpace > >, GAVector< TSpace > > > bijectiveReflect
 
typedef ErrorVectorField< TSpace, TDomain, typename TSpace::RealPointErrorRealVectors
 
typedef Reflection< TSpace > DigitizedReflection
 
typedef std::vector< std::vector< typename TSpace::RealPoint > > VectorField
 

Public Member Functions

 CBDRSolver_GAvec (const size_t km, const double rotAngle, const typename TDomain::Point center)
 
std::pair< std::vector< GAVector< TSpace > >, double > outputCompositionReflection (const TDomain &set2d, typename bijectiveReflect::iterator &lowerAngle, typename bijectiveReflect::iterator &upperAngle, const Policy< TSpace, TDomain, BijectiveReflections > &policy)
 

Data Fields

NBijectiveGenerator< TSpace, typename TSpace::RealPointnBijectiveGenerator
 
double my_angle
 
TDomain::Point my_center
 

Detailed Description

template<typename TSpace, typename TDomain>
class DGtal::CBDRSolver_GAvec< TSpace, TDomain >

CBDR solver, use a policy to choose the composition of digitized reflections that minimises an error.

Description of template struct 'CBDR Solver'

Template Parameters
TSpacea 2 dimensional space.
TDomaina 2 dimensional domain.

Definition at line 51 of file CBDRSolver.h.

Member Typedef Documentation

◆ bijectiveReflect

template<typename TSpace , typename TDomain >
typedef std::vector<std::pair<std::vector<GAVector<TSpace> >,GAVector<TSpace> > > DGtal::CBDRSolver_GAvec< TSpace, TDomain >::bijectiveReflect

Definition at line 55 of file CBDRSolver.h.

◆ BijectiveReflections

template<typename TSpace , typename TDomain >
typedef CBDR_naiverotation<TSpace,typename TSpace::RealPoint> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::BijectiveReflections

Definition at line 53 of file CBDRSolver.h.

◆ DigitizedReflection

template<typename TSpace , typename TDomain >
typedef Reflection<TSpace> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::DigitizedReflection

Definition at line 57 of file CBDRSolver.h.

◆ ErrorRealVectors

template<typename TSpace , typename TDomain >
typedef ErrorVectorField<TSpace,TDomain,typename TSpace::RealPoint> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::ErrorRealVectors

Definition at line 56 of file CBDRSolver.h.

◆ RealRotation

template<typename TSpace , typename TDomain >
typedef functors::ForwardRigidTransformation2D<TSpace,typename TSpace::RealPoint,typename TSpace::RealPoint,functors::Identity> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::RealRotation

Definition at line 54 of file CBDRSolver.h.

◆ VectorField

template<typename TSpace , typename TDomain >
typedef std::vector<std::vector<typename TSpace::RealPoint> > DGtal::CBDRSolver_GAvec< TSpace, TDomain >::VectorField

Definition at line 58 of file CBDRSolver.h.

Constructor & Destructor Documentation

◆ CBDRSolver_GAvec()

template<typename TSpace , typename TDomain >
DGtal::CBDRSolver_GAvec< TSpace, TDomain >::CBDRSolver_GAvec ( const size_t  km,
const double  rotAngle,
const typename TDomain::Point  center 
)
inline

Definition at line 61 of file CBDRSolver.h.

61 :nBijectiveGenerator(km),my_angle(rotAngle),my_center(center){}
TDomain::Point my_center
Definition: CBDRSolver.h:109
NBijectiveGenerator< TSpace, typename TSpace::RealPoint > nBijectiveGenerator
Definition: CBDRSolver.h:107

Member Function Documentation

◆ outputCompositionReflection()

template<typename TSpace , typename TDomain >
std::pair<std::vector<GAVector<TSpace> >,double> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::outputCompositionReflection ( const TDomain &  set2d,
typename bijectiveReflect::iterator &  lowerAngle,
typename bijectiveReflect::iterator &  upperAngle,
const Policy< TSpace, TDomain, BijectiveReflections > &  policy 
)
inline

find the composition of bijective reflections that minimize either Linf, L2 or Lcontinuity of error vector field given by the policy

Returns
{vector that minimizes an error given by policy, the error}

Definition at line 66 of file CBDRSolver.h.

69  {
70 
71  // first error
72  auto it = lowerAngle;
73 
74  typename bijectiveReflect::iterator itMinError;
75 
76  std::vector<DigitizedReflection> bijectiveReflections;
77  std::vector<GAVector<TSpace>> firstReflectionsIndex=(*lowerAngle).first;
78 
79  for(size_t i = 0 ;i<firstReflectionsIndex.size();++i){
80  bijectiveReflections.push_back(DigitizedReflection(firstReflectionsIndex[i]));//firstReflectionsIndex.size()-1-
81  }
82 
83  CBDR_naiverotation<TSpace> reflections(bijectiveReflections);
84 
85  // finally get the average error
86  double minError = policy.evaluate(set2d, reflections,my_angle, my_center); //outputError(firsterrors,policy); // should now be policy
87 
88  itMinError = lowerAngle;
89 
90  for(it = lowerAngle+1 ; it != upperAngle ; ++it ){
91  std::vector<DigitizedReflection> currentbijectiveReflections;
92  std::vector<GAVector<TSpace>> currentReflectionsIndex=(*it).first;
93  for(size_t i = 0 ;i<currentReflectionsIndex.size();++i){
94  currentbijectiveReflections.push_back(DigitizedReflection(currentReflectionsIndex[i]));//nBijectiveGenerator.BijectiveVectors[currentReflectionsIndex[i]] // currentReflectionsIndex.size()-1-
95  }
96  CBDR_naiverotation<TSpace> currentreflections(currentbijectiveReflections);
97 
98  // // finally get the error
99  double error = policy.evaluate(set2d, currentreflections,my_angle, my_center);
100  if(fabs(error)<fabs(minError)){
101  itMinError = it;
102  minError = error;
103  }
104  }
105  return {(*itMinError).first,minError};
106  }
Reflection< TSpace > DigitizedReflection
Definition: CBDRSolver.h:57
MessageStream error

References DGtal::Policy< TSpace, TDomain, BijectiveRotation >::evaluate(), DGtal::CBDRSolver_GAvec< TSpace, TDomain >::my_angle, and DGtal::CBDRSolver_GAvec< TSpace, TDomain >::my_center.

Referenced by DGtal::CBDRSolver< TSpace, TDomain >::solve().

Field Documentation

◆ my_angle

template<typename TSpace , typename TDomain >
double DGtal::CBDRSolver_GAvec< TSpace, TDomain >::my_angle

◆ my_center

template<typename TSpace , typename TDomain >
TDomain::Point DGtal::CBDRSolver_GAvec< TSpace, TDomain >::my_center

◆ nBijectiveGenerator

template<typename TSpace , typename TDomain >
NBijectiveGenerator<TSpace,typename TSpace::RealPoint> DGtal::CBDRSolver_GAvec< TSpace, TDomain >::nBijectiveGenerator

Definition at line 107 of file CBDRSolver.h.


The documentation for this class was generated from the following file: