3

我有幾個問題:卡爾曼濾波器:有些懷疑

  1. example OpenCV的文件中給出:

    /*生成測量*/ cvMatMulAdd(kalman-> measurement_matrix,狀態,測量,測量 );

這是正確的嗎? 在教程:An Introduction to the Kalman Filter由韋爾奇和Bishop 在等式1.2它說測量= H *狀態+測量噪聲

似乎並不都是一樣的。

  1. 我試圖實現bouncing ball tracking單球。 我試過如下:(請指出,如果我不當做這件事。)

對於我測量兩點測量:球的質心的)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,狀態);

+0

檢查此鏈接一個線程卡爾曼解釋討論: http://stackoverflow.com/questions/5478881/kalman-filtering-for-programmers – 2012-05-28 08:43:06

回答

3
  1. 在這一行他們只是使用變量測量來存儲噪聲。參見前面的行:

    cvRandArr(& RNG,測量,CV_RAND_NORMAL,cvRealScalar(0),cvRealScalar(SQRT(kalman-> measurement_noise_cov-> data.fl [0])));

  2. 您應該更改H矩陣的維數。它必須是5乘以2才能計算出H*state + measurement noise。你會得到一個錯誤,大概在行

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

因爲在初始示例cvkalman->measurement_matrixH由4點矩陣分配爲4和你由2只至5下降的cvkalman->measurement_matrix尺寸(4 * 4超過5 * 2)

+1

謝謝你清除我的疑問。他們應該已經命名了變量measurement_noise。 但我認爲在openCV文檔中的例子中,H是2乘2的矩陣而不是4乘4. 這個[示例(url鏈接)](http://www.ee.surrey.ac.uk/Projects/SEP/ 0607/vision/Code/Onboard%20Visual%20System/kalman.cpp)幫助我更好地理解。 – 2011-05-13 02:49:08

+0

如果狀態矢量的維數爲n,測量維數爲m,那麼測量矩陣用m表示, – Andrey 2011-05-13 06:40:40