DGtal  1.3.beta
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;
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 // //
ConstIterator
MyDigitalSurface::ConstIterator ConstIterator
Definition: greedy-plane-segmentation-ex2.cpp:93
DGtal::Trace::endBlock
double endBlock()
DGtal::LambdaMST3DEstimator< Z3i::Space, DSSSegmentationComputer, TangentFromDSS3DFunctor< DSSSegmentationComputer::SegmentComputer, functors::Lambda64Function >, DSSMuteFilter< typename DSSSegmentationComputer::SegmentComputer > >::getDSSFilter
DSSMuteFilter< typename DSSSegmentationComputer::SegmentComputer > & getDSSFilter()
DGtal::ArithmeticalDSSComputer
Aim: This class is a wrapper around ArithmeticalDSS that is devoted to the dynamic recognition of dig...
Definition: ArithmeticalDSSComputer.h:86
DGtal::SimpleRandomAccessRangeFromPoint::begin
Iterator begin()
Definition: SimpleRandomAccessRangeFromPoint.h:203
SegmentComputer
ArithmeticalDSSComputer< std::vector< Z2i::Point >::const_iterator, int, 4 > SegmentComputer
Definition: testArithmeticalDSSComputerOnSurfels.cpp:55
DGtal::Trace::error
std::ostream & error()
DGtal::Trace::emphase
std::ostream & emphase()
DGtal::trace
Trace trace
Definition: Common.h:154
DGtal::Trace::beginBlock
void beginBlock(const std::string &keyword="")
DGtal::SimpleRandomAccessRangeFromPoint::end
Iterator end()
Definition: SimpleRandomAccessRangeFromPoint.h:243
DGtal::PointListReader
Aim: Implements method to read a set of points represented in each line of a file.
Definition: PointListReader.h:84
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
DGtal::SimpleRandomAccessRangeFromPoint
Aim: model of CBidirectionalRangeFromPoint that adapts any range of elements bounded by two iterators...
Definition: SimpleRandomAccessRangeFromPoint.h:73
DGtal::LambdaMST3DEstimator< Z3i::Space, DSSSegmentationComputer, TangentFromDSS3DFunctor< DSSSegmentationComputer::SegmentComputer, functors::Lambda64Function >, DSSMuteFilter< typename DSSSegmentationComputer::SegmentComputer > >::attach
void attach(Alias< DSSSegmentationComputer > segmentComputer)
DGtal::LambdaMST3DEstimator< Z3i::Space, DSSSegmentationComputer, TangentFromDSS3DFunctor< DSSSegmentationComputer::SegmentComputer, functors::Lambda64Function >, DSSMuteFilter< typename DSSSegmentationComputer::SegmentComputer > >::eval
RealVector eval(const Point &p)
DGtal::LambdaMST3D
Aim: Simplify creation of Lambda MST tangent estimator.
Definition: LambdaMST3D.h:209
DGtal::LambdaMST3DEstimator< Z3i::Space, DSSSegmentationComputer, TangentFromDSS3DFunctor< DSSSegmentationComputer::SegmentComputer, functors::Lambda64Function >, DSSMuteFilter< typename DSSSegmentationComputer::SegmentComputer > >::init
void init(ConstIterator itb, ConstIterator ite)
Range
Image::Range Range
Definition: testSimpleRandomAccessRangeFromPoint.cpp:46
Segmentation
SaturatedSegmentation< SegmentComputer > Segmentation
Definition: testArithmeticalDSSComputerOnSurfels.cpp:56
main
int main(int, char **)
Definition: testLambdaMST3D.cpp:163
DGtal::PointVector< dim, Integer >
DGtal::Naive3DDSSComputer
Aim: Dynamic recognition of a 3d-digital straight segment (DSS)
Definition: Naive3DDSSComputer.h:97
DGtal::SaturatedSegmentation
Aim: Computes the saturated segmentation, that is the whole set of maximal segments within a range gi...
Definition: SaturatedSegmentation.h:153
DGtal::IOException
Definition: Exceptions.h:52
Point
MyPointD Point
Definition: testClone2.cpp:383