KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
edge_segment.h
Go to the documentation of this file.
1 /* $Id: edge_segment.h 18301 2014-11-26 19:17:13Z ksimek $ */
2 
15 // vim: tabstop=4 shiftwidth=4 foldmethod=marker
16 
17 #ifndef KJB_EDGE_CPP_EDGE_SEGMENT_H
18 #define KJB_EDGE_CPP_EDGE_SEGMENT_H
19 
20 #include "edge/edge_base.h"
21 #include "gr_cpp/gr_line_segment.h"
22 #include "edge_cpp/edge.h"
23 #include <iosfwd>
24 
25 namespace kjb {
26 
36 class Edge_segment : public Line_segment
37 {
38 public:
39 
46  const kjb::Edge & iedge,
47  bool use_num_pts_as_length = true
48  )
49  : Line_segment(),
50  edge_pts(iedge)
51  {
52  fit_to_edge_points_with_least_squares(iedge, use_num_pts_as_length);
53  }
54 
56  const kjb::Edge & iedge,
57  const kjb::Line_segment & ls
58  )
59  : Line_segment(ls),
60  edge_pts(iedge)
61  {
62  least_squares_fitting_error = 0.0;
63  strength = 0.0;
64  }
65 
71  const kjb::Edge & iedge,
72  std::istream& in
73  );
74 
76  : Line_segment(src),
77  least_squares_fitting_error(src.least_squares_fitting_error),
78  strength(src.strength),
79  edge_pts(src.edge_pts)
80  {}
81 
83  {
85  least_squares_fitting_error = src.least_squares_fitting_error;
86  strength = src.strength;
87  edge_pts = src.edge_pts;
88  return (*this);
89  }
90 
92 
93  bool operator==(const Edge_segment & edg)
94  {
95  if(!Line_segment::operator==(edg))
96  {
97  return false;
98  }
99  if(fabs(strength - edg.strength) > FLT_EPSILON)
100  {
101  return false;
102  }
103  if( fabs(least_squares_fitting_error - edg.least_squares_fitting_error)
104  > FLT_EPSILON
105  )
106  {
107  return false;
108  }
109 
110  return true;
111  }
112 
114  inline const kjb::Edge & get_edge()
115  {
116  return edge_pts;
117  }
118 
120  inline kjb::Edge_point get_edge_point(unsigned int i)
121  {
122  return edge_pts.get_edge_point(i);
123  }
124 
129  inline double get_least_squares_fitting_error() const
130  {
131  return least_squares_fitting_error;
132  }
133 
135  inline double get_strength() const
136  {
137  return strength;
138  }
139 
141  void read(std::istream& in);
142 
144  void write(std::ostream& out) const;
145 
146  friend std::ostream& operator<<(std::ostream& out, const Edge_segment& es);
147 
151  bool is_overlapping
152  (
153  const Edge_segment & es,
154  double collinear_threshold = 0.12,
155  double overlapping_threshold = 10
156  ) const;
157 
162  void set_edge(const kjb::Edge & iedge_pts)
163  {
164  edge_pts = iedge_pts;
165  }
166 
167 
168 private:
169 
174  void fit_to_edge_points_with_least_squares(
175  const kjb::Edge & edge,
176  bool use_num_pts_as_length = true
177  );
178 
182  double least_squares_fitting_error;
183 
185  double strength;
186 
188  kjb::Edge edge_pts;
189 };
190 
191 std::ostream& operator<<(std::ostream& out, const Edge_segment& es);
192 
193 
194 } // namespace kjb
195 #endif /* KJB_EDGE_CPP_EDGE_SEGMENT_H */
Line_segment & operator=(const Line_segment &ls)
Assignment operator.
Definition: gr_line_segment.cpp:115
Definition: edge_segment.h:36
double get_strength() const
returns the average gradient magnitude of this edge
Definition: edge_segment.h:135
Edge_segment(const Edge_segment &src)
Definition: edge_segment.h:75
const kjb::Edge & get_edge()
returns the set of edge points this line segment was fit to
Definition: edge_segment.h:114
Edge_segment(const kjb::Edge &iedge, bool use_num_pts_as_length=true)
Definition: edge_segment.h:45
~Edge_segment()
Definition: edge_segment.h:91
kjb::Edge_point get_edge_point(unsigned int i)
Definition: edge_segment.h:120
friend std::ostream & operator<<(std::ostream &out, const Edge_segment &es)
Edge_segment & operator=(const Edge_segment &src)
Definition: edge_segment.h:82
double get_least_squares_fitting_error() const
returns the sum of square residuals between the edge points and the fitted line segment.
Definition: edge_segment.h:129
Definition: edge.h:150
void read(std::istream &in)
Reads this Edge_segment from an input stream.
Definition: edge_segment.cpp:194
bool operator==(const Edge_segment &edg)
Definition: edge_segment.h:93
std::ofstream & operator<<(std::ofstream &out, const Quaternion &q)
Definition: turntable_camera.cpp:77
Edge_point get_edge_point(unsigned int i) const
returns the ith edge point of this edge
Definition: edge.h:184
Definition: edge.h:48
Edge_segment(const kjb::Edge &iedge, const kjb::Line_segment &ls)
Definition: edge_segment.h:55
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
Declarations for Line segment class.
void set_edge(const kjb::Edge &iedge_pts)
Sets the pointer to the edge points this edge_segment was fit to.
Definition: edge_segment.h:162
Class to manipulate a line segment The class is parametrized in terms the position of the centre...
Definition: gr_line_segment.h:62
void write(std::ostream &out) const
Writes this Edge_segment to an output stream.
Definition: edge_segment.cpp:232
bool is_overlapping(const Edge_segment &es, double collinear_threshold=0.12, double overlapping_threshold=10) const
Returns true if the edge_segments are overlapping, ie one is mostly contained in the other...
Definition: edge_segment.cpp:250