22 #ifndef PSI_LIKELIHOOD
23 #define PSI_LIKELIHOOD
36 #ifdef KJB_HAVE_UA_CARTWHEEL
37 #include <Control/CapsuleState.h>
38 #include <Control/SimulationInterface.h>
39 #include <Control/ExtendedAction.h>
40 #include <Control/WrapperAction.h>
41 #include <Control/StartState.h>
44 #include <boost/function.hpp>
60 double height_sigma) :
61 xy_prob_(0.0, xy_sigma),
62 width_prob_(0.0, width_sigma),
63 height_prob_(0.0, height_sigma)
83 double height_lambda) :
84 x_prob_(x_min, x_max),
85 y_prob_(y_min, y_max),
86 width_prob_(width_lambda),
87 height_prob_(height_lambda)
107 const boost::function2<double, const Bbox&, const Bbox&>& pairwise_box_likelihood,
108 const boost::function1<double, const Bbox&>& noise_box_likelihood,
111 P_MISSING_SWITCH_POINT(0.3),
112 P_MISSING_BASE_PROB(0.1),
113 P_MISSING_SMOOTHNESS(0.1),
115 pair_likelihood_(pairwise_box_likelihood),
116 noise_likelihood_(noise_box_likelihood),
117 frame_bounds_(kjb::
Vector(0.0, 0.0), (double) width, (double) height),
118 marginalize_out_noise_(true)
129 double operator()(
const std::vector<Bbox>& data_boxes,
const std::vector<Bbox>& model_boxes)
const
132 const std::vector<double> m_p_missing =
get_p_missing(model_boxes);
138 return this->
operator()(data_boxes, model_boxes, affinities, correspondences, m_p_missing);
159 if(visibility < 0 || visibility > 1.0)
170 const double mean = P_MISSING_SWITCH_POINT;
171 const double sigma = P_MISSING_SMOOTHNESS;
175 const double min = P_MISSING_BASE_PROB;
177 const double obscured = 1-visibility;
179 double result = log(min + (1-min) *
cdf(normal_dist, obscured));
192 std::vector<double>
get_p_missing(
const std::vector<Bbox>& model)
const;
195 const std::vector<Bbox>& data,
196 const std::vector<Bbox>& model)
const
211 marginalize_out_noise_ =
false;
218 const std::vector<Bbox>& data_boxes,
219 const std::vector<Bbox>& models,
221 const std::vector<size_t>& correspondences,
222 const std::vector<double>& m_p_missing)
const;
225 const std::vector<Bbox>& data,
226 const std::vector<Bbox>& model,
227 const std::vector<double>& m_p_missing
232 const double P_MISSING_SWITCH_POINT;
233 const double P_MISSING_BASE_PROB;
234 const double P_MISSING_SMOOTHNESS;
240 boost::function2<double, const Bbox&, const Bbox&> pair_likelihood_;
242 boost::function1<double, const Bbox&> noise_likelihood_;
252 bool marginalize_out_noise_;
262 #ifdef KJB_HAVE_UA_CARTWHEEL
274 Cartwheel_likelihood(
275 const std::vector<std::vector<Bbox> >& data,
278 InterfacePtr interface,
288 interface_(interface),
289 frame_likelihood_(frame_likelihood),
290 frame_count_penalty_(p_frame_count)
301 virtual double operator()(
const Model&
m)
const;
303 std::vector<std::pair<double, Bbox> > blocks_to_boxes(
const std::vector<CartWheel::BoxStatePtr>& box_state)
const;
305 std::vector<std::pair<double, Bbox> > capsules_to_boxes(
const CartWheel::CapsuleState& capsule_state)
const;
307 std::vector<std::pair<double, Bbox> > capsules_to_boxes(
const std::vector<std::vector<CartWheel::Math::Capsule*> >& actors_capsules)
const;
326 const std::vector<std::vector<Bbox> >& data_;
328 mutable InterfacePtr interface_;
330 Frame_likelihood frame_likelihood_;
349 boost::shared_ptr<std::vector<std::vector<std::vector<Bbox> > > > data,
358 frame_likelihood_(frame_likelihood),
359 frame_count_penalty_(p_frame_count),
363 for(
size_t i = 0;
i < data_->size();
i++)
365 if((*data_)[
i].size() == 0)
continue;
368 num_frames_ = (*data_).size();
371 if(num_frames_ != (*data_).size())
376 assert(num_frames_ > 0);
382 std::vector<std::pair<double, Bbox> >
blocks_to_boxes(
const std::vector<Cuboid>& blocks)
const;
385 std::vector<std::pair<double, Bbox> >
entities_to_boxes(
const std::vector<std::vector<Entity_state> >& entities)
const;
388 boost::shared_ptr<std::vector<std::vector<std::vector<Bbox> > > > data_;
400 inline std::vector<Bbox>
sort_by_depth(std::vector<std::pair<double, Bbox> >& boxes);
Definition: psi_likelihood.h:101
double operator()(const std::vector< Bbox > &data_boxes, const std::vector< Bbox > &model_boxes) const
Definition: psi_likelihood.h:129
Bbox_noise_likelihood(double x_min, double x_max, double y_min, double y_max, double width_lambda, double height_lambda)
Definition: psi_likelihood.h:77
double operator()(const Bbox &data, const Bbox &model) const
Definition: psi_likelihood.cpp:126
Definition for the Matrix class, a thin wrapper on the KJB Matrix struct and its related functionalit...
Class that represents an axis-aligned 2D rectangle. It is defined in terms of its (2D) center...
Definition: gr_2D_bounding_box.h:51
Definition of various standard probability distributions.
kjb::Matrix get_affinity(const std::vector< Bbox > &data, const std::vector< Bbox > &model) const
Definition: psi_likelihood.h:194
std::vector< Bbox > sort_by_depth(std::vector< std::pair< double, Bbox > > &boxes)
Definition: psi_likelihood.cpp:109
std::vector< std::pair< double, Bbox > > blocks_to_boxes(const std::vector< Cuboid > &blocks) const
convert 3d blocks into 2d bounding boxes, with depths from camera
Definition: psi_likelihood.h:337
Frame_likelihood(size_t width, size_t height, const boost::function2< double, const Bbox &, const Bbox & > &pairwise_box_likelihood, const boost::function1< double, const Bbox & > &noise_box_likelihood, double p_noise)
Definition: psi_likelihood.h:104
Cylinder_world_likelihood(boost::shared_ptr< std::vector< std::vector< std::vector< Bbox > > > > data, const kjb::Perspective_camera &cam, const Frame_likelihood &frame_likelihood, const Simple_simulator &sim, double p_frame_count)
Definition: psi_likelihood.h:348
height
Definition: APPgetLargeConnectedEdges.m:33
double p_correspondence(size_t num_data, size_t num_noise) const
Definition: psi_likelihood.cpp:536
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
Value_type mean(Iterator begin, Iterator end, const Value_type &)
Definition: prob_stat.h:56
Definition: psi_likelihood.h:54
St_perspective_camera for modeling a perspective camera using the classic Forsyth and Ponce parametri...
double p_missing(double visibility) const
Definition: psi_likelihood.h:157
boost::math::exponential Exponential_distribution
Definition: prob_distribution.h:64
PDFs and CDFs for the different distributions defined in "prob_distribution.h".
Definition: perspective_camera.h:93
Definition: psi_cylinder_world.h:133
Definition: prob_distribution.h:79
Frame_likelihood & dont_marginalize_noise()
Definition: psi_likelihood.h:209
Definition: psi_likelihood.h:256
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
double compute_visibility(const std::vector< Bbox > &all_boxes, size_t box_i) const
Definition: psi_likelihood.cpp:364
Int_matrix::Value_type min(const Int_matrix &mat)
Return the minimum value in this matrix.
Definition: l_int_matrix.h:1385
boost::math::normal Normal_distribution
Definition: prob_distribution.h:68
double cdf(const Log_normal_distribution &dist, double x)
Computes the cdf of a log-normal distribution at x.
Definition: prob_pdf.h:151
Object thrown when an argument to a function is not acceptable.
Definition: l_exception.h:377
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
virtual double operator()(const Model &m) const
Definition: psi_likelihood.cpp:693
This class implements matrices, in the linear-algebra sense, with real-valued elements.
Definition: m_matrix.h:94
boost::math::uniform Uniform_distribution
Definition: prob_distribution.h:70
for m
Definition: APPgetLargeConnectedEdges.m:64
virtual double operator()(const Model &m) const =0
std::vector< size_t > get_correspondence_greedily(const kjb::Matrix &affinities) const
Definition: psi_likelihood.cpp:621
double operator()(const Bbox &data) const
Definition: psi_likelihood.cpp:178
std::vector< std::pair< double, Bbox > > entities_to_boxes(const std::vector< std::vector< Entity_state > > &entities) const
convert 3d entities into 2d bounding boxes, with depths from camera
Definition: psi_likelihood.cpp:782
Bbox_pairwise_likelihood(double xy_sigma, double width_sigma, double height_sigma)
Definition: psi_likelihood.h:57
Definition: psi_likelihood.h:74
Definition: psi_model.h:62
std::vector< double > get_p_missing(const std::vector< Bbox > &model) const
Definition: psi_likelihood.cpp:553