From cca730a8d311f099d1b58ecd04051b612ae3ef72 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 9 May 2022 19:14:32 +0200 Subject: tracker/{pt-base,trackhat}: add variable deadzone factor --- tracker-pt/ftnoir_tracker_pt.cpp | 2 +- tracker-pt/point-filter.cpp | 4 ++-- tracker-pt/point-filter.hpp | 2 +- tracker-pt/point_tracker.cpp | 5 +++-- tracker-pt/point_tracker.h | 3 ++- tracker-pt/pt-api.hpp | 1 + 6 files changed, 10 insertions(+), 7 deletions(-) (limited to 'tracker-pt') diff --git a/tracker-pt/ftnoir_tracker_pt.cpp b/tracker-pt/ftnoir_tracker_pt.cpp index d43e861f..0f8495d9 100644 --- a/tracker-pt/ftnoir_tracker_pt.cpp +++ b/tracker-pt/ftnoir_tracker_pt.cpp @@ -101,7 +101,7 @@ void Tracker_PT::run() { int dynamic_pose_ms = s.dynamic_pose ? s.init_phase_timeout : 0; - point_tracker.track(points, PointModel(s), info, dynamic_pose_ms, filter); + point_tracker.track(points, PointModel(s), info, dynamic_pose_ms, filter, camera->deadzone_amount()); ever_success.store(true, std::memory_order_relaxed); } diff --git a/tracker-pt/point-filter.cpp b/tracker-pt/point-filter.cpp index b03562ed..10448fe2 100644 --- a/tracker-pt/point-filter.cpp +++ b/tracker-pt/point-filter.cpp @@ -10,7 +10,7 @@ void point_filter::reset() t = std::nullopt; } -const PointOrder& point_filter::operator()(const PointOrder& input) +const PointOrder& point_filter::operator()(const PointOrder& input, f deadzone_amount) { using std::fmod; using std::sqrt; @@ -40,7 +40,7 @@ const PointOrder& point_filter::operator()(const PointOrder& input) return A * pow((f)10, (f)-log10_pos) * rest; ); - f dist = 0, dz = (float)s.point_filter_deadzone / 800; // sqrt(640^2 + 480^2) + f dist = 0, dz = deadzone_amount * (f)s.point_filter_deadzone / 800; // sqrt(640^2 + 480^2) for (unsigned i = 0; i < 3; i++) { diff --git a/tracker-pt/point-filter.hpp b/tracker-pt/point-filter.hpp index cc86505b..c3c045dd 100644 --- a/tracker-pt/point-filter.hpp +++ b/tracker-pt/point-filter.hpp @@ -19,7 +19,7 @@ class point_filter final public: void reset(); - const PointOrder& operator()(const PointOrder& input); + const PointOrder& operator()(const PointOrder& input, f deadzone_amount); explicit point_filter(const pt_settings& s); ~point_filter() = default; diff --git a/tracker-pt/point_tracker.cpp b/tracker-pt/point_tracker.cpp index aca07d8e..39e96038 100644 --- a/tracker-pt/point_tracker.cpp +++ b/tracker-pt/point_tracker.cpp @@ -137,7 +137,8 @@ void PointTracker::track(const std::vector& points, const PointModel& model, const pt_camera_info& info, int init_phase_timeout, - point_filter& filter) + point_filter& filter, + f deadzone_amount) { const f fx = pt_camera_info::get_focal_length(info.fov, info.res_x, info.res_y); PointOrder order; @@ -150,7 +151,7 @@ void PointTracker::track(const std::vector& points, else order = find_correspondences_previous(points.data(), model, info); - if (POSIT(model, filter(order), fx) != -1) + if (POSIT(model, filter(order, deadzone_amount), fx) != -1) { init_phase = false; t.start(); diff --git a/tracker-pt/point_tracker.h b/tracker-pt/point_tracker.h index 06388f49..7492b4eb 100644 --- a/tracker-pt/point_tracker.h +++ b/tracker-pt/point_tracker.h @@ -61,7 +61,8 @@ public: const PointModel& model, const pt_camera_info& info, int init_phase_timeout, - point_filter& filter); + point_filter& filter, + f deadzone_amount); Affine pose() const { return X_CM; } vec2 project(const vec3& v_M, f focal_length); vec2 project(const vec3& v_M, f focal_length, const Affine& X_CM); diff --git a/tracker-pt/pt-api.hpp b/tracker-pt/pt-api.hpp index 1a6444e5..15021ff3 100644 --- a/tracker-pt/pt-api.hpp +++ b/tracker-pt/pt-api.hpp @@ -98,6 +98,7 @@ struct pt_camera virtual void set_fov(f value) = 0; virtual void show_camera_settings() = 0; + virtual f deadzone_amount() const { return 1; } }; struct pt_point_extractor : pt_pixel_pos_mixin -- cgit v1.2.3