我正試圖在OpenCV 2.2中實現一個用於3D跟蹤的卡爾曼濾波器。狀態變量是座標x,y,z,後面是速度Vx,Vy和Vz,我只能測量x,y和z。OpenCV卡爾曼濾波器堆棧溢出
我使用了O'reilly的一本書「學習OpenCV」中的一個例子來開始,但是當我嘗試將示例應用於我的問題時,事情變得有點混亂。
這是我的實現(我試圖將代碼簡化爲相關部分,並且我已經評論了很多內容,希望可以緩解閱讀)。
CvKalman* kalman = cvCreateKalman(6, 3, 0);
// Setting the initial state estimates to [0,0,0,0,0,0].
CvMat* x_k = cvCreateMat(6, 1, CV_32FC1);
cvZero(x_k);
// Setting the a posteriori estimate to zero.
cvZero(kalman->state_post);
// Creating the process noise vector.
CvMat* w_k = cvCreateMat(2, 1, CV_32FC1);
// Creating the measurement vector.
CvMat* z_k = cvCreateMat(6, 1, CV_32FC1);
cvZero(z_k);
// Initializing the state transition matrix.
float F_kalman[] = { 1,0,0,0.05,0,0, 0,1,0,0,0.05,0, 0,0,1,0,0,0.05, 0,0,0,1,0,0, 0,0,0,0,0,1 };
memcpy(kalman->transition_matrix->data.fl, F_kalman, sizeof(F_kalman));
// Initializing the other necessary parameters for the filter.
cvSetIdentity(kalman->measurement_matrix);
cvSetIdentity(kalman->process_noise_cov, cvRealScalar(1e-2));
cvSetIdentity(kalman->measurement_noise_cov, cvRealScalar(1e-1));
cvSetIdentity(kalman->error_cov_post, cvRealScalar(1));
// Updates the measurement vector with my sensor values, wich were in the variable xyz (an array of CvScalar).
cvSetReal1D(z_k,0,xyz[i].val[0]);
cvSetReal1D(z_k,1,xyz[i].val[1]);
cvSetReal1D(z_k,2,xyz[i].val[2]);
cvKalmanPredict(kalman,0);
cvKalmanCorrect(kalman,z_k);
的問題是,當我運行的代碼,我得到了「test.exe的未處理的異常在0x55a3e757:0xC00000FD:堆棧溢出。」在cvKalmanCorrect線。
也許我已經將其中一個矩陣初始化爲錯誤的預期大小,但是我對如何檢查這個問題卻很失望。
有什麼想法?
對不起,這個答案有點讓我困惑,請問你能改寫一下嗎?謝謝 – JLagana
如果包含opencv的調試信息,我們可以看到在cvKalmanCorrect中發生錯誤的位置。無論如何,我們只是現在它發生在cvKalmanCorrect的某個地方。 – Mailerdaimon