KJB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
edge_lines_likelihood.h
Go to the documentation of this file.
1 /* $Id: edge_lines_likelihood.h 18283 2014-11-25 05:05:59Z ksimek $ */
2 /* =========================================================================== *
3  |
4  | Copyright (c) 1994-2010 by Kobus Barnard (author)
5  |
6  | Personal and educational use of this code is granted, provided that this
7  | header is kept intact, and that the authorship is not misrepresented, that
8  | its use is acknowledged in publications, and relevant papers are cited.
9  |
10  | For other use contact the author (kobus AT cs DOT arizona DOT edu).
11  |
12  | Please note that the code in this file has not necessarily been adequately
13  | tested. Naturally, there is no guarantee of performance, support, or fitness
14  | for any particular task. Nonetheless, I am interested in hearing about
15  | problems that you encounter.
16  |
17  | Author: Jinyan Guan
18  * =========================================================================== */
19 #ifndef EDGE_LINES_LIKELIHOOD_H_INCLUDED
20 #define EDGE_LINES_LIKELIHOOD_H_INCLUDED
21 
22 #include <edge_cpp/edge.h>
23 
25 
28 #include <list>
29 
37 namespace kjb {
38 
46 {
47  public:
48 
54  (
55  const Edge_segment_set& image_edge_segments,
56  double angle_sigma,
57  double dist_sigma,
58  double max_distance,
59  double max_angle
60  );
61 
63 
68  class Line_bin
69  {
70  public:
71 
76  Line_bin
77  (
78  const Edge_segment& iimage_edge_segment,
79  const Model_edge& model_edge_segment,
80  unsigned int imodel_edge_segment_index,
81  double angle_sigma,
82  double dist_sigma
83  );
84 
90  {
91  public:
92  bool operator() (const Line_bin* line_bin1, const Line_bin* line_bin2) const;
93  };
94 
99  bool operator< (const Line_bin& l_bin) const;
100 
102 
104 
109  float distance;
110 
113 
118  float angle;
119 
121  double gauss_angle;
122  };
123 
128  inline const std::vector<std::vector<Line_bin*> >& get_model_corresponding_image_edges ( ) const
129  {
130  return m_model_corresponding_image_edges;
131  }
132 
133  inline double get_max_distance() const
134  {
135  return m_max_distance;
136  }
137 
138  inline std::vector<const Edge_segment*> get_noisy_edge_segments()
139  {
140  return noisy_image_edge_segments;
141  }
142 
149  (
150  const std::vector<Model_edge>& model_edge_segments
151  );
152 
153  private:
154 
157  double m_max_distance;
158 
161  double m_max_angle;
162 
163  double m_angle_sigma;
164 
165  double m_dist_sigma;
166 
167  const Edge_segment_set& image_edge_segments;
168 
174  std::vector<std::list<Line_bin> > m_image_corresponding_model_edges;
175 
181  std::vector<std::vector<Line_bin*> > m_model_corresponding_image_edges;
182 
184  std::vector<const Edge_segment*> noisy_image_edge_segments;
185 
186 };
187 
194 {
195  public:
196 
209  (
210  const Edge_segment_set& iimage_edge_segments,
211  double angle_sigma,
212  double dist_sigma,
213  double prob_of_missing,
214  double prob_of_noise,
215  double max_distance,
216  double max_angle,
217  double collinear_distance_threshold
218  );
219 
225  template <class T> double compute_likelihood(T & model);
226 
227  template <class T, class U>
228  double compute_likelihood(T & model, U & camera);
229 
232  double operator()(std::vector<Model_edge>& model_edges);
233 
234  //For debug purposes, draw the correspondence
236  (
237  Image& model_edge_image,
238  Image& data_edge_image,
239  const std::vector<Model_edge>& model_edges,
240  double width
241  );
242 
243  private:
244 
254  kjb::Int_matrix model_map;
255 
259  const Edge_segment_set& image_edge_segments;
260 
261 
263  double m_prob_of_missing;
264 
266  double m_prob_of_noise;
267 
269  Line_correspondence m_line_correspondence;
270 
272  double m_collinear_distance_threshold;
273 };
274 
288  template <class T>
290  {
291  std::vector<Model_edge> model_edges;
292  model.prepare_model_map(model_map);
293  model.prepare_rendered_model_edges(model_edges, model_map);
294  return this->operator()(model_edges);
295  }
296 
312  template <class T, class U>
313  double Edge_lines_likelihood::compute_likelihood(T & model, U & camera)
314  {
315  std::vector<Model_edge> model_edges;
316  model.prepare_model_map(model_map);
317  model.prepare_rendered_model_edges(model_edges, model_map);
318  return this->operator()(model_edges);
319  }
320 }
321 
322 #endif
double gauss_distance
normal pdf of distance
Definition: edge_lines_likelihood.h:112
Definition: edge_segment.h:36
Definition: model_edge.h:73
~Line_correspondence()
Definition: edge_lines_likelihood.h:62
This class implements matrices, in the linear-algebra sense, restricted to integer-valued elements...
Definition: l_int_matrix.h:71
unsigned int model_edge_segment_index
Definition: edge_lines_likelihood.h:103
Definition: edge_lines_likelihood.h:193
const std::vector< std::vector< Line_bin * > > & get_model_corresponding_image_edges() const
Return a map of model_to_image_correspondence Indexed by image edge segments and sorted by the gauss_...
Definition: edge_lines_likelihood.h:128
Compare the corresponding Line_bin based on the x position of the starting point of the image edge se...
Definition: edge_lines_likelihood.h:89
float angle
Angle between an image edge segment and a model edge Because of symmetry, ranges 0 to PI/2...
Definition: edge_lines_likelihood.h:118
double compute_likelihood(T &model)
Definition: edge_lines_likelihood.h:289
bool operator<(const Line_bin &l_bin) const
Compare the correspondence based on the distance between the middle points of the model edge and edge...
Definition: edge_lines_likelihood.cpp:48
bool operator()(const Line_bin *line_bin1, const Line_bin *line_bin2) const
Compare the corresponding Line_bin based on the x position of the starting point of the image edge se...
Definition: edge_lines_likelihood.cpp:35
St_perspective_camera for modeling a perspective camera using the classic Forsyth and Ponce parametri...
std::vector< const Edge_segment * > get_noisy_edge_segments()
Definition: edge_lines_likelihood.h:138
const Edge_segment & image_edge_segment
Definition: edge_lines_likelihood.h:101
void draw_correspondence(Image &model_edge_image, Image &data_edge_image, const std::vector< Model_edge > &model_edges, double width)
Definition: edge_lines_likelihood.cpp:345
double operator()(std::vector< Model_edge > &model_edges)
Calculates and return the likelihood for a set of model edges.
Definition: edge_lines_likelihood.cpp:233
double gauss_angle
normal pdf of the angle.
Definition: edge_lines_likelihood.h:121
Definition: edge_lines_likelihood.h:45
void find_model_corresponding_image_edges(const std::vector< Model_edge > &model_edge_segments)
Find the correspoinding image edges for each model edge based on m_image_edge_correspondence, the correspondence will be stored in m_model_edge_correspondence.
Definition: edge_lines_likelihood.cpp:102
float distance
Euclidean distance from the middle point of the image edge segment to the model edge.
Definition: edge_lines_likelihood.h:109
Class to manipulate a set of edge segments.
Definition: line_segment_set.h:128
Wrapped version of the C struct KJB_image.
Definition: i_image.h:76
Line_correspondence(const Edge_segment_set &image_edge_segments, double angle_sigma, double dist_sigma, double max_distance, double max_angle)
Creates a new correspondence between collinear edge segments and model edge lines.
Definition: edge_lines_likelihood.cpp:62
double get_max_distance() const
Definition: edge_lines_likelihood.h:133
Definition: edge_lines_likelihood.h:68
Line_bin(const Edge_segment &iimage_edge_segment, const Model_edge &model_edge_segment, unsigned int imodel_edge_segment_index, double angle_sigma, double dist_sigma)
Constructs a new bin between an Model_edge and a Edge_segment.
Definition: edge_lines_likelihood.cpp:82
Edge_lines_likelihood(const Edge_segment_set &iimage_edge_segments, double angle_sigma, double dist_sigma, double prob_of_missing, double prob_of_noise, double max_distance, double max_angle, double collinear_distance_threshold)
Constructs a new Edge_lines_likelihood.
Definition: edge_lines_likelihood.cpp:210