28 #ifndef OPENCVKALMAN_H_
29 #define OPENCVKALMAN_H_
37 template<
unsigned int _dims>
46 kalman = cvCreateKalman(2*_dims, _dims, 0 );
51 cvRandInit(&
rng, (
double) 0, (
double) 0, (
int)seed);
67 void InitRandom(
float m,
float sd,
float processNoise,
float measurementNoise) {
70 float A[2*_dims][2*_dims];
71 for (
int i=0;i<2*_dims;i++) {
72 for (
int j=0;j<2*_dims;j++) {
77 for (
int i=0;i<2*_dims;i++) {
81 for (
int i=0;i<_dims;i++) {
85 memcpy(
kalman->transition_matrix->data.fl, A,
sizeof(A));
87 cvSetIdentity(
kalman->measurement_matrix, cvRealScalar(1) );
88 cvSetIdentity(
kalman->process_noise_cov, cvRealScalar(processNoise) );
89 cvSetIdentity(
kalman->measurement_noise_cov, cvRealScalar(measurementNoise) );
92 cvSetIdentity(
kalman->error_cov_post, cvRealScalar(sd));
93 cvSetIdentity(
kalman->error_cov_pre, cvRealScalar(sd));
97 cvRandSetRange(&
rng, sd, m, -1);
98 rng.disttype = CV_RAND_NORMAL;
101 for (
int i=0;i<_dims;i++) {
102 kalman->state_post->data.fl[i]=m;
103 kalman->state_post->data.fl[_dims+i]=0;
110 memcpy(
measurement->data.fl, x,
sizeof(
float)*_dims);
116 memcpy(x,
kalman->state_post->data.fl,
sizeof(
float)*_dims*2);
120 for (
int i=0;i<_dims*2;i++) {
121 x[i]=cvGetReal2D(
kalman->error_cov_post, i, i);
127 return cvKalmanPredict(
kalman, 0);
132 const CvMat *prediction =
Predict();
133 memcpy(x, prediction->data.fl,
sizeof(
float)*_dims*2);