[英]Kalman Filter : some doubts
我有幾個問題:
在openCV文檔中給出的示例中:
/ *生成測量* / cvMatMulAdd(kalman-> measurement_matrix,state,measurement,measurement);
它是否正確? 在教程中:Welch和Bishop在公式1.2中對卡爾曼濾波器的介紹說它測量= H *狀態+測量噪聲
似乎兩者都不一樣。
對於測量,我測量兩件事: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);
在這一行中,他們只是使用可變測量來存儲噪聲。 見前一行:
cvRandArr(&rng,measurement,CV_RAND_NORMAL,cvRealScalar(0),cvRealScalar(sqrt(kalman-> measurement_noise_cov-> data.fl [0])));
你也應該改變H
矩陣的維數。 它必須是5乘2才能計算H*state + measurement noise
。 你可能會得到一個錯誤
memcpy(cvkalman-> measurement_matrix-> data.fl,H,sizeof(H));
因為在初始示例中cvkalman->measurement_matrix
和H
被分配為4乘4矩陣,並且cvkalman->measurement_matrix
維度僅減少到5乘2(4 * 4大於5 * 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.