34 #include "DGtal/base/Common.h"
36 #include "DGtal/shapes/Shapes.h"
37 #include "DGtal/shapes/ShapeFactory.h"
39 #include "DGtal/geometry/curves/estimation/TrueLocalEstimatorOnPoints.h"
41 #include "DGtal/geometry/curves/estimation/ParametricShapeCurvatureFunctor.h"
42 #include "DGtal/geometry/curves/estimation/ParametricShapeTangentFunctor.h"
43 #include "DGtal/geometry/curves/estimation/ParametricShapeArcLengthFunctor.h"
44 #include "DGtal/geometry/curves/estimation/MostCenteredMaximalSegmentEstimator.h"
45 #include "DGtal/geometry/curves/ArithmeticalDSS.h"
47 #include "DGtal/kernel/SpaceND.h"
48 #include "DGtal/kernel/domains/HyperRectDomain.h"
49 #include "DGtal/kernel/sets/DigitalSetSelector.h"
50 #include "DGtal/topology/KhalimskySpaceND.h"
51 #include "DGtal/topology/SurfelAdjacency.h"
52 #include "DGtal/topology/SurfelNeighborhood.h"
54 #include "DGtal/shapes/GaussDigitizer.h"
55 #include "DGtal/geometry/curves/GridCurve.h"
57 #include "DGtal/geometry/curves/estimation/CompareLocalEstimators.h"
60 #include "ConfigTest.h"
65 using namespace DGtal;
68 template <
typename Shape>
69 bool testCompareEstimator(
const std::string &name, Shape & aShape,
double h)
77 typedef Space::RealPoint RealPoint;
78 RealPoint xLow( -10.0, -10.0 );
79 RealPoint xUp( 10.0, 10.0 );
82 dig.init( xLow, xUp, h );
86 Domain domain = dig.getDomain();
90 bool ok = K.init( dig.getLowerBound(), dig.getUpperBound(), true );
93 std::cerr <<
"[testCompareEstimators]"
94 <<
" error in creating KSpace." << std::endl;
102 std::vector<Point> points;
108 typedef Range::ConstIterator ConstIteratorOnPoints;
112 unsigned int nbok = 0;
116 TrueCurvature curvatureEstimator;
117 TrueCurvature curvatureEstimatorBis;
119 curvatureEstimator.attach( &aShape );
120 curvatureEstimatorBis.init( h, r.
begin(), r.
end() );
121 curvatureEstimatorBis.attach( &aShape );
125 trace.
info()<<
"True curvature comparison at "<< *r.
begin() <<
" = "
126 << Comparator::compare(curvatureEstimator,curvatureEstimatorBis, r.
begin())
129 typename Comparator::OutputStatistic
error
130 =Comparator::compare(curvatureEstimator, curvatureEstimatorBis,
134 trace.
info() <<
"Nb samples= "<< error.samples()<<std::endl;
135 trace.
info() <<
"Error mean= "<< error.mean()<<std::endl;
136 trace.
info() <<
"Error max= "<< error.max()<<std::endl;
137 nbok += ( ( ( (
unsigned int)error.samples() ) == r.
size())
138 && (error.max() == 0) )
141 trace.
info() << nbok <<
"/" << nb << std::endl;
157 MSTangentEstimator tang2(sc, f);
159 tang1.init( h, r.
begin(), r.
end() );
160 tang1.attach( &aShape );
161 tang2.init( h, r.
begin(), r.
end() );
166 << ComparatorTan::compareVectors( tang1, tang2, r.
begin())
169 typename ComparatorTan::OutputVectorStatistic error2
170 =ComparatorTan::compareVectors(tang1, tang2,
174 trace.
info()<<
"Nb samples= "<< error2.samples()<<std::endl;
175 trace.
info()<<
"Error mean= "<< error2.mean()<<std::endl;
176 trace.
info()<<
"Error max= "<< error2.max()<<std::endl;
177 nbok += (error.samples() == r.
size())?1:0;
179 trace.
info() << nbok <<
"/" << nb << std::endl;
185 std::cerr <<
"[testCompareEstimator]"
186 <<
" error in finding a bel." << std::endl;
189 trace.
emphase() << ( ok ?
"Passed." :
"Error." ) << endl;
199 int main(
int argc,
char** argv )
203 for (
int i = 0; i < argc; ++i )
208 MyFlower flower( 0.5, -2.3, 5.0, 0.7, 6, 0.3 );
209 bool res = testCompareEstimator<MyFlower>(
"Flower", flower, 0.25);