summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tracker-pt/point_tracker.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/tracker-pt/point_tracker.cpp b/tracker-pt/point_tracker.cpp
index 13d1ab79..a68e83eb 100644
--- a/tracker-pt/point_tracker.cpp
+++ b/tracker-pt/point_tracker.cpp
@@ -50,6 +50,9 @@ void PointModel::set_model(const pt_settings& s)
{
switch (s.active_model_panel)
{
+ default:
+ eval_once(qDebug() << "pt: wrong model type selected");
+ [[fallthrough]];
case Clip:
M01 = vec3(0, s.clip_ty, -s.clip_tz);
M02 = vec3(0, -s.clip_by, -s.clip_bz);
@@ -76,7 +79,7 @@ void PointModel::get_d_order(const vec2* points, unsigned* d_order, const vec2&
d_vals[i] = t(d.dot(points[i]), i);
std::sort(d_vals,
- d_vals + 3u,
+ d_vals + 3,
[](const t& a, const t& b) { return a.first < b.first; });
for (unsigned i = 0; i < cnt; ++i)
@@ -134,6 +137,9 @@ PointTracker::PointOrder PointTracker::find_correspondences_previous(const vec2*
bool PointTracker::maybe_use_old_pose(const PointOrder& order, const pt_camera_info& info)
{
+ if ((int)info.res_x == 0 || (int)info.res_y == 0)
+ return false;
+
constexpr f std_width = 640, std_height = 480;
PointOrder scaled_order;
@@ -160,7 +166,7 @@ bool PointTracker::maybe_use_old_pose(const PointOrder& order, const pt_camera_i
sum += std::sqrt(tmp.dot(tmp));
}
- // CAVEAT don't increase too much, it visibly loses precision
+ // CAVEAT don't increase too much, visibly loses precision
constexpr f max_dist = f(.04 * PointModel::N_POINTS);
// whether previous positions fit current data
@@ -246,22 +252,24 @@ void PointTracker::track(const std::vector<vec2>& points,
PointTracker::PointOrder PointTracker::find_correspondences(const vec2* points, const PointModel& model)
{
+ constexpr unsigned cnt = PointModel::N_POINTS;
// We do a simple freetrack-like sorting in the init phase...
- unsigned point_d_order[PointModel::N_POINTS];
- unsigned model_d_order[PointModel::N_POINTS];
+ unsigned point_d_order[cnt];
+ unsigned model_d_order[cnt];
// calculate d and d_order for simple freetrack-like point correspondence
vec2 d(model.M01[0]-model.M02[0], model.M01[1]-model.M02[1]);
// sort points
model.get_d_order(points, point_d_order, d);
- vec2 pts[PointModel::N_POINTS] {
- vec2(0, 0),
- vec2(model.M01[0], model.M01[1]),
- vec2(model.M02[0], model.M02[1])
+ vec2 pts[cnt] {
+ { 0, 0 },
+ { model.M01[0], model.M01[1] },
+ { model.M02[0], model.M02[1] },
};
model.get_d_order(pts, model_d_order, d);
+
// set correspondences
PointOrder p;
- for (unsigned i = 0; i < PointModel::N_POINTS; ++i)
+ for (unsigned i = 0; i < cnt; ++i)
p[model_d_order[i]] = points[point_d_order[i]];
return p;
@@ -289,8 +297,7 @@ int PointTracker::POSIT(const PointModel& model, const PointOrder& order, f foca
f old_epsilon_1 = 0;
f old_epsilon_2 = 0;
- f epsilon_1 = 1;
- f epsilon_2 = 1;
+ f epsilon_1, epsilon_2;
vec3 I0, J0;
vec2 I0_coeff, J0_coeff;