X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=samples%2Fc%2Fkalman.c;h=5418c42a869696772c5d68c50dcb1281ffceff49;hb=e4c14cdbdf2fe805e79cd96ded236f57e7b89060;hp=fb18644765bcf717bf7ef315eeac4959ebdc5b45;hpb=454138ff8a20f6edb9b65a910101403d8b520643;p=opencv diff --git a/samples/c/kalman.c b/samples/c/kalman.c index fb18644..5418c42 100644 --- a/samples/c/kalman.c +++ b/samples/c/kalman.c @@ -1,4 +1,4 @@ -/* +/* Tracking of rotating point. Rotation speed is constant. Both state and measurements vectors are 1D (a point angle), @@ -15,6 +15,8 @@ #pragma package #endif +#define CV_NO_BACKWARD_COMPATIBILITY + #ifndef _EiC #include "cv.h" #include "highgui.h" @@ -24,7 +26,7 @@ int main(int argc, char** argv) { const float A[] = { 1, 1, 0, 1 }; - + IplImage* img = cvCreateImage( cvSize(500,500), 8, 3 ); CvKalman* kalman = cvCreateKalman( 2, 1, 0 ); CvMat* state = cvCreateMat( 2, 1, CV_32FC1 ); /* (phi, delta_phi) */ @@ -39,23 +41,23 @@ int main(int argc, char** argv) for(;;) { cvRandArr( &rng, state, CV_RAND_NORMAL, cvRealScalar(0), cvRealScalar(0.1) ); - + memcpy( kalman->transition_matrix->data.fl, A, sizeof(A)); cvSetIdentity( kalman->measurement_matrix, cvRealScalar(1) ); cvSetIdentity( kalman->process_noise_cov, cvRealScalar(1e-5) ); cvSetIdentity( kalman->measurement_noise_cov, cvRealScalar(1e-1) ); cvSetIdentity( kalman->error_cov_post, cvRealScalar(1)); cvRandArr( &rng, kalman->state_post, CV_RAND_NORMAL, cvRealScalar(0), cvRealScalar(0.1) ); - + for(;;) { #define calc_point(angle) \ cvPoint( cvRound(img->width/2 + img->width/3*cos(angle)), \ - cvRound(img->height/2 - img->width/3*sin(angle))) + cvRound(img->height/2 - img->width/3*sin(angle))) float state_angle = state->data.fl[0]; CvPoint state_pt = calc_point(state_angle); - + const CvMat* prediction = cvKalmanPredict( kalman, 0 ); float predict_angle = prediction->data.fl[0]; CvPoint predict_pt = calc_point(predict_angle); @@ -70,7 +72,7 @@ int main(int argc, char** argv) measurement_angle = measurement->data.fl[0]; measurement_pt = calc_point(measurement_angle); - + /* plot points */ #define draw_cross( center, color, d ) \ cvLine( img, cvPoint( center.x - d, center.y - d ), \ @@ -84,7 +86,7 @@ int main(int argc, char** argv) draw_cross( predict_pt, CV_RGB(0,255,0), 3 ); cvLine( img, state_pt, measurement_pt, CV_RGB(255,0,0), 3, CV_AA, 0 ); cvLine( img, state_pt, predict_pt, CV_RGB(255,255,0), 3, CV_AA, 0 ); - + cvKalmanCorrect( kalman, measurement ); cvRandArr( &rng, process_noise, CV_RAND_NORMAL, cvRealScalar(0), @@ -93,14 +95,14 @@ int main(int argc, char** argv) cvShowImage( "Kalman", img ); code = (char) cvWaitKey( 100 ); - + if( code > 0 ) break; } if( code == 27 || code == 'q' || code == 'Q' ) break; } - + cvDestroyWindow("Kalman"); return 0;