@@ -34,66 +34,6 @@ const char* keys =
3434
3535int main (int argc, char ** argv)
3636{
37- #if 1
38- cv::Mat img (1080 , 1920 , CV_8UC3 , cv::Scalar (255 , 255 , 255 ));
39- Point_t lastPt (10 , img.rows / 2 );
40- TKalmanFilter kf (tracking::KalmanLinear, 0 .2f , 0 .5f );
41- kf.Update (lastPt, true );
42- int xStep = 5 ;
43- srand (12345 );
44-
45- cv::circle (img, lastPt, 2 , cv::Scalar (0 , 255 , 0 ), 1 );
46- cv::namedWindow (" img" , cv::WINDOW_AUTOSIZE );
47- track_t distR = 0 ;
48- track_t distF = 0 ;
49- std::vector<cv::Vec<track_t , 2 >> dists;
50- int stop_i = 200 ;
51- float step = CV_2PI / stop_i;
52- for (int i = 0 ; i < 2 * stop_i; ++i)
53- {
54- int rx = rand () % 20 ;
55- int ry = rand () % 30 ;
56- lastPt.x += xStep;
57- lastPt.y = img.rows / 2 + sin (i * step) * img.rows / 4 ;
58- Point_t pt (lastPt.x + ((rx % 2 ) ? -1 : 1 ) * rx,
59- lastPt.y + ((ry % 2 ) ? 1 : -1 ) * ry);
60-
61- Point_t upd = kf.Update (pt, true );
62- Point_t pred = kf.GetPointPrediction ();
63-
64- distR += cv::norm (cv::Vec2f (lastPt.x , lastPt.y ), cv::Vec2f (pt.x , pt.y ), cv::NORM_L2 );
65- distF += cv::norm (cv::Vec2f (lastPt.x , lastPt.y ), cv::Vec2f (upd.x , upd.y ), cv::NORM_L2 );
66-
67- dists.push_back (cv::Vec<track_t , 2 >(std::abs<track_t >(pt.x - upd.x ), std::abs<track_t >(pt.y - upd.y )));
68- if (dists.size () > 50 )
69- {
70- dists.erase (dists.begin ());
71- }
72-
73- cv::Scalar mean;
74- cv::Scalar var;
75- cv::meanStdDev (dists, mean, var);
76- std::cout << " mean = " << mean << " , var = " << var << std::endl;
77-
78- float angle = atan2 (var[0 ], var[1 ]);
79- cv::RotatedRect rr (pred,
80- cv::Size2f (std::max (10 .f , static_cast <track_t >(20 .f * var[0 ])),
81- std::max (10 .f , static_cast <track_t >(20 .f * var[1 ]))),
82- 180 .f * angle / CV_PI );
83- cv::ellipse (img, rr, cv::Scalar (100 , 100 , 100 ), 1 );
84-
85- std::cout << " orig = " << lastPt << " , noise = " << pt << " , filtered = " << upd << std::endl;
86-
87- cv::circle (img, lastPt, 2 , cv::Scalar (0 , 255 , 0 ), 1 );
88- cv::circle (img, pt, 3 , cv::Scalar (0 , 0 , 255 ), -1 );
89- cv::circle (img, upd, 4 , cv::Scalar (255 , 0 , 0 ), 1 );
90- cv::imshow (" img" , img);
91- cv::waitKey (0 );
92- }
93- std::cout << " err rand = " << distR << " , err fiiltered = " << distF << std::endl;
94- cv::waitKey (0 );
95- return 0 ;
96- #endif
9737 Help ();
9838
9939 cv::CommandLineParser parser (argc, argv, keys);
0 commit comments