cecile_supercool_tracker/trackers/
kalman_prediction.rs1use crate::utils::bbox::Universal2DBox;
2use crate::utils::kalman::kalman_2d_box::{Universal2DBoxKalmanFilter, DIM_2D_BOX_X2};
3use crate::utils::kalman::KalmanState;
4
5pub trait TrackAttributesKalmanPrediction {
6 fn get_state(&self) -> Option<KalmanState<{ DIM_2D_BOX_X2 }>>;
7 fn set_state(&mut self, state: KalmanState<{ DIM_2D_BOX_X2 }>);
8
9 fn get_position_weight(&self) -> f32;
10
11 fn get_velocity_weight(&self) -> f32;
12
13 fn make_prediction(&mut self, observation_bbox: &Universal2DBox) -> Universal2DBox {
14 let f =
15 Universal2DBoxKalmanFilter::new(self.get_position_weight(), self.get_velocity_weight());
16
17 let current_state = if let Some(state) = self.get_state() {
18 state
19 } else {
20 f.initiate(observation_bbox)
21 };
22
23 let prediction = f.predict(¤t_state);
24
25 let new_state = f.update(&prediction, observation_bbox);
26 self.set_state(new_state);
27
28 let mut res = Universal2DBox::try_from(new_state).unwrap();
29 res.confidence = observation_bbox.confidence;
30
31 res
32 }
33}