28 #if defined(CBDRSOLVER_RECURSES)
29 #error Recursive header files inclusion detected in CBDRSolver.h
32 #define CBDRSOLVER_RECURSES
34 #if !defined CBDRSOLVER_h
40 #include <DGtal/images/RigidTransformation2D.h>
42 #include "NBijectiveReflectionGenerator.h"
50 template<
typename TSpace,
typename TDomain>
58 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
67 typename bijectiveReflect::iterator& lowerAngle,
68 typename bijectiveReflect::iterator& upperAngle,
74 typename bijectiveReflect::iterator itMinError;
76 std::vector<DigitizedReflection> bijectiveReflections;
77 std::vector<GAVector<TSpace>> firstReflectionsIndex=(*lowerAngle).first;
79 for(
size_t i = 0 ;i<firstReflectionsIndex.size();++i){
88 itMinError = lowerAngle;
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){
100 if(fabs(error)<fabs(minError)){
105 return {(*itMinError).first,minError};
119 template<
typename TSpace,
typename TDomain>
126 typedef std::vector<std::vector<typename TSpace::RealPoint>>
VectorField;
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;
143 vecBijectiveSearchTree[nReflection],
146 numberOfCompositions,
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;
157 std::vector<DigitizedReflection> bestGAVectors;
161 return bestGAVectors;
176 #undef CBDRSOLVER_RECURSES
CBDR solver, use a policy to choose the composition of digitized reflections that minimises an error.
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)
Reflection< TSpace > DigitizedReflection
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
CBDR_naiverotation< TSpace, typename TSpace::RealPoint > BijectiveReflections
functors::ForwardRigidTransformation2D< TSpace, typename TSpace::RealPoint, typename TSpace::RealPoint, functors::Identity > RealRotation
std::vector< std::pair< std::vector< GAVector< TSpace > >, GAVector< TSpace > > > bijectiveReflect
ErrorVectorField< TSpace, TDomain, typename TSpace::RealPoint > ErrorRealVectors
NBijectiveGenerator< TSpace, typename TSpace::RealPoint > nBijectiveGenerator
CBDRSolver_GAvec(const size_t km, const double rotAngle, const typename TDomain::Point center)
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: CBDR solver, use a policy to choose the composition of digitized reflections that minimises an e...
Reflection< TSpace > DigitizedReflection
CBDRSolver(const double rotAngle, const typename TDomain::Point center, const int km, const int NSamples)
std::vector< std::pair< std::vector< GAVector< TSpace > >, GAVector< TSpace > > > bijectiveReflect
void setPolicy(const Policy< TSpace, TDomain, BijectiveReflections > customPolicy)
functors::ForwardRigidTransformation2D< TSpace, typename TSpace::RealPoint, typename TSpace::RealPoint, functors::Identity > RealRotation
double my_angle
number of sample rotation angle
ErrorVectorField< TSpace, TDomain, BijectiveReflections > ErrorRealVectors
std::vector< Reflection< TSpace > > solve(const TDomain &points, NBijectiveGenerator< TSpace > &nbijectiveVectors, std::vector< BijectiveSearchTree > &vecBijectiveSearchTree, const Policy< TSpace, TDomain, BijectiveReflections > &policy)
CBDR_naiverotation< TSpace > BijectiveReflections
std::vector< std::vector< typename TSpace::RealPoint > > VectorField
std::vector< std::pair< std::vector< GAVector< TSpace > >, GAVector< TSpace > > > BijectiveSearchTree
void getKNearestBijectiveComposition(std::vector< std::pair< std::vector< GAVector< TSpace >>, GAVector< TSpace >>> &vecBijNormals, typename std::vector< std::pair< std::vector< GAVector< TSpace >>, GAVector< TSpace >>>::iterator &lowerBound, typename std::vector< std::pair< std::vector< GAVector< TSpace >>, GAVector< TSpace >>>::iterator &upperBound, const int K, const double targetAngle)
virtual double evaluate(const TDomain &set2d, const BijectiveRotation &reflections, double my_angle, typename TSpace::Point my_center) const =0