23 #ifndef PT_SCENE_GENERATIVE_MOODEL_H
24 #define PT_SCENE_GENERATIVE_MOODEL_H
42 #include <gp_cpp/gp_sample.h>
49 #include <boost/bind.hpp>
50 #include <boost/ref.hpp>
59 if(fabs(vis.
visible - 0.0) < 1e-6)
return false;
60 if(fabs(vis.
visible - 1.0) < 1e-6)
return true;
83 size_t t = pr_p->first;
85 const Vector3& pos = traj[t - 1]->value.position;
86 const Bbox& fbox = btraj[t - 1]->value.full_bbox;
91 target.erase(pr_p, target.end());
107 template<
class TargetIterator>
116 TargetIterator first,
120 for(TargetIterator target_p = first; target_p != last; target_p++)
122 Target& target = *target_p;
129 std::vector<Vector> F_x(2);
133 for(
size_t f = sf; f <= ef; f++)
136 traj[f - 1]->value.position[0] = F_x[0][f - sf];
137 traj[f - 1]->value.position[2] = F_x[1][f - sf] - 5.0;;
143 for(
size_t f = sf; f <= ef; f++)
145 traj[f - 1]->value.body_dir = F_d[f - sf];
152 for(
size_t f = sf; f <= ef; f++)
154 traj[f - 1]->value.face_dir[0] = F_p[f - sf];
155 traj[f - 1]->value.face_dir[1] = F_y[f - sf];
188 const std::string& type
192 Vector params_top(4, 0.0);
193 Vector params_bot(4, 0.0);
194 box_lh.
get_params(type, params_x, params_top, params_bot);
199 std::cerr <<
"WARNING: person behind camera!" << std::endl;
203 double mean = params_x[0] + params_x[2] *
height;
204 double b = params_x[1] + params_x[3] *
height;
207 mean = params_top[0] + params_top[2] *
height;
208 b = params_top[1] + params_top[3] *
height;
211 mean = params_bot[0] + params_bot[2] *
height;
212 b = params_bot[1] + params_bot[3] *
height;
221 double top = mbox.
get_top() + dtop;
233 template<
class TargetIterator>
238 TargetIterator first,
240 const std::vector<size_t> fa_count
243 const size_t T = fa_count.size();
249 for(TargetIterator target_p = first; target_p != last; target_p++)
251 Target& target = *target_p;
259 const Body_2d& b2d = btraj[t - 1]->value;
263 b_p = &(*box_data[t - 1].insert(dbox).first);
270 for(
size_t t = 0; t < T; t++)
272 for(
size_t i = 0;
i < fa_count[t];
i++)
280 double yc = (top - bot)/2;
282 double h = fabs(top - bot);
293 template<
class FmvIterator>
302 for(
size_t t = 0; t < w.
get_data().size(); t++)
304 std::vector<Deva_facemark> facemarks_t;
305 BOOST_FOREACH(
const Target& tg, w)
310 const Face_2d& f2d = ftraj[t]->value;
311 double fd = tg.
trajectory()[t]->value.face_dir[0];
315 double yaw = (180*fd)/
M_PI;
333 bool all_empty =
true;
383 *fm_out++ = facemarks_t;
393 template<
class FlowIterator>
398 FlowIterator xflow_out,
399 FlowIterator yflow_out
404 const size_t T = data.size();
412 Matrix bg_flow_x((
size_t)image_height, (
size_t)image_width);
413 Matrix bg_flow_y((
size_t)image_height, (
size_t)image_width);
414 for(
size_t i = 0;
i < (size_t)image_width;
i++)
416 for(
size_t j = 0; j < image_height; j++)
426 for(
size_t f = 0; f < T - 1; f++)
428 Matrix flow_x = bg_flow_x;
429 Matrix flow_y = bg_flow_y;
430 BOOST_FOREACH(
const Target& target, w)
435 if(!btraj[f] || !btraj[f + 1])
continue;
438 const Bbox& curbox = btraj[f]->value.body_bbox;
439 const Bbox& nxtbox = btraj[f + 1]->value.body_bbox;
440 const Visibility& vis = btraj[f]->value.visibility;
451 for(
int x = bl;
x <= br;
x++)
453 for(
int y = bb; y <= bt; y++)
458 Vector vd = vs + model_vel;
461 flow_x(vs[1], vs[0]) = (vd - vs)[0];
462 flow_y(vs[1], vs[0]) = (vd - vs)[1];
468 const Bbox& facebox = ftraj[f]->value.bbox;
469 const Visibility& facevis = ftraj[f]->value.visibility;
470 model_vel = ftraj[f]->value.model_dir;
480 for(
int x = bl;
x <= br;
x++)
482 for(
int y = bb; y <= bt; y++)
487 Vector vd = vs + model_vel;
490 flow_x(vs[1], vs[0]) = (vd - vs)[0];
491 flow_y(vs[1], vs[0]) = (vd - vs)[1];
509 template<
class FmvIterator,
class FlowOutIterator>
519 FlowOutIterator xflow_out,
520 FlowOutIterator yflow_out,
521 size_t max_tracks = 0
544 pair<vector<Target>, vector<size_t> >
546 vector<Target>& targets = wfa.first;
547 const vector<size_t>& false_alarms = wfa.second;
564 typedef std::vector<Target>::iterator Tv_it;
580 Tv_it ltg_p = std::remove_if(targets.begin(), targets.end(),
empty_target);
581 if(max_tracks != 0 && std::distance(targets.begin(), ltg_p) > max_tracks)
583 ltg_p = targets.begin();
584 std::advance(ltg_p, max_tracks);
602 sample(box_lh, box_data, targets.begin(), ltg_p, false_alarms);
605 w.set_data(box_data);
606 w.insert(targets.begin(), ltg_p);
610 sample(fm_lh, scene, fm_out);
613 sample(of_lh, scene, xflow_out, yflow_out);
Class that represents the prior distribution of a trajectory.
Definition: pt_direction_prior.h:33
double get_width() const
returns the width of this bounding box
Definition: gr_2D_bounding_box.h:86
Vector right_eye
Definition: pt_face_2d.h:41
const Laplace_distribution & bg_y_dist() const
Return the individual Laplace distribution for y.
Definition: pt_optical_flow_likelihood.h:87
Vector left_mouth
Definition: pt_face_2d.h:43
Class that represents a detection bounding box from any source.
Definition: pt_detection_box.h:42
const Face_direction_prior & face_direction_prior() const
Returns the face direction prior.
Definition: pt_scene_posterior.h:169
const Normal_distribution & eye_y_dist() const
Definition: pt_facemark_likelihood.h:113
int get_end_time() const
Gets end time of track.
Definition: mcmcda_track.h:102
Int_matrix::Value_type max(const Int_matrix &mat)
Return the maximum value in this matrix.
Definition: l_int_matrix.h:1397
Class that represents an axis-aligned 2D rectangle. It is defined in terms of its (2D) center...
Definition: gr_2D_bounding_box.h:51
double height
Definition: tracking_trajectory.h:195
bool empty() const
Returns true iff size is zero. Required to comply with stl Container concept.
Definition: m_vector.h:526
Deva_facemark build_deva_facemark(const Vector &lefe_eye, const Vector &right_eye, const Vector &nose, const Vector &left_mouth, const Vector &right_mouth, double yaw)
Constructor.
Definition: pt_data.cpp:167
Definition of various standard probability distributions.
Parent::key_type key_type
Definition: mcmcda_track.h:85
bool contains(const kjb::Vector &pt) const
Definition: gr_2D_bounding_box.h:138
double image_width() const
Returns the image width.
Definition: pt_data.h:86
const Normal_distribution & mouth_y_dist() const
Definition: pt_facemark_likelihood.h:117
double signal_variance() const
Return the GP signal variance.
Definition: pt_position_prior.h:108
const Gpp & pos_prior() const
Returns the prior distribution used to evaluate this target.
Definition: pt_target.h:103
Trajectory & trajectory() const
Get this target's current 3D positions.
Definition: pt_target.h:85
double get_bottom() const
Definition: gr_2D_bounding_box.h:99
double get_area() const
returns the area of the box
Definition: gr_2D_bounding_box.h:211
double lambda
Definition: pt_scene.h:63
const Laplace_distribution & x_dist() const
Return the individual Laplace distribution for x.
Definition: pt_optical_flow_likelihood.h:78
Class to compute face optical flow likelihood.
Definition: pt_optical_flow_likelihood.h:43
const Optical_flow_likelihood & of_likelihood() const
Returns the optical flow likelihood.
Definition: pt_scene_posterior.h:190
Class that represents the prior distribution of the face direction.
Definition: pt_direction_prior.h:137
void update_pos_gp(double sc, double sv) const
Updates internal distribution and caching mechanism.
Definition: pt_target.h:213
Parent::mapped_type mapped_type
Definition: mcmcda_track.h:86
double get_right() const
Definition: gr_2D_bounding_box.h:98
Vector nose
Definition: pt_face_2d.h:42
Class that represents a full scene in the PT universe.
Definition: pt_scene.h:40
Generic_trajectory_element< Complete_state > Trajectory_element
Definition: pt_complete_trajectory.h:41
virtual void set_focal_length(double ifocal)
sets the focal length
Definition: perspective_camera.cpp:872
const Facemark_likelihood & fm_likelihood() const
Returns the facemark likelihood.
Definition: pt_scene_posterior.h:187
Ascn association
Definition: pt_scene.h:59
void push_back(Value_type x)
inserts an element at the back of the vector in amortized constant time.
Definition: m_vector.h:1128
2D body information resulting from projecting the 3D body.
Definition: pt_body_2d.h:35
Vector left_eye
Definition: pt_face_2d.h:40
bool empty_target(const Target &target)
Helper function; needed because, occasionally, C++ is stupid.
Definition: pt_scene_generative_model.h:72
const Gpp & dir_prior() const
Returns the prior distribution used to evaluate this target.
Definition: pt_target.h:109
height
Definition: APPgetLargeConnectedEdges.m:33
Computes the prior of an MCMCDA association.
Definition: mcmcda_prior.h:38
double image_height() const
Returns the image height.
Definition: pt_data.h:89
int get_start_time() const
Gets start time of track.
Definition: mcmcda_track.h:93
const Laplace_distribution & bg_x_dist() const
Return the individual Laplace distribution for x.
Definition: pt_optical_flow_likelihood.h:84
double kappa() const
Get average number of before start of video.
Definition: mcmcda_prior.h:79
virtual void set_camera_centre_y(double iy)
sets the y-coordinate of the camera centre
Definition: perspective_camera.cpp:751
Face_2d_trajectory & face_trajectory() const
Get this target's current 2D body trajectory.
Definition: pt_target.h:97
This class implements vectors, in the linear-algebra sense, with real-valued elements.
Definition: m_vector.h:87
const Normal_distribution & mouth_x_dist() const
Definition: pt_facemark_likelihood.h:116
double visible
Definition: pt_visibility.h:41
Axis_aligned_rectangle_2d Bbox
Definition: d_bbox.h:29
const Position_prior & position_prior() const
Returns the position prior.
Definition: pt_scene_posterior.h:163
bool pixel_visible(int x, int y, const Visibility &vis)
Helper function that determines if a pixel is visible.
Definition: pt_scene_generative_model.h:57
double theta
Definition: pt_scene.h:62
const Normal_distribution & width_prior() const
Returns the width prior.
Definition: pt_scene_posterior.h:178
Vector right_mouth
Definition: pt_face_2d.h:44
double lambda_N() const
Get false detection rate.
Definition: mcmcda_prior.h:85
Vector sample(const MV_gaussian_distribution &dist)
Sample from a multivariate normal distribution.
Definition: prob_sample.cpp:42
void update_visibilities(const Scene &scene, bool infer_head=true)
Update all the visibilities in a scene.
Definition: pt_visibility.cpp:62
Parent::iterator iterator
Definition: mcmcda_track.h:80
Value_type mean(Iterator begin, Iterator end, const Value_type &)
Definition: prob_stat.h:56
Visibility visibility
Definition: pt_face_2d.h:46
Represents the information regarding visibility of an actor at a given frame and given all other acto...
Definition: pt_visibility.h:38
double cell_width
Definition: pt_visibility.h:42
void update_fdir_gp(double sc, double sv) const
Updates internal distribution and caching mechanism.
Definition: pt_target.h:225
boost::math::laplace Laplace_distribution
Definition: prob_distribution.h:67
const Normal_distribution & eye_x_dist() const
Definition: pt_facemark_likelihood.h:112
2D face information resulting from projecting the 3D head/face.
Definition: pt_face_2d.h:37
const Normal_distribution & height_prior() const
Returns the height prior.
Definition: pt_scene_posterior.h:175
St_perspective_camera for modeling a perspective camera using the classic Forsyth and Ponce parametri...
double signal_variance() const
Return the GP signal variance.
Definition: pt_direction_prior.h:99
const Gpp & fdir_prior() const
Returns the prior distribution used to evaluate this target.
Definition: pt_target.h:115
double scale() const
Return the GP scale.
Definition: pt_direction_prior.h:96
Definition: perspective_camera.h:93
x
Definition: APPgetLargeConnectedEdges.m:100
Vector & set(Value_type val)
Clone of zero_out(int)
Definition: m_vector.h:707
Class that represents the prior distribution of a trajectory.
Definition: pt_position_prior.h:34
Class that represents a target moving through space.
Definition: pt_target.h:50
const Vector & get_center() const
returns the center of this Axis_aligned_rectangle_2d
Definition: gr_2D_bounding_box.h:80
const Data< Element > & get_data() const
Returns data set const-ref.
Definition: mcmcda_association.h:126
Class that represents likelihood of a set of projected boxes given. detections. At the moment it only...
Definition: pt_box_likelihood.h:42
Perspective_camera camera
Definition: pt_scene.h:60
const Box_likelihood & box_likelihood() const
Returns the box likelihood.
Definition: pt_scene_posterior.h:184
virtual void set_pitch(double ipitch)
sets the pitch angle in radian
Definition: perspective_camera.cpp:771
const Laplace_distribution & y_dist() const
Return the individual Laplace distribution for y.
Definition: pt_optical_flow_likelihood.h:81
const Normal_distribution & nose_x_dist() const
Definition: pt_facemark_likelihood.h:114
Body_2d_trajectory & body_trajectory() const
Get this target's current 2D body trajectory.
Definition: pt_target.h:91
Class that represents the camera prior.
Definition: pt_camera_prior.h:31
void sync_state(const Target &tg)
Sync targets trajectory with endpoints.
Definition: pt_target.cpp:624
const Normal_distribution & girth_prior() const
Returns the girth prior.
Definition: pt_scene_posterior.h:181
double scale() const
Return the GP scale.
Definition: pt_direction_prior.h:200
std::pair< std::vector< Track >, std::vector< size_t > > sample(const Prior< Track > &prior, size_t T, const Track &def)
Sample an association from the prior.
Definition: mcmcda_prior.h:193
Posterior distribution of a scene.
Definition: pt_scene_posterior.h:53
double get_left() const
Definition: gr_2D_bounding_box.h:97
double get_top() const
Definition: gr_2D_bounding_box.h:100
double theta() const
Get average track length.
Definition: mcmcda_prior.h:82
Bbox full_bbox
Definition: pt_body_2d.h:37
#define M_PI
Definition: fft.cpp:206
Int_matrix::Value_type min(const Int_matrix &mat)
Return the minimum value in this matrix.
Definition: l_int_matrix.h:1385
const Normal_distribution & height_prior() const
Definition: pt_camera_prior.h:55
boost::math::normal Normal_distribution
Definition: prob_distribution.h:68
Sampling functionality for the different distributions defined in "prob_distributions.h".
void update_boxes(const Perspective_camera &cam) const
Update box trajectory.
Definition: pt_target.cpp:503
void set_changed_all() const
Set changed flags to unchanged.
Definition: pt_target.h:129
Definition: flow_integral_flow.h:38
const Normal_distribution & nose_y_dist() const
Definition: pt_facemark_likelihood.h:115
void sample(const mcmcda::Prior< Target > &w_prior, const Camera_prior &cam_prior, const Scene_posterior &posterior, size_t T, Scene &scene, Box_data &box_data, FmvIterator fm_out, FlowOutIterator xflow_out, FlowOutIterator yflow_out, size_t max_tracks=0)
Sample from full generative model.
Definition: pt_scene_generative_model.h:511
void unstandardize(Vector &v, double cam_width, double cam_height)
Changes vector to unstandard (image) coordinate system.
Definition: pt_util.h:83
void sample(const Position_prior &pos_prior, const Direction_prior &dir_prior, const Face_direction_prior &fdir_prior, const Normal_distribution &height_prior, const Normal_distribution &width_prior, const Normal_distribution &girth_prior, TargetIterator first, TargetIterator last)
Sample a scene from the prior (and a given sequence of tracks).
Definition: pt_scene_generative_model.h:109
void update_faces(const Perspective_camera &cam) const
Update face trajectory.
Definition: pt_target.cpp:551
const Normal_distribution & focal_length_prior() const
Definition: pt_camera_prior.h:57
const Direction_prior & direction_prior() const
Returns the direction prior.
Definition: pt_scene_posterior.h:166
get the indices of edges in each direction for i
Definition: APPgetLargeConnectedEdges.m:48
double scale() const
Return the GP scale.
Definition: pt_position_prior.h:105
Class to compute facemark likelihood.
Definition: pt_facemark_likelihood.h:39
double get_rectangle_intersection(const kjb::Bounding_Box2D &b1, const kjb::Bounding_Box2D &b2)
Compute area of intersection of two rectangles.
Definition: gr_2D_bounding_box.cpp:282
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
double girth
Definition: tracking_trajectory.h:197
Parent::value_type value_type
Definition: mcmcda_track.h:84
const Normal_distribution & pitch_prior() const
Definition: pt_camera_prior.h:56
void get_params(const std::string &type, Vector ¶ms_x, Vector ¶ms_top, Vector ¶ms_bot) const
Computes line paramters given type of box.
Definition: pt_box_likelihood.cpp:136
Definition for the Vector class, a thin wrapper on the KJB Vector struct and its related functionalit...
std::vector< Vector > visible_cells
Definition: pt_visibility.h:40
void fix_target(Target &target, double imw, double imh)
Helper function that fixes a track when it leaves the view.
Definition: pt_scene_generative_model.h:76
void update_dir_gp(double sc, double sv) const
Updates internal distribution and caching mechanism.
Definition: pt_target.h:219
double width
Definition: tracking_trajectory.h:196
double signal_variance() const
Return the GP signal variance.
Definition: pt_direction_prior.h:203
double cell_height
Definition: pt_visibility.h:43
double kappa
Definition: pt_scene.h:61