53 #ifndef KJB_EDGE_POINTS_LIKELIHOOD_H_
54 #define KJB_EDGE_POINTS_LIKELIHOOD_H_
128 unsigned int num_rows,
129 unsigned int num_cols,
130 unsigned int num_angles,
158 unsigned int iedge_pt_num,
159 unsigned int imodel_pt_row,
160 unsigned int imodel_pt_col,
161 unsigned int num_angles,
295 Matched_point(
double iangle,
double igauss_angle,
double inorm_dist,
double igauss_norm_dist,
double igrad_dist,
int imodel_index)
364 const std::vector< std::vector<const Correspondence::Point *> > &
368 const std::vector<Model_edge> & model_edges,
369 const std::vector<kjb::Int_vector> & edge_indexes,
378 const std::vector<Model_edge> & model_edges,
379 const std::vector<kjb::Int_vector> & edge_indexes,
380 std::vector<Correspondence::Matched_point> & matched_points,
381 std::vector< std::vector<const Correspondence::Matched_point *> > & edge_pts_matched_corr,
385 int & num_flagged_miss,
386 int & matched_counter,
391 const std::vector< std::vector<const Correspondence::Point*> > &
403 const std::vector< std::vector< std::list<Point> > > &
get_model_corr()
const {
return model_pts_corr;};
416 void add_edge_pts_along_line
419 unsigned int iedge_pt_num,
420 unsigned int num_rows,
421 unsigned int num_cols,
422 unsigned int num_angles,
437 std::vector< std::vector< std::list<Point> > > model_pts_corr;
445 std::vector< std::vector<const Point*> > edge_pts_corr;
465 unsigned int num_rows,
466 unsigned int num_cols,
472 double silho_miss_prob,
473 double inner_miss_prob,
474 bool idelete_correspondence =
true
484 if(delete_correspondence)
486 delete correspondence;
504 const std::vector<Model_edge> & model_edges,
505 const std::vector<kjb::Int_vector> & external_edge_indexes,
506 int external_edge_counter
512 const std::vector<Model_edge> & model_edges,
513 const std::vector<kjb::Int_vector> & external_edge_indexes,
514 int external_edge_counter
520 const std::vector<Model_edge> & model_edges,
521 const std::vector<kjb::Int_vector> & external_edge_indexes,
522 int external_edge_counter
528 const std::vector<Model_edge> & model_edges
555 template <
class T,
class U>
566 template <
class T,
class U>
577 template <
class T,
class U,
class V>
580 template <
class T,
class U,
class V>
586 V * auxiliary_structure,
587 const std::vector<kjb::Int_vector> & external_edge_indexes,
588 int external_edge_counter,
589 int single_object = -1,
597 double find_log_max(
double dist_sigma,
double angle_sigma);
601 return num_points_ratio;
608 return (1.0/(_num_miss + _num_data_point));
618 return delete_correspondence;
623 delete_correspondence = idelete_correspondence;
630 void reset_edge_mask()
const;
683 double background_prob;
694 double silhouette_miss_prob;
701 double inner_edge_miss_prob;
704 double num_points_ratio;
706 mutable double _num_miss;
708 double _num_data_point;
711 mutable std::vector<std::vector<bool> > edge_mask;
713 mutable int edge_counter;
719 mutable std::vector<Correspondence::Matched_point> matched_points;
721 mutable std::vector< std::vector<const Correspondence::Matched_point *> > matched_pts;
723 mutable int used_matched_points;
725 bool delete_correspondence;
746 std::vector<Model_edge> model_edges;
747 model.prepare_model_map(internal_model_map);
748 model.prepare_model_edges(model_edges);
749 return this->
operator()(internal_model_map, model_edges);
754 model.prepare_edge_points(edge_points);
778 template <
class T,
class U>
783 std::vector<Model_edge> model_edges;
784 model.prepare_model_map(internal_model_map, camera);
785 model.prepare_model_edges(model_edges, camera);
786 return this->
operator()(internal_model_map, model_edges);
791 model.prepare_edge_points(edge_points, camera);
double norm_dist
Euclidean distance from the model point to the generative approximation of the edge point along...
Definition: edge_points_likelihood.h:269
double grad_dist
Distance between the model point and the edge point along the direction of the edge gradient...
Definition: edge_points_likelihood.h:288
unsigned int model_edge_index
Definition: edge_points_likelihood.h:216
double find_log_max(double dist_sigma, double angle_sigma)
Definition: edge_points_likelihood.cpp:1677
std::vector< double > gauss_norm_dists
Gaussian likelihood of the Euclidean normal distance.
Definition: edge_points_likelihood.h:275
void set_delete_correspondence(bool idelete_correspondence)
Definition: edge_points_likelihood.h:621
Definition: edge_points_likelihood.h:459
boost::bimap< pt::Entity_id, pt::Entity_id > Correspondence
Definition: psi_metrics.h:43
Independent_edge_points_likelihood(const kjb::Edge_set *data_edges, int num_angles, unsigned int num_rows, unsigned int num_cols, double angle_sigma, double dist_sigma, double max_dist, double bg_prob, double noise_prob, double silho_miss_prob, double inner_miss_prob, bool idelete_correspondence=true)
Definition: edge_points_likelihood.cpp:933
Definition: edge_points_likelihood.h:176
This class implements matrices, in the linear-algebra sense, restricted to integer-valued elements...
Definition: l_int_matrix.h:71
bool get_delete_correspondence() const
Definition: edge_points_likelihood.h:616
double dtheta
Size of a bin in the discretized angle space.
Definition: edge_points_likelihood.h:221
Matched_point & operator=(const Matched_point &src)
Assignment operator.
Definition: edge_points_likelihood.h:318
double new_operator(Int_matrix &model_map, const std::vector< Model_edge > &model_edges, const std::vector< kjb::Int_vector > &external_edge_indexes, int external_edge_counter) const
Definition: edge_points_likelihood.cpp:1184
Point & operator=(const Point &p)
Assignment operator.
Definition: edge_points_likelihood.cpp:247
~Independent_edge_points_likelihood()
Definition: edge_points_likelihood.h:482
double angle
Definition: edge_points_likelihood.h:343
Definition: edge_points_likelihood.h:97
double get_num_points_ratio()
Definition: edge_points_likelihood.h:599
Correspondence * get_correspondence()
Returns the assignment matrix.
Definition: edge_points_likelihood.h:535
double grad_dist
Definition: edge_points_likelihood.h:351
double edge_pt_dcol
Definition: edge_points_likelihood.h:196
const std::vector< std::vector< const Correspondence::Point * > > & generate_for_model(const kjb::Edge_set &model_edge_set)
Definition: edge_points_likelihood.cpp:817
double gauss_angle
Definition: edge_points_likelihood.h:345
unsigned int model_pt_col
Column number for the model point corresponding to the edge point.
Definition: edge_points_likelihood.h:214
bool operator()(const Point *p1, const Point *p2) const
Definition: edge_points_likelihood.cpp:45
Definition: edge_points_likelihood.h:453
std::vector< double > norm_dists
Euclidean distance from the model point to the generative approximation of the edge point along...
Definition: edge_points_likelihood.h:260
Definition: edge_points_likelihood.h:150
bool operator()(const Matched_point *mp1, const Matched_point *mp2) const
Definition: edge_points_likelihood.cpp:67
double norm_dist
Definition: edge_points_likelihood.h:347
double gauss_angle
Gaussian likelihood of the angle, once the correspondence is known.
Definition: edge_points_likelihood.h:250
double compute_likelihood(T &model, unsigned int mode=FROM_MAP_AND_EDGES)
Template function to compute the likelihood for a generic model. The input model must be able to gene...
Definition: edge_points_likelihood.h:742
Matched_point(const Matched_point &mp)
Definition: edge_points_likelihood.h:312
double angle
Angle between model point normal and an edge point's gradient, once the correspondence is known...
Definition: edge_points_likelihood.h:237
Declarations for Line segment set classes.
int model_edge_index
Definition: edge_points_likelihood.h:353
Correspondence(const kjb::Edge_set *data_edges, unsigned int num_rows, unsigned int num_cols, unsigned int num_angles, double angle_sigma, double dist_sigma, double max_dist)
Creates a new correspondence between edge points and model points. For efficiency reasons...
Definition: edge_points_likelihood.cpp:300
Matched_point(double iangle, double igauss_angle, double inorm_dist, double igauss_norm_dist, double igrad_dist, int imodel_index)
Definition: edge_points_likelihood.h:295
double get_max_dist() const
Returns the max distance allowed between a model point and edge point for them to be considered match...
Definition: edge_points_likelihood.h:400
void draw_edge_set_using_mask(Image &img)
Definition: edge_points_likelihood.cpp:1659
Matched_point()
Definition: edge_points_likelihood.h:302
const std::vector< std::vector< const Correspondence::Point * > > & generate_for_model_from_map_and_edges(const Int_matrix &model_map, const std::vector< Model_edge > &model_edges, const std::vector< kjb::Int_vector > &edge_indexes, int edge_counter, int &num_sil_miss, int &num_inn_miss)
Generates a correspondence set between the detected edge point and the given model points...
Definition: edge_points_likelihood.cpp:528
unsigned int edge_pt_col
Definition: edge_points_likelihood.h:192
Definition: edge_points_likelihood.h:458
double get_total_components_ratio()
Definition: edge_points_likelihood.h:604
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
double gauss_norm_dist
Definition: edge_points_likelihood.h:349
unsigned int edge_pt_num
Index number of the edge point detected, starting with 0.
Definition: edge_points_likelihood.h:202
std::vector< double > angles
Discretized angles between model point normals and an edge point's gradient.
Definition: edge_points_likelihood.h:229
unsigned int model_pt_row
Row number for the model point corresponding to the edge point.
Definition: edge_points_likelihood.h:208
double old_operator(Int_matrix &model_map, const std::vector< Model_edge > &model_edges, const std::vector< kjb::Int_vector > &external_edge_indexes, int external_edge_counter) const
Calculates the log likelihood of the image edge set given the rendering of the model onto the image p...
Definition: edge_points_likelihood.cpp:1057
std::vector< double > gauss_angles
Gaussian likelihood of the discretized angles angle. This is proportional to the difference in oriena...
Definition: edge_points_likelihood.h:245
Likelihood_mode
Definition: edge_points_likelihood.h:457
double operator()(const Edge_set &model_edge_set) const
Calculates the log likelihood of the image edge set (set in the constructor) given the model edges...
Definition: edge_points_likelihood.cpp:1463
Point(const kjb::Edge_point &e_pt, unsigned int iedge_pt_num, unsigned int imodel_pt_row, unsigned int imodel_pt_col, unsigned int num_angles, double angle_sigma, double dist_sigma)
Constructor.
Definition: edge_points_likelihood.cpp:136
bool operator<(const Point &p) const
Compares two Correspondence Points based on the normal distance between model point and the edge poin...
Definition: edge_points_likelihood.cpp:61
double gauss_norm_dist
Gaussian likelihood of the Euclidean normal distance (once the correspondence is known) ...
Definition: edge_points_likelihood.h:281
double edge_pt_drow
Definition: edge_points_likelihood.h:194
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
Definition: edge_points_likelihood.h:330
Definition: edge_points_likelihood.h:291
This class implements matrices, in the linear-algebra sense, with real-valued elements.
Definition: m_matrix.h:94
Wrapped version of the C struct KJB_image.
Definition: i_image.h:76
const std::vector< std::vector< std::list< Point > > > & get_model_corr() const
Gets the correspondences associated to model points.
Definition: edge_points_likelihood.h:403
const kjb::Edge_set * get_data_edges() const
Definition: edge_points_likelihood.h:611
Correspondence & operator=(const Correspondence &c)
Assignment operator.
Definition: edge_points_likelihood.cpp:382
bool operator<(const Matched_point &mp) const
Compares two Correspondence Points based on the normal distance between model point and the edge poin...
Definition: edge_points_likelihood.cpp:83
unsigned int edge_pt_row
Edge point detected in the input image.
Definition: edge_points_likelihood.h:190