我有几个问题:
在example在 openCV 文档中给出:
/* 生成测量值 */ cvMatMulAdd( kalman->measurement_matrix, state, measurement, measurement );
这是正确的吗? 在教程中:An Introduction to the Kalman Filter韦尔奇和主教 在等式 1.2 中表示测量 = H*状态 + 测量噪声
看起来两者并不相同。
- 我正在尝试实现 bouncing ball tracking对于一个球。 我尝试了以下方法:(请指出我是否做错了。)
对于测量,我正在测量两件事:a) x b) 球质心的 y。
我只是提到与 opencv 文档中给出的示例不同的行。
CvKalman* kalman = cvCreateKalman( 5, 2, 0 );
const float A[] = { 1, 0, 1, 0, 0,
0, 1, 0, 1, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 1,
0, 0, 0, 0, 1};
CvMat* state = cvCreateMat( 5, 1, CV_32FC1 );
CvMat* measurement = cvCreateMat( 2, 1, CV_32FC1 );
//initialize the state of kalman filter
state->data.fl[0] = mean_c;
state->data.fl[1] = mean_r;
state->data.fl[2] = mean_c - prev_mean_c;
state->data.fl[3] = mean_r - prev_mean_r;
state->data.fl[4] = 9.81;
初始化后,这就是崩溃的原因
cvMatMulAdd( kalman->transition_matrix, 状态, kalman->process_noise_cov, 状态);
最佳答案
在这一行中,他们只是使用变量测量来存储噪音。见上一行:
cvRandArr( &rng, 测量, CV_RAND_NORMAL, cvRealScalar(0),cvRealScalar(sqrt(kalman->measurement_noise_cov->data.fl[0])) );
您还应该更改
H
矩阵的维数。它必须是 5 x 2 才能计算H*state + measurement noise
。您可能在行中收到错误memcpy( cvkalman->measurement_matrix->data.fl, H, sizeof(H));
因为在初始示例中 cvkalman->measurement_matrix
和 H
被分配为 4 x 4 矩阵并且您减少了 cvkalman->measurement_matrix
的维数只到 5 乘 2(4*4 大于 5*2)
关于image-processing - 卡尔曼滤波器 : some doubts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914894/