簡體   English   中英

卡爾曼濾波器:有些疑惑

[英]Kalman Filter : some doubts

我有幾個問題:

  1. 在openCV文檔中給出的示例中:

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

它是否正確? 在教程中:Welch和Bishop在公式1.2中對卡爾曼濾波器的介紹說它測量= H *狀態+測量噪聲

似乎兩者都不一樣。

  1. 我試圖為一個球實施彈跳球跟蹤 我嘗試了以下方法:(如果我做錯了,請指出。)

對於測量,我測量兩件事:a)xb)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,state,kalman-> process_noise_cov,state);

  1. 在這一行中,他們只是使用可變測量來存儲噪聲。 見前一行:

    cvRandArr(&rng,measurement,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矩陣,並且cvkalman->measurement_matrix維度僅減少到5乘2(4 * 4大於5 * 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM