2016-09-28 204 views
0

初期化:カルマンフィルタのOpenCVを使用し、C++

p->kalman_filter = new cv::KalmanFilter(state_dim, measurement_dim, 0); 
    p->kalman_filter->transitionMatrix = *(cv::Mat_<float>(state_dim, state_dim) 
                << 1,0,1,0, 0,1,0,1, 
                0,0,TIME_DIFFERENCE,0, 
                0,0,0,TIME_DIFFERENCE); 
    setIdentity(p->kalman_filter->measurementMatrix); 
    setIdentity(p->kalman_filter->processNoiseCov, cv::Scalar::all(1e-4)); 
    setIdentity(p->kalman_filter->measurementNoiseCov, cv::Scalar::all(1e-1)); 
    setIdentity(p->kalman_filter->errorCovPost, cv::Scalar::all(.1)); 

TIME_DIFFERENCEは一定です。で

cv::Mat new_state; 
    track t = p->tracks.at(track_id); 

    cv::transpose((cv::Mat)t.estimated_state, p->kalman_filter->statePost); 
    t.estimated_error_covariance.copyTo(p->kalman_filter->errorCovPost); 

    new_state = p->kalman_filter->predict(); 

コードがクラッシュエラーが予測()関数にstatePre = transitionMatrix*statePost;由来する、予測します。このエラーは、タイプのアサーションが失敗したためです。 t.estimated_stateは、statePostに設定する必要があるものの転置であるため、私はtransposeを使用しています。convertTo()を使用してt.estimated_stateの型を変更しようとしました。setTo()はstatePostに対しても機能しません。

誰かが間違っていると指摘できますか?

答えて

0

私は私の問題を解決することができました。私が提供していたすべての値がdouble型であったので、私はカルマンフィルタのタイプをCV_64FC1に設定することになっていました。私はまた、MatrixをtransitionMatrixを初期化してdouble型に変更しました。 これは最終コードです

p->kalman_filter = new cv::KalmanFilter(state_dim, measurement_dim, 0, CV_64FC1); 
p->kalman_filter->transitionMatrix = *(cv::Mat_<double>(state_dim, state_dim) 
                << 1,0,1,0, 0,1,0,1, 
                0,0,TIME_DIFFERENCE,0, 
                0,0,0,TIME_DIFFERENCE); 
関連する問題