image-processing - 卡尔曼滤波器 : some doubts

标签 image-processing opencv computer-vision tracking kalman-filter

我有几个问题:

  1. example在 openCV 文档中给出:

    /* 生成测量值 */ cvMatMulAdd( kalman->measurement_matrix, state, measurement, measurement );

这是正确的吗? 在教程中:An Introduction to the Kalman Filter韦尔奇和主教 在等式 1.2 中表示测量 = H*状态 + 测量噪声

看起来两者并不相同。

  1. 我正在尝试实现 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, 状态);

最佳答案

  1. 在这一行中,他们只是使用变量测量来存储噪音。见上一行:

    cvRandArr( &rng, 测量, CV_RAND_NORMAL, cvRealScalar(0),cvRealScalar(sqrt(kalman->measurement_noise_cov->data.fl[0])) );

  2. 您还应该更改 H 矩阵的维数。它必须是 5 x 2 才能计算 H*state + measurement noise。您可能在行中收到错误

    memcpy( cvkalman->measurement_matrix->data.fl, H, sizeof(H));

因为在初始示例中 cvkalman->measurement_matrixH 被分配为 4 x 4 矩阵并且您减少了 cvkalman->measurement_matrix 的维数只到 5 乘 2(4*4 大于 5*2)

关于image-processing - 卡尔曼滤波器 : some doubts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914894/

相关文章:

python - 用python或Halcon获取图像的绝对值导数

opencv - Color 上的模板匹配行为

c++ - 在 opencv 2.3 中从 RGB 图像中分离出红色分量图像

matlab - 从图像中裁剪椭圆

opencv - 指尖检测和跟踪

opencv - 从 OpenCv 图像比较中获取比较分数

c++ - 尝试 "blur"C++ 中的矩阵;有缺陷的算法或代码?

Matlab:如何将 "fitcecoc"的输出存储在数据库中

image-processing - 填充二进制对象内的孔

java - 从一个 Mat 复制到另一个 Mat 只有近乎黑色的像素