DGtal  1.5.beta
DGtal::CBDRSolver< TSpace, TDomain > Struct Template Reference

Aim: 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 > BijectiveReflections
 
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, BijectiveReflectionsErrorRealVectors
 
typedef Reflection< TSpace > DigitizedReflection
 
typedef std::vector< std::vector< typename TSpace::RealPoint > > VectorField
 
typedef std::vector< std::pair< std::vector< GAVector< TSpace > >, GAVector< TSpace > > > BijectiveSearchTree
 

Public Member Functions

 CBDRSolver (const double rotAngle, const typename TDomain::Point center, const int km, const int NSamples)
 
void setPolicy (const Policy< TSpace, TDomain, BijectiveReflections > customPolicy)
 
std::vector< Reflection< TSpace > > solve (const TDomain &points, NBijectiveGenerator< TSpace > &nbijectiveVectors, std::vector< BijectiveSearchTree > &vecBijectiveSearchTree, const Policy< TSpace, TDomain, BijectiveReflections > &policy)
 

Protected Attributes

int kmax
 
int N
 
double my_angle
 number of sample rotation angle More...
 
TDomain::Point my_center
 

Detailed Description

template<typename TSpace, typename TDomain>
struct DGtal::CBDRSolver< TSpace, TDomain >

Aim: 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 120 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< TSpace, TDomain >::bijectiveReflect

Definition at line 123 of file CBDRSolver.h.

◆ BijectiveReflections

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

Definition at line 121 of file CBDRSolver.h.

◆ BijectiveSearchTree

template<typename TSpace , typename TDomain >
typedef std::vector<std::pair<std::vector<GAVector<TSpace> >,GAVector<TSpace> > > DGtal::CBDRSolver< TSpace, TDomain >::BijectiveSearchTree

Definition at line 127 of file CBDRSolver.h.

◆ DigitizedReflection

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

Definition at line 125 of file CBDRSolver.h.

◆ ErrorRealVectors

template<typename TSpace , typename TDomain >
typedef ErrorVectorField<TSpace,TDomain,BijectiveReflections> DGtal::CBDRSolver< TSpace, TDomain >::ErrorRealVectors

Definition at line 124 of file CBDRSolver.h.

◆ RealRotation

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

Definition at line 122 of file CBDRSolver.h.

◆ VectorField

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

Definition at line 126 of file CBDRSolver.h.

Constructor & Destructor Documentation

◆ CBDRSolver()

template<typename TSpace , typename TDomain >
DGtal::CBDRSolver< TSpace, TDomain >::CBDRSolver ( const double  rotAngle,
const typename TDomain::Point  center,
const int  km,
const int  NSamples 
)
inline

Definition at line 129 of file CBDRSolver.h.

129 :my_angle(rotAngle),my_center(center),kmax(km),N(NSamples){}
TDomain::Point my_center
Definition: CBDRSolver.h:169
double my_angle
number of sample rotation angle
Definition: CBDRSolver.h:168

Member Function Documentation

◆ setPolicy()

template<typename TSpace , typename TDomain >
void DGtal::CBDRSolver< TSpace, TDomain >::setPolicy ( const Policy< TSpace, TDomain, BijectiveReflections customPolicy)
inline

Definition at line 131 of file CBDRSolver.h.

131 {my_policy(customPolicy);}

◆ solve()

template<typename TSpace , typename TDomain >
std::vector<Reflection<TSpace> > DGtal::CBDRSolver< TSpace, TDomain >::solve ( const TDomain &  points,
NBijectiveGenerator< TSpace > &  nbijectiveVectors,
std::vector< BijectiveSearchTree > &  vecBijectiveSearchTree,
const Policy< TSpace, TDomain, BijectiveReflections > &  policy 
)
inline

assume the sorted table was already generated either from a file or through one of the function of NbictiveGenerator

Definition at line 133 of file CBDRSolver.h.

133  {
135  std::vector<GAVector<TSpace>> bestParam;
136  double errorMin = points.myUpperBound[0];
137  for(size_t nReflection = 0 ; nReflection < vecBijectiveSearchTree.size();++nReflection){
138  typename std::vector<std::pair<std::vector<GAVector<TSpace>>,GAVector<TSpace>>>::iterator lowerAngle;
139  typename std::vector<std::pair<std::vector<GAVector<TSpace>>,GAVector<TSpace>>>::iterator upperAngle;
140  int numberOfCompositions=N;
141 
142  nbijectiveVectors.getKNearestBijectiveComposition(
143  vecBijectiveSearchTree[nReflection],
144  lowerAngle,
145  upperAngle,
146  numberOfCompositions,
147  my_angle);
148 
149 
150  CBDRSolver_GAvec<TSpace,TDomain> rotationSolver(kmax,my_angle,my_center);
151  std::pair<std::vector<GAVector<TSpace>>,double> bestParam_Error =rotationSolver.outputCompositionReflection(points,lowerAngle,upperAngle,policy);
152  if(bestParam_Error.second < errorMin) {
153  bestParam = bestParam_Error.first;
154  errorMin = bestParam_Error.second;
155  }
156  }
157  std::vector<DigitizedReflection> bestGAVectors;
158  for(GAVector<TSpace> indexB:bestParam){
159  bestGAVectors.push_back(DigitizedReflection(indexB));
160  }
161  return bestGAVectors;
162  }
Reflection< TSpace > DigitizedReflection
Definition: CBDRSolver.h:125

References DGtal::NBijectiveGenerator< TSpace, TInputValue >::getKNearestBijectiveComposition(), DGtal::CBDRSolver< TSpace, TDomain >::kmax, DGtal::CBDRSolver< TSpace, TDomain >::my_angle, DGtal::CBDRSolver< TSpace, TDomain >::my_center, DGtal::CBDRSolver< TSpace, TDomain >::N, and DGtal::CBDRSolver_GAvec< TSpace, TDomain >::outputCompositionReflection().

Referenced by DGtal::CBDR< TSpace, TInputValue, TOutputValue >::initCBDRVec(), DGtal::CBDR< TSpace, TInputValue, TOutputValue >::initFastPrecomputationTable(), and DGtal::CBDR< TSpace, TInputValue, TOutputValue >::set_angle().

Field Documentation

◆ kmax

template<typename TSpace , typename TDomain >
int DGtal::CBDRSolver< TSpace, TDomain >::kmax
protected

Definition at line 166 of file CBDRSolver.h.

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

◆ my_angle

template<typename TSpace , typename TDomain >
double DGtal::CBDRSolver< TSpace, TDomain >::my_angle
protected

number of sample rotation angle

Definition at line 168 of file CBDRSolver.h.

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

◆ my_center

template<typename TSpace , typename TDomain >
TDomain::Point DGtal::CBDRSolver< TSpace, TDomain >::my_center
protected

Definition at line 169 of file CBDRSolver.h.

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

◆ N

template<typename TSpace , typename TDomain >
int DGtal::CBDRSolver< TSpace, TDomain >::N
protected

Definition at line 167 of file CBDRSolver.h.

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


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