1 // This is brl/bseg/sdet/tests/test_sel.cxx
2
3 #include <iostream>
4 #include <cmath>
5 #include <vector>
6 #include <cstdlib>
7 #include <string>
8 #include "testlib/testlib_test.h"
9 #ifdef _MSC_VER
10 # include "vcl_msvc_warnings.h"
11 #endif
12 #include "vnl/vnl_math.h"
13 #include <sdet/sdet_curve_model.h>
14 #include <sdet/sdet_sel.h>
15
16 //: Test the symbolic edge linker methods
MAIN(test_sel)17 MAIN( test_sel )
18 {
19 double tolerance = 1e-3;
20 bool test_passed = true;
21
22 //*******************************************************
23 START (" Test sdet_edgel class");
24 //sdet_edgel constructors
25 sdet_edgel* eA = new sdet_edgel(vgl_point_2d<double>(0.0,0.0), 0.0);
26 sdet_edgel* eB = new sdet_edgel(vgl_point_2d<double>(1.0,0.0), 0.0);
27 sdet_edgel* eC = new sdet_edgel(vgl_point_2d<double>(2.0,0.0), 0.0);
28
29 TEST("Constructor", &eA!=nullptr, true);
30
31 //*******************************************************
32 START (" Test sdet_ES_curve_model class");
33
34 //sdet_ES_curve_model constructors
35 sdet_ES_curve_model es1(eA, eB, eA, 0.1, 0.1, 1.0, 0.5, 0.5, false);
36 sdet_ES_curve_model es2(eA, eB, eB, 0.1, 0.1, 1.0, 0.5, 0.5, false);
37 sdet_ES_curve_model es3(eA, eC, eA, 0.1, 0.1, 1.0, 0.5, 0.5, false);
38
39 //ground truth curve bundle eA-eB at eA
40 const double k_range_gt[] = {-0.0008, -0.7983, 0.0008, 0.7983 };
41 const double gamma_range_gt[] = {-0.5942, 1.7910, 0.5942, -1.7910};
42
43 for (unsigned i=0; i<es1.cv_bundle[0].size(); i++){
44 test_passed = test_passed && std::fabs(es1.cv_bundle[0][i].x() - k_range_gt[i])<tolerance
45 && std::fabs(es1.cv_bundle[0][i].y() - gamma_range_gt[i])<tolerance;
46 }
47 TEST("Compute curve bundle from(eA-eB) at eA", test_passed, true);
48
49 const double k_range_gt2[] = {-0.0008, 0.7984, 0.0008, -0.7984 };
50 const double gamma_range_gt2[] = {0.5941, 1.7910, -0.5941, -1.7910};
51
52 for (unsigned i=0; i<es2.cv_bundle[0].size(); i++){
53 test_passed = test_passed && std::fabs(es2.cv_bundle[0][i].x() - k_range_gt2[i])<tolerance
54 && std::fabs(es2.cv_bundle[0][i].y() - gamma_range_gt2[i])<tolerance;
55 }
56 TEST("Compute curve bundle from(eA-eB) at eB", test_passed, true);
57
58 //ground truth eA-eC
59 const double k_range_gt3[] = { 0.0498, -0.2496, -0.0498, 0.2496 };
60 const double gamma_range_gt3[] = {-0.1492, 0.2990, 0.1492, -0.2990};
61
62 for (unsigned i=0; i<es3.cv_bundle[0].size(); i++){
63 test_passed = test_passed && std::fabs(es3.cv_bundle[0][i].x() - k_range_gt3[i])<tolerance
64 && std::fabs(es3.cv_bundle[0][i].y() - gamma_range_gt3[i])<tolerance;
65 }
66 TEST("Compute curve bundle from a pair of edgels(eA-eC)", test_passed, true);
67
68
69 START (" Test sdet_sel class");
70
71 //construct an edgemap first
72 sdet_edgemap_sptr edgemap = new sdet_edgemap(100, 100);
73 edgemap->insert(eA);
74 edgemap->insert(eB);
75 edgemap->insert(eC);
76
77 //construct other required classes
78 sdet_curvelet_map cvlet_map;
79 sdet_edgel_link_graph edge_link_graph;
80 sdet_curve_fragment_graph curve_frag_graph;
81
82 //sdet_sel constructors
83 sdet_sel<sdet_ES_curve_model> edge_linker(edgemap, cvlet_map, edge_link_graph, curve_frag_graph);
84
85 TEST("Constructor", &edge_linker != nullptr, true);
86
87 //*******************************************************
88
89
90 SUMMARY();
91 }
92