15 void KalmanTracker::init_kf(
20 kf = KalmanFilter(stateNum, measureNum, 0);
22 measurement = Mat::zeros(measureNum, 1, CV_32F);
24 kf.transitionMatrix = (Mat_<float>(8, 8) << 1, 0, 0, 0, 1, 0, 0, 0,
26 0, 1, 0, 0, 0, 1, 0, 0,
27 0, 0, 1, 0, 0, 0, 1, 0,
28 0, 0, 0, 1, 0, 0, 0, 1,
29 0, 0, 0, 0, 1, 0, 0, 0,
30 0, 0, 0, 0, 0, 1, 0, 0,
31 0, 0, 0, 0, 0, 0, 1, 0,
32 0, 0, 0, 0, 0, 0, 0, 1);
34 setIdentity(kf.measurementMatrix);
35 setIdentity(kf.processNoiseCov, Scalar::all(1e-1));
36 kf.processNoiseCov.at<
float>(2, 2) = 1e0;
37 kf.processNoiseCov.at<
float>(3, 3) = 1e0;
38 setIdentity(kf.measurementNoiseCov, Scalar::all(1e-4));
39 setIdentity(kf.errorCovPost, Scalar::all(1e-2));
42 kf.statePost.at<
float>(0, 0) = stateMat.x + stateMat.width / 2;
43 kf.statePost.at<
float>(1, 0) = stateMat.y + stateMat.height / 2;
44 kf.statePost.at<
float>(2, 0) = stateMat.area();
45 kf.statePost.at<
float>(3, 0) = stateMat.width / stateMat.height;
46 kf.statePost.at<
float>(4, 0) = 0.0f;
47 kf.statePost.at<
float>(5, 0) = 0.0f;
48 kf.statePost.at<
float>(6, 0) = 0.0f;
49 kf.statePost.at<
float>(7, 0) = 0.0f;
59 if (m_time_since_update > 0)
61 m_time_since_update += 1;
63 StateType predictBox = get_rect_xysr(p.at<
float>(0, 0), p.at<
float>(1, 0), p.at<
float>(2, 0), p.at<
float>(3, 0));
65 m_history.push_back(predictBox);
66 return m_history.back();
74 StateType predictBox = get_rect_xysr(p.at<
float>(0, 0), p.at<
float>(1, 0), p.at<
float>(2, 0), p.at<
float>(3, 0));
83 m_time_since_update = 0;
89 measurement.at<
float>(0, 0) = stateMat.x + stateMat.width / 2;
90 measurement.at<
float>(1, 0) = stateMat.y + stateMat.height / 2;
91 measurement.at<
float>(2, 0) = stateMat.area();
92 measurement.at<
float>(3, 0) = stateMat.width / stateMat.height;
95 kf.correct(measurement);
105 Mat s = kf.statePost;
106 return get_rect_xysr(s.at<
float>(0, 0), s.at<
float>(1, 0), s.at<
float>(2, 0), s.at<
float>(3, 0));
116 float w = sqrt(s * r);
118 float x = (cx - w / 2);
119 float y = (cy - h / 2);