opencv Kalman filter ошибка отслеживания нескольких объектов

Я пытался работать с несколькими объектами отслеживания с помощью фильтра Калмана. Вот мой код,

for (int i =0; i<vGlobal.size(); i++) // Vector of objects of interest
{
cv::Point pTemp = cv::Point(vGlobal[i].iX, vGlobal[i].iY);
cv::KalmanFilter kTempKF(4,2,0);
kTempKF.statePre.at<floatt>(0) = pTemp.x;
kTempKF.statePre.at<float>(1) = pTemp.y;
kTempKF.statePre.at<float>(2) = 0;
kTempKF.statePre.at<float>(3) = 0;

kTempKF.transitionMatrix = *(cv::Mat_<float>(4,4)<< 1,0,1,0,  0,1,0,1,  0,0,1,0,  0,0,0,1);
cv::setIdentity(kTempKF.measurementMatrix);
cv::setIdentity(kTempKF.processNoiseCov, cv::Scalar::all(1e-4));
cv::setIdentity(kTempKF.measurementNoiseCov, cv::Scalar::all(10));
cv::setIdentity(kTempKF.errorCovPost, cv::Scalar::all(.1));
vKalmanFilters.push_back(kTempKF);
}

Я использую векторные фильтры Калмана для отслеживания каждого из моих объектов. Я сделал инициализацию фильтров, как указано выше. Сейчас я пытаюсь поработать над подготовкой и измерением, как показано ниже в коде.

 for (int i=0; i<vKalmanFilters.size();i++)
{
cv::Mat mPrediction = vKalmanFilters[i].predict();

cv::Point pPredict(mPrediction.at<float>(0), mPrediction.at<float>(1));
mMeasurement(0) = vGlobal[i].iX;
mMeasurement(1) = vGlobal[i].iY;cv::Mat mEstimated;mEstimated = vKalmanFilters[i].correct(mPrediction); // Run time Error occurs here}

Когда я пытаюсь запустить эту программу, я получаю ошибку времени выполнения в правильном (прогноз)

  OpenCV Error: Assertion failed (C.type() == type && (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height))) in gemm, file /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/matmul.cpp, line 741
terminate called after throwing an instance of 'cv::Exception'
what():  /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/matmul.cpp:741: error: (-215) C.type() == type && (((flags&GEMM_3_T) == 0 && C.rows == d_size.height && C.cols == d_size.width) || ((flags&GEMM_3_T) != 0 && C.rows == d_size.width && C.cols == d_size.height)) in function gemm

Я все еще новичок в Kalman Filter. Ошибка возникает в точке прогнозирования. Мой подход совершенно неверный? Пожалуйста, кто-нибудь объясните, где я иду не так.

0

Решение

Вы должны использовать mMeasurement (Матрица 2х1) вместо mPrediction (Матрица 4×1) в шаг коррекции:

mEstimated = vKalmanFilters[i].correct(mMeasurement);

Учитывая, что вы сделали:

cv::KalmanFilter kTempKF(4,2,0);
// 4 dynamic params <-- your state, e.g. [x y dx dy]
// 2 measurements params <-- your mMeasurement [x y]
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]