DGtal  1.0.0
testLambdaMST3D.cpp
Go to the documentation of this file.
1 
30 #include <iostream>
32 #include <fstream>
33 #include <vector>
34 #include <iterator>
35 #include "DGtal/base/Common.h"
36 #include "ConfigTest.h"
37 #include "DGtal/helpers/StdDefs.h"
38 #include "DGtal/io/readers/PointListReader.h"
39 #include "DGtal/geometry/curves/Naive3DDSSComputer.h"
40 #include "DGtal/geometry/curves/estimation/LambdaMST3D.h"
41 #include "DGtal/geometry/curves/estimation/FunctorsLambdaMST.h"
42 #include "DGtal/geometry/curves/SaturatedSegmentation.h"
43 
45 
46 using namespace std;
47 using namespace DGtal;
48 using namespace Z3i;
49 using namespace functors;
50 
52 // Functions for testing class LambdaMST3D.
54 
55 class testLambdaMST3D
56 {
57  typedef DGtal::Z3i::Point Point;
58  typedef DGtal::Z2i::Point Point2D;
59  typedef std::vector < Point > Range;
60  typedef std::list < Point2D > Range2D;
61  typedef Range::const_iterator ConstIterator;
62  typedef Range2D::const_iterator ConstIterator2D;
63  typedef Naive3DDSSComputer < ConstIterator, int, 8 > SegmentComputer;
64  typedef SaturatedSegmentation<SegmentComputer> Segmentation;
66  typedef SaturatedSegmentation<SegmentComputer2D> Segmentation2D;
67 private:
68  Range curve;
69 public:
70  testLambdaMST3D ()
71  {
72  fstream inputStream;
73  inputStream.open ( (testPath + "samples/sinus3D.dat").c_str(), std::ios::in );
74  try {
76  if ( curve.size() == 0) throw IOException();
77  } catch (DGtal::IOException & ioe) {
78  trace.error() << "Size is null." << endl;
79  }
80  }
81  bool lambda64ByPoint ()
82  {
83  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
85  lmst64.attach ( segmenter );
86  lmst64.init ( curve.begin(), curve.end() );
87  for ( ConstIterator it = curve.begin(); it != curve.end(); ++it )
88  lmst64.eval ( *it );
89  return true;
90  }
91  bool lambda64()
92  {
93  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
95  lmst64.attach ( segmenter );
96  lmst64.init ( curve.begin(), curve.end() );
97  vector < RealVector > tangent;
98  lmst64.eval < back_insert_iterator< vector < RealVector > > > ( curve.begin(), curve.end(), back_insert_iterator< vector < RealVector > > ( tangent ) );
99  return true;
100  }
101 
102  bool lambda64Filtered()
103  {
104  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
106  lmst64.attach ( segmenter );
107  lmst64.getDSSFilter ( ).init ( 1 );
108  lmst64.init ( curve.begin(), curve.end() );
109  for ( ConstIterator it = curve.begin(); it != curve.end(); ++it )
110  lmst64.eval ( *it );
111  return true;
112  }
113 
114  bool lambdaSinByPoint ()
115  {
116  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
118  lmst.attach ( segmenter );
119  lmst.init ( curve.begin(), curve.end() );
120  for ( ConstIterator it = curve.begin(); it != curve.end(); ++it )
121  lmst.eval ( *it );
122  return true;
123  }
124 
125  bool lambdaSin()
126  {
127  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
129  lmst.attach ( segmenter );
130  lmst.init ( curve.begin(), curve.end() );
131  vector < RealVector > tangent;
132  lmst.eval < back_insert_iterator< vector < RealVector > > > ( curve.begin(), curve.end(), back_insert_iterator< vector < RealVector > > ( tangent ) );
133  return true;
134  }
135 
136  bool lambdaExpByPoint ()
137  {
138  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
140  lmst.attach ( segmenter );
141  lmst.init ( curve.begin(), curve.end() );
142  for ( ConstIterator it = curve.begin(); it != curve.end(); ++it )
143  lmst.eval ( *it );
144  return true;
145  }
146 
147  bool lambdaExp()
148  {
149  Segmentation segmenter ( curve.begin(), curve.end(), SegmentComputer() );
151  lmst.attach ( segmenter );
152  lmst.init ( curve.begin(), curve.end() );
153  vector < RealVector > tangent;
154  lmst.eval < back_insert_iterator< vector < RealVector > > > ( curve.begin(), curve.end(), back_insert_iterator< vector < RealVector > > ( tangent ) );
155  return true;
156  }
157 };
158 
159 
161 // Standard services - public :
162 
163 int main( int , char** )
164 {
165  bool res = true;
166  testLambdaMST3D testLMST;
167  trace.beginBlock ( "Testing LambdaMST3D" );
168  trace.beginBlock ( "Testing point only calculation" );
169  res &= testLMST.lambda64ByPoint();
170  res &= testLMST.lambda64Filtered();
171  res &= testLMST.lambdaSinByPoint();
172  res &= testLMST.lambdaExpByPoint();
173  trace.endBlock();
174  trace.beginBlock ( "Testing calculation for whole curve" );
175  res &= testLMST.lambda64();
176  res &= testLMST.lambdaSin();
177  res &= testLMST.lambdaExp();
178  trace.endBlock();
179  trace.endBlock();
180  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
181  return res ? 0 : 1;
182 }
183 // //
void beginBlock(const std::string &keyword="")
MyDigitalSurface::ConstIterator ConstIterator
Trace trace
Definition: Common.h:144
Aim: Simplify creation of Lambda MST tangent estimator.
Definition: LambdaMST3D.h:209
double endBlock()
Aim: This class is a wrapper around ArithmeticalDSS that is devoted to the dynamic recognition of dig...
Aim: model of CBidirectionalRangeFromPoint that adapts any range of elements bounded by two iterators...
void attach(Alias< TSegmentation > segmentComputer)
std::ostream & emphase()
int main(int, char **)
Aim: Implements method to read a set of points represented in each line of a file.
DGtal is the top-level namespace which contains all DGtal functions and types.
MyPointD Point
Definition: testClone2.cpp:383
Aim: Dynamic recognition of a 3d-digital straight segment (DSS)
Aim: Computes the saturated segmentation, that is the whole set of maximal segments within a range gi...
std::ostream & error()