DGtal 1.3.0
Loading...
Searching...
No Matches
testLambdaMST3D.cpp
Go to the documentation of this file.
1
31#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
46using namespace std;
47using namespace DGtal;
48using namespace Z3i;
49using namespace functors;
50
52// Functions for testing class LambdaMST3D.
54
55class testLambdaMST3D
56{
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;
65 typedef ArithmeticalDSSComputer < ConstIterator2D, int, 8 > SegmentComputer2D;
66 typedef SaturatedSegmentation<SegmentComputer2D> Segmentation2D;
67private:
68 Range curve;
69public:
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() );
84 LambdaMST3D < Segmentation > lmst64;
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() );
94 LambdaMST3D < Segmentation > lmst64;
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() );
105 LambdaMST3D < Segmentation, Lambda64Function, DSSLengthLessEqualFilter < SegmentComputer > > lmst64;
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() );
117 LambdaMST3D < Segmentation, LambdaSinFromPiFunction > lmst;
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() );
128 LambdaMST3D < Segmentation, LambdaSinFromPiFunction > lmst;
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() );
139 LambdaMST3D < Segmentation, LambdaExponentialFunction > lmst;
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() );
150 LambdaMST3D < Segmentation, LambdaExponentialFunction > lmst;
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
163int 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 attach(Alias< TSegmentation > segmentComputer)
RealVector eval(const Point &p)
void init(ConstIterator itb, ConstIterator ite)
Aim: Computes the saturated segmentation, that is the whole set of maximal segments within a range gi...
Aim: model of CBidirectionalRangeFromPoint that adapts any range of elements bounded by two iterators...
void beginBlock(const std::string &keyword="")
std::ostream & emphase()
std::ostream & error()
double endBlock()
MyDigitalSurface::ConstIterator ConstIterator
DGtal is the top-level namespace which contains all DGtal functions and types.
Trace trace
Definition: Common.h:154
STL namespace.
static std::vector< TPoint > getPointsFromInputStream(std::istream &in, std::vector< unsigned int > aVectPosition=std::vector< unsigned int >())
int main()
Definition: testBits.cpp:56