|
OSSIA
Open Scenario System for Interactive Application
|
Building blocks for multi-object trackers: a dt-correct scalar position-velocity Kalman filter, its N-dimensional composition, and the greedy bipartite assignment step shared by the trackers in the tree.
A constant-velocity tracker with independent axes, a diagonal measurement noise and a (block-)diagonal process noise decouples exactly into one two-state filter per axis: the full 2Nx2N filter (ByteTrack's 8-dim xyah included) is mathematically identical to N of these, so no matrix library is needed and everything below is closed-form scalar algebra.
Everything takes an explicit dt in seconds: these run off cameras, OSC and TUIO sources whose frame spacing is neither fixed nor known in advance.
Go to the source code of this file.
Classes | |
| struct | ossia::kalman_pv_filter |
| Scalar constant-velocity Kalman filter, one axis of a tracked point. More... | |
| struct | ossia::kalman_pv_filter::process_noise |
| Discrete process noise covariance for one predict step. More... | |
| struct | ossia::kalman_point_filter< N > |
| N independent position-velocity Kalman filters: a tracked N-D point. More... | |
| struct | ossia::match_candidate |
| One candidate pairing for greedy bipartite assignment. More... | |
Namespaces | |
| namespace | ossia |
Functions | |
| void | ossia::greedy_assignment (std::vector< match_candidate > &candidates, std::int32_t *track_match, std::size_t n_tracks, char *det_used, std::size_t n_dets) noexcept |
| Greedy bipartite matching: repeatedly take the cheapest remaining candidate whose track and detection are both still free. | |