KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
model_edge.h
Go to the documentation of this file.
1 /* $Id: model_edge.h 18278 2014-11-25 01:42:10Z ksimek $ */
35 /* =========================================================================== *
36  |
37  | Copyright (c) 1994-2010 by Kobus Barnard (author)
38  |
39  | Personal and educational use of this code is granted, provided that this
40  | header is kept intact, and that the authorship is not misrepresented, that
41  | its use is acknowledged in publications, and relevant papers are cited.
42  |
43  | For other use contact the author (kobus AT cs DOT arizona DOT edu).
44  |
45  | Please note that the code in this file has not necessarily been adequately
46  | tested. Naturally, there is no guarantee of performance, support, or fitness
47  | for any particular task. Nonetheless, I am interested in hearing about
48  | problems that you encounter.
49  |
50  | Author: Luca Del Pero
51  * =========================================================================== */
52 
53 #ifndef KJB_MODEL_EDGE_H_
54 #define KJB_MODEL_EDGE_H_
55 
56 #include <edge_cpp/line_segment.h>
57 
71 namespace kjb
72 {
73  class Model_edge : public Line_segment{
74 
75  public:
76 
85  Model_edge(double x1, double y1, double x2, double y2, bool isilhouette = false, bool isvisible = false, bool iflagged = false);
86 
93  Model_edge(const kjb::Vector & istart, const kjb::Vector & iend, bool isilhouette = false, bool isvisible = false, bool iflagged = false)
94  {
95  if(istart.size() < 2 || iend.size() < 2)
96  {
97  KJB_THROW_2(Illegal_argument, "Bad start and end points, expectin x and y coordinates");
98  }
99 
100  _degenerate = false;
101  if( (istart(0) == iend(0)) && (istart(1) == iend(1)) )
102  {
108  init_from_end_points(istart(0), istart(1), iend(0), iend(1) + FLT_EPSILON);
109  _degenerate = true;
110  }
111  else
112  {
113  init_from_end_points(istart(0), istart(1), iend(0), iend(1));
114  }
115  _silhouette = isilhouette;
116  _visible = isvisible;
117  _flagged = iflagged;
118  }
119 
124  Model_edge(const Model_edge & src) :
125  Line_segment(src), _silhouette(src._silhouette), _degenerate(src._degenerate), _visible(src._visible), _flagged(src._flagged)
126  {
127 
128  }
129 
135  {
137  _silhouette = src._silhouette;
138  _visible = src._visible;
139  _degenerate = src._degenerate;
140  _flagged = src._flagged;
141  return (*this);
142  }
143 
144  inline bool operator==(const Model_edge& model_edge) const
145  {
146  return (get_start() == model_edge.get_start() &&
147  get_end() == model_edge.get_end()) ||
148  (get_end() == model_edge.get_start() &&
149  get_start() == model_edge.get_end());
150  }
151 
153  void read(std::istream& in);
154 
156  void write(std::ostream& out) const;
157 
159  inline bool is_silhouette() const { return _silhouette; }
160 
162  inline bool is_visible() const { return _visible; }
163 
165  inline void set_silhouette(bool isilhouette) { _silhouette = isilhouette; }
166 
168  inline void set_flagged(bool iflagged) { _flagged = iflagged; }
169 
171  inline void set_visible(bool isvisible) { _visible = isvisible; }
172 
179  (
180  const Edge_segment& image_edge_segment,
181  double collinear_distance_threshold,
182  Vector& previous_center,
183  bool& mapped,
184  double noisy_length
185  );
186 
188  double get_detected_length();
189 
190  bool is_flagged() const
191  {
192  return _flagged;
193  }
194 
195  private:
196 
198  bool _silhouette;
199 
204  bool _degenerate;
205 
207  bool _visible;
208 
209  bool _flagged;
210 
212  std::vector<Line_segment> detected_segments;
213  };
214 }
215 
216 #endif /* KJB_MODEL_EDGE_H_ */
Line_segment & operator=(const Line_segment &ls)
Assignment operator.
Definition: gr_line_segment.cpp:115
Definition: edge_segment.h:36
Definition: model_edge.h:73
size_type size() const
Alias to get_length(). Required to comply with stl Container concept.
Definition: m_vector.h:510
Model_edge & operator=(const Model_edge &src)
Definition: model_edge.h:134
y2
Definition: APPgetLargeConnectedEdges.m:125
void write(std::ostream &out) const
Writes this Model segment to an output stream.
Definition: model_edge.cpp:82
double get_detected_length()
Return the detected length of this model segment.
Definition: model_edge.cpp:389
Model_edge(double x1, double y1, double x2, double y2, bool isilhouette=false, bool isvisible=false, bool iflagged=false)
Constructs a model edge from the position of its edge points.
Definition: model_edge.cpp:25
void read(std::istream &in)
Reads this Model segment from an input stream.
Definition: model_edge.cpp:46
Model_edge(const kjb::Vector &istart, const kjb::Vector &iend, bool isilhouette=false, bool isvisible=false, bool iflagged=false)
Constructs a model edge from the position of its edge points.
Definition: model_edge.h:93
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
bool is_flagged() const
Definition: model_edge.h:190
x1
Definition: APPgetLargeConnectedEdges.m:122
bool operator==(const Model_edge &model_edge) const
Definition: model_edge.h:144
void set_silhouette(bool isilhouette)
Sets whether this model edge is a silhouette edge or not.
Definition: model_edge.h:165
bool is_visible() const
Returns true if this model edge is an visible edge.
Definition: model_edge.h:162
void init_from_end_points(double x_1, double y_1, double x_2, double y_2)
Initialize a new Line_segment from position of its end points.
Definition: gr_line_segment.cpp:271
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
y1
Definition: APPgetLargeConnectedEdges.m:124
const kjb::Vector & get_end() const
Returns the rightmost point of the segment.
Definition: gr_line_segment.h:180
x2
Definition: APPgetLargeConnectedEdges.m:123
const kjb::Vector & get_start() const
Returns the leftmost point of the segment.
Definition: gr_line_segment.h:165
Model_edge(const Model_edge &src)
Copy constructor.
Definition: model_edge.h:124
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
void set_flagged(bool iflagged)
Sets whether this model edge is flagged or not.
Definition: model_edge.h:168
void update_detected_segments(const Edge_segment &image_edge_segment, double collinear_distance_threshold, Vector &previous_center, bool &mapped, double noisy_length)
Update the detectd parts when projecting an image segment onto the model edge.
Definition: model_edge.cpp:97
void set_visible(bool isvisible)
Sets whether this model edge is a visible edge or not.
Definition: model_edge.h:171
Class to manipulate a line segment The class is parametrized in terms the position of the centre...
Definition: gr_line_segment.h:62
bool is_silhouette() const
Returns true if this model edge is a silhouette edge.
Definition: model_edge.h:159